{
	"id": "aff3d1f3a36149a5cebdeef22addf9d0",
	"_format": "hh-sol-build-info-1",
	"solcVersion": "0.8.4",
	"solcLongVersion": "0.8.4+commit.c7e474f2",
	"input": {
		"language": "Solidity",
		"sources": {
			"bridges/facets/CBridgeFacet.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// solhint-disable-next-line\npragma solidity 0.8.4;\n\n/// @title CBridgeFacet\n/// @author Luke Wickens <luke@pillarproject.io>\n/// @notice cBridge intergration for bridging tokens\n\nimport {LibAsset} from \"../libs/LibAsset.sol\";\nimport {ICBridge} from \"../interfaces/ICBridge.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {ReentrancyGuard} from \"../helpers/ReentrancyGuard.sol\";\nimport {CannotBridgeToSameNetwork, InvalidAmount, InvalidConfig} from \"../errors/GenericErrors.sol\";\nimport {LibDiamond} from \"../libs/LibDiamond.sol\";\n\ncontract CBridgeFacet is ReentrancyGuard {\n    //////////////////////////////////////////////////////////////\n    /////////////////////////// Events ///////////////////////////\n    //////////////////////////////////////////////////////////////\n    event CBridgeInitialized(address cBridge, uint256 chainId);\n    event TransferStarted(\n        string bridgeUsed,\n        address tokenAddress,\n        address from,\n        address to,\n        uint256 amount,\n        uint256 chainIdTo\n    );\n    event UpdatedCBridgeAddress(address newAddress);\n\n    //////////////////////////////////////////////////////////////\n    ////////////////////////// Storage ///////////////////////////\n    //////////////////////////////////////////////////////////////\n\n    bytes32 internal constant NAMESPACE =\n        keccak256(\"io.etherspot.facets.cbridge\");\n    struct Storage {\n        address cBridge;\n        uint256 cBridgeChainId;\n    }\n\n    //////////////////////////////////////////////////////////////\n    ////////////////////////// Structs ///////////////////////////\n    //////////////////////////////////////////////////////////////\n\n    struct CBridgeData {\n        uint32 maxSlippage;\n        uint64 dstChainId;\n        uint64 nonce;\n        uint256 amount;\n        address receiver;\n        address token;\n    }\n\n    /// @notice initializes state variables for the cBridge facet\n    /// @param _cBridge address of the CBridge router contract\n    function initializeCBridge(address _cBridge) external {\n        LibDiamond.enforceIsContractOwner();\n        if (_cBridge == address(0)) revert InvalidConfig();\n        Storage storage s = getStorage();\n        s.cBridge = _cBridge;\n        s.cBridgeChainId = block.chainid;\n        emit CBridgeInitialized(_cBridge, block.chainid);\n    }\n\n    /// @notice initiates token bridging\n    /// @param _cBridgeData: provides necessary data for cBridge transfer\n\n    function bridgeTokensCBridge(CBridgeData calldata _cBridgeData)\n        external\n        payable\n        nonReentrant\n    {\n        LibAsset.depositAsset(_cBridgeData.token, _cBridgeData.amount);\n        _startBridge(_cBridgeData);\n\n        emit TransferStarted(\n            \"cBridge\",\n            _cBridgeData.token,\n            msg.sender,\n            _cBridgeData.receiver,\n            _cBridgeData.amount,\n            _cBridgeData.dstChainId\n        );\n    }\n\n    function updateCBridgeAddress(address _newAddress) external {\n        LibDiamond.enforceIsContractOwner();\n        if (_newAddress == address(0)) revert InvalidConfig();\n        Storage storage s = getStorage();\n        s.cBridge = _newAddress;\n        emit UpdatedCBridgeAddress(_newAddress);\n    }\n\n    //////////////////////////////////////////////////////////////\n    ////////////////////// Private Functions /////////////////////\n    //////////////////////////////////////////////////////////////\n\n    /// @dev approve bridge to spend tokens and send via cBridge router\n    function _startBridge(CBridgeData memory _cBridgeData) private {\n        Storage storage s = getStorage();\n        address bridge = s.cBridge;\n\n        if (block.chainid == _cBridgeData.dstChainId)\n            revert CannotBridgeToSameNetwork();\n\n        LibAsset.maxApproveERC20(\n            IERC20(_cBridgeData.token),\n            bridge,\n            _cBridgeData.amount\n        );\n        // solhint-disable check-send-result\n        ICBridge(bridge).send(\n            _cBridgeData.receiver,\n            _cBridgeData.token,\n            _cBridgeData.amount,\n            _cBridgeData.dstChainId,\n            _cBridgeData.nonce,\n            _cBridgeData.maxSlippage\n        );\n    }\n\n    /// @dev fetch local storage\n    function getStorage() private pure returns (Storage storage s) {\n        bytes32 namespace = NAMESPACE;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            s.slot := namespace\n        }\n    }\n}\n"
			},
			"bridges/libs/LibDiamond.sol": {
				"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.4;\n\nimport {IDiamondCut} from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n    bytes32 internal constant DIAMOND_STORAGE_POSITION =\n        keccak256(\"diamond.standard.diamond.storage\");\n\n    struct FacetAddressAndPosition {\n        address facetAddress;\n        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n    }\n\n    struct FacetFunctionSelectors {\n        bytes4[] functionSelectors;\n        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n    }\n\n    struct DiamondStorage {\n        // maps function selector to the facet address and\n        // the position of the selector in the facetFunctionSelectors.selectors array\n        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n        // maps facet addresses to function selectors\n        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n        // facet addresses\n        address[] facetAddresses;\n        // Used to query if a contract implements an interface.\n        // Used to implement ERC-165.\n        mapping(bytes4 => bool) supportedInterfaces;\n        // owner of the contract\n        address contractOwner;\n    }\n\n    function diamondStorage()\n        internal\n        pure\n        returns (DiamondStorage storage ds)\n    {\n        bytes32 position = DIAMOND_STORAGE_POSITION;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            ds.slot := position\n        }\n    }\n\n    event OwnershipTransferred(\n        address indexed previousOwner,\n        address indexed newOwner\n    );\n\n    function setContractOwner(address _newOwner) internal {\n        DiamondStorage storage ds = diamondStorage();\n        address previousOwner = ds.contractOwner;\n        ds.contractOwner = _newOwner;\n        emit OwnershipTransferred(previousOwner, _newOwner);\n    }\n\n    function contractOwner() internal view returns (address contractOwner_) {\n        contractOwner_ = diamondStorage().contractOwner;\n    }\n\n    function enforceIsContractOwner() internal view {\n        require(\n            msg.sender == diamondStorage().contractOwner,\n            \"LibDiamond: Must be contract owner\"\n        );\n    }\n\n    event DiamondCut(\n        IDiamondCut.FacetCut[] _diamondCut,\n        address _init,\n        bytes _calldata\n    );\n\n    // Internal function version of diamondCut\n    function diamondCut(\n        IDiamondCut.FacetCut[] memory _diamondCut,\n        address _init,\n        bytes memory _calldata\n    ) internal {\n        for (\n            uint256 facetIndex;\n            facetIndex < _diamondCut.length;\n            facetIndex++\n        ) {\n            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n            if (action == IDiamondCut.FacetCutAction.Add) {\n                addFunctions(\n                    _diamondCut[facetIndex].facetAddress,\n                    _diamondCut[facetIndex].functionSelectors\n                );\n            } else if (action == IDiamondCut.FacetCutAction.Replace) {\n                replaceFunctions(\n                    _diamondCut[facetIndex].facetAddress,\n                    _diamondCut[facetIndex].functionSelectors\n                );\n            } else if (action == IDiamondCut.FacetCutAction.Remove) {\n                removeFunctions(\n                    _diamondCut[facetIndex].facetAddress,\n                    _diamondCut[facetIndex].functionSelectors\n                );\n            } else {\n                revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n            }\n        }\n        emit DiamondCut(_diamondCut, _init, _calldata);\n        initializeDiamondCut(_init, _calldata);\n    }\n\n    function addFunctions(\n        address _facetAddress,\n        bytes4[] memory _functionSelectors\n    ) internal {\n        require(\n            _functionSelectors.length > 0,\n            \"LibDiamondCut: No selectors in facet to cut\"\n        );\n        DiamondStorage storage ds = diamondStorage();\n        require(\n            _facetAddress != address(0),\n            \"LibDiamondCut: Add facet can't be address(0)\"\n        );\n        uint96 selectorPosition = uint96(\n            ds.facetFunctionSelectors[_facetAddress].functionSelectors.length\n        );\n        // add new facet address if it does not exist\n        if (selectorPosition == 0) {\n            addFacet(ds, _facetAddress);\n        }\n        for (\n            uint256 selectorIndex;\n            selectorIndex < _functionSelectors.length;\n            selectorIndex++\n        ) {\n            bytes4 selector = _functionSelectors[selectorIndex];\n            address oldFacetAddress = ds\n                .selectorToFacetAndPosition[selector]\n                .facetAddress;\n            require(\n                oldFacetAddress == address(0),\n                \"LibDiamondCut: Can't add function that already exists\"\n            );\n            addFunction(ds, selector, selectorPosition, _facetAddress);\n            selectorPosition++;\n        }\n    }\n\n    function replaceFunctions(\n        address _facetAddress,\n        bytes4[] memory _functionSelectors\n    ) internal {\n        require(\n            _functionSelectors.length > 0,\n            \"LibDiamondCut: No selectors in facet to cut\"\n        );\n        DiamondStorage storage ds = diamondStorage();\n        require(\n            _facetAddress != address(0),\n            \"LibDiamondCut: Add facet can't be address(0)\"\n        );\n        uint96 selectorPosition = uint96(\n            ds.facetFunctionSelectors[_facetAddress].functionSelectors.length\n        );\n        // add new facet address if it does not exist\n        if (selectorPosition == 0) {\n            addFacet(ds, _facetAddress);\n        }\n        for (\n            uint256 selectorIndex;\n            selectorIndex < _functionSelectors.length;\n            selectorIndex++\n        ) {\n            bytes4 selector = _functionSelectors[selectorIndex];\n            address oldFacetAddress = ds\n                .selectorToFacetAndPosition[selector]\n                .facetAddress;\n            require(\n                oldFacetAddress != _facetAddress,\n                \"LibDiamondCut: Can't replace function with same function\"\n            );\n            removeFunction(ds, oldFacetAddress, selector);\n            addFunction(ds, selector, selectorPosition, _facetAddress);\n            selectorPosition++;\n        }\n    }\n\n    function removeFunctions(\n        address _facetAddress,\n        bytes4[] memory _functionSelectors\n    ) internal {\n        require(\n            _functionSelectors.length > 0,\n            \"LibDiamondCut: No selectors in facet to cut\"\n        );\n        DiamondStorage storage ds = diamondStorage();\n        // if function does not exist then do nothing and return\n        require(\n            _facetAddress == address(0),\n            \"LibDiamondCut: Remove facet address must be address(0)\"\n        );\n        for (\n            uint256 selectorIndex;\n            selectorIndex < _functionSelectors.length;\n            selectorIndex++\n        ) {\n            bytes4 selector = _functionSelectors[selectorIndex];\n            address oldFacetAddress = ds\n                .selectorToFacetAndPosition[selector]\n                .facetAddress;\n            removeFunction(ds, oldFacetAddress, selector);\n        }\n    }\n\n    function addFacet(DiamondStorage storage ds, address _facetAddress)\n        internal\n    {\n        enforceHasContractCode(\n            _facetAddress,\n            \"LibDiamondCut: New facet has no code\"\n        );\n        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds\n            .facetAddresses\n            .length;\n        ds.facetAddresses.push(_facetAddress);\n    }\n\n    function addFunction(\n        DiamondStorage storage ds,\n        bytes4 _selector,\n        uint96 _selectorPosition,\n        address _facetAddress\n    ) internal {\n        ds\n            .selectorToFacetAndPosition[_selector]\n            .functionSelectorPosition = _selectorPosition;\n        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(\n            _selector\n        );\n        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n    }\n\n    function removeFunction(\n        DiamondStorage storage ds,\n        address _facetAddress,\n        bytes4 _selector\n    ) internal {\n        require(\n            _facetAddress != address(0),\n            \"LibDiamondCut: Can't remove function that doesn't exist\"\n        );\n        // an immutable function is a function defined directly in a diamond\n        require(\n            _facetAddress != address(this),\n            \"LibDiamondCut: Can't remove immutable function\"\n        );\n        // replace selector with last selector, then delete last selector\n        uint256 selectorPosition = ds\n            .selectorToFacetAndPosition[_selector]\n            .functionSelectorPosition;\n        uint256 lastSelectorPosition = ds\n            .facetFunctionSelectors[_facetAddress]\n            .functionSelectors\n            .length - 1;\n        // if not the same then replace _selector with lastSelector\n        if (selectorPosition != lastSelectorPosition) {\n            bytes4 lastSelector = ds\n                .facetFunctionSelectors[_facetAddress]\n                .functionSelectors[lastSelectorPosition];\n            ds.facetFunctionSelectors[_facetAddress].functionSelectors[\n                    selectorPosition\n                ] = lastSelector;\n            ds\n                .selectorToFacetAndPosition[lastSelector]\n                .functionSelectorPosition = uint96(selectorPosition);\n        }\n        // delete the last selector\n        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n        delete ds.selectorToFacetAndPosition[_selector];\n\n        // if no more selectors for facet address then delete the facet address\n        if (lastSelectorPosition == 0) {\n            // replace facet address with last facet address and delete last facet address\n            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n            uint256 facetAddressPosition = ds\n                .facetFunctionSelectors[_facetAddress]\n                .facetAddressPosition;\n            if (facetAddressPosition != lastFacetAddressPosition) {\n                address lastFacetAddress = ds.facetAddresses[\n                    lastFacetAddressPosition\n                ];\n                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n                ds\n                    .facetFunctionSelectors[lastFacetAddress]\n                    .facetAddressPosition = facetAddressPosition;\n            }\n            ds.facetAddresses.pop();\n            delete ds\n                .facetFunctionSelectors[_facetAddress]\n                .facetAddressPosition;\n        }\n    }\n\n    function initializeDiamondCut(address _init, bytes memory _calldata)\n        internal\n    {\n        if (_init == address(0)) {\n            require(\n                _calldata.length == 0,\n                \"LibDiamondCut: _init is address(0) but_calldata is not empty\"\n            );\n        } else {\n            require(\n                _calldata.length > 0,\n                \"LibDiamondCut: _calldata is empty but _init is not address(0)\"\n            );\n            if (_init != address(this)) {\n                enforceHasContractCode(\n                    _init,\n                    \"LibDiamondCut: _init address has no code\"\n                );\n            }\n            // solhint-disable-next-line avoid-low-level-calls\n            (bool success, bytes memory error) = _init.delegatecall(_calldata);\n            if (!success) {\n                if (error.length > 0) {\n                    // bubble up the error\n                    revert(string(error));\n                } else {\n                    revert(\"LibDiamondCut: _init function reverted\");\n                }\n            }\n        }\n    }\n\n    function enforceHasContractCode(\n        address _contract,\n        string memory _errorMessage\n    ) internal view {\n        uint256 contractSize;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            contractSize := extcodesize(_contract)\n        }\n        require(contractSize > 0, _errorMessage);\n    }\n}\n"
			},
			"bridges/errors/GenericErrors.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// solhint-disable-next-line\npragma solidity 0.8.4;\n\nerror InvalidAmount();\nerror TokenAddressIsZero();\nerror CannotBridgeToSameNetwork();\nerror ZeroPostSwapBalance();\nerror InvalidBridgeConfigLength();\nerror NoSwapDataProvided();\nerror NativeValueWithERC();\nerror ContractCallNotAllowed();\nerror NullAddrIsNotAValidSpender();\nerror NullAddrIsNotAnERC20Token();\nerror NoTransferToNullAddress();\nerror NativeAssetTransferFailed();\nerror InvalidContract();\nerror InvalidConfig();\n"
			},
			"bridges/helpers/ReentrancyGuard.sol": {
				"content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity 0.8.4;\n\n/// @title Reentrancy Guard\n/// @author LI.FI (https://li.fi)\n/// @notice Abstract contract to provide protection against reentrancy\nabstract contract ReentrancyGuard {\n    /// Storage ///\n\n    bytes32 private constant NAMESPACE =\n        hex\"a65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b\";\n\n    /// Types ///\n\n    struct ReentrancyStorage {\n        uint256 status;\n    }\n\n    /// Errors ///\n\n    error ReentrancyError();\n\n    /// Constants ///\n\n    uint256 private constant _NOT_ENTERED = 0;\n    uint256 private constant _ENTERED = 1;\n\n    /// Modifiers ///\n\n    modifier nonReentrant() {\n        ReentrancyStorage storage s = reentrancyStorage();\n        if (s.status == _ENTERED) revert ReentrancyError();\n        s.status = _ENTERED;\n        _;\n        s.status = _NOT_ENTERED;\n    }\n\n    /// Private Methods ///\n\n    /// @dev fetch local storage\n    function reentrancyStorage()\n        private\n        pure\n        returns (ReentrancyStorage storage data)\n    {\n        bytes32 position = NAMESPACE;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            data.slot := position\n        }\n    }\n}\n"
			},
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(\n        address from,\n        address to,\n        uint256 amount\n    ) external returns (bool);\n}\n"
			},
			"bridges/interfaces/ICBridge.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// solhint-disable-next-line\npragma solidity 0.8.4;\n\ninterface ICBridge {\n    function send(\n        address _receiver,\n        address _token,\n        uint256 _amount,\n        uint64 _dstChinId,\n        uint64 _nonce,\n        uint32 _maxSlippage\n    ) external;\n\n    function sendNative(\n        address _receiver,\n        uint256 _amount,\n        uint64 _dstChinId,\n        uint64 _nonce,\n        uint32 _maxSlippage\n    ) external payable;\n\n    function relay(\n        bytes calldata _relayRequest,\n        bytes[] calldata _sigs,\n        address[] calldata _signers,\n        uint256[] calldata _powers\n    ) external;\n}\n"
			},
			"bridges/libs/LibAsset.sol": {
				"content": "// SPDX-License-Identifier: UNLICENSED\n// solhint-disable-next-line\npragma solidity 0.8.4;\nimport {NullAddrIsNotAnERC20Token, NullAddrIsNotAValidSpender, NoTransferToNullAddress, InvalidAmount, NativeValueWithERC, NativeAssetTransferFailed} from \"../errors/GenericErrors.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @title LibAsset\n/// @author Connext <support@connext.network>\n/// @notice This library contains helpers for dealing with onchain transfers\n///         of assets, including accounting for the native asset `assetId`\n///         conventions and any noncompliant ERC20 transfers\nlibrary LibAsset {\n    uint256 private constant MAX_INT = type(uint256).max;\n\n    address internal constant NULL_ADDRESS =\n        0x0000000000000000000000000000000000000000; //address(0)\n\n    /// @dev All native assets use the empty address for their asset id\n    ///      by convention\n\n    address internal constant NATIVE_ASSETID = NULL_ADDRESS; //address(0)\n\n    /// @notice Gets the balance of the inheriting contract for the given asset\n    /// @param assetId The asset identifier to get the balance of\n    /// @return Balance held by contracts using this library\n    function getOwnBalance(address assetId) internal view returns (uint256) {\n        return\n            assetId == NATIVE_ASSETID\n                ? address(this).balance\n                : IERC20(assetId).balanceOf(address(this));\n    }\n\n    /// @notice Transfers ether from the inheriting contract to a given\n    ///         recipient\n    /// @param recipient Address to send ether to\n    /// @param amount Amount to send to given recipient\n    function transferNativeAsset(address payable recipient, uint256 amount)\n        private\n    {\n        if (recipient == NULL_ADDRESS) revert NoTransferToNullAddress();\n        // solhint-disable-next-line avoid-low-level-calls\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        if (!success) revert NativeAssetTransferFailed();\n    }\n\n    /// @notice Gives MAX approval for another address to spend tokens\n    /// @param assetId Token address to transfer\n    /// @param spender Address to give spend approval to\n    /// @param amount Amount to approve for spending\n    function maxApproveERC20(\n        IERC20 assetId,\n        address spender,\n        uint256 amount\n    ) internal {\n        if (address(assetId) == NATIVE_ASSETID) return;\n        if (spender == NULL_ADDRESS) revert NullAddrIsNotAValidSpender();\n        uint256 allowance = assetId.allowance(address(this), spender);\n        if (allowance < amount)\n            SafeERC20.safeApprove(IERC20(assetId), spender, MAX_INT);\n    }\n\n    /// @notice Transfers tokens from the inheriting contract to a given\n    ///         recipient\n    /// @param assetId Token address to transfer\n    /// @param recipient Address to send token to\n    /// @param amount Amount to send to given recipient\n    function transferERC20(\n        address assetId,\n        address recipient,\n        uint256 amount\n    ) private {\n        if (isNativeAsset(assetId)) revert NullAddrIsNotAnERC20Token();\n        SafeERC20.safeTransfer(IERC20(assetId), recipient, amount);\n    }\n\n    /// @notice Transfers tokens from a sender to a given recipient\n    /// @param assetId Token address to transfer\n    /// @param from Address of sender/owner\n    /// @param to Address of recipient/spender\n    /// @param amount Amount to transfer from owner to spender\n    function transferFromERC20(\n        address assetId,\n        address from,\n        address to,\n        uint256 amount\n    ) internal {\n        if (assetId == NATIVE_ASSETID) revert NullAddrIsNotAnERC20Token();\n        if (to == NULL_ADDRESS) revert NoTransferToNullAddress();\n        SafeERC20.safeTransferFrom(IERC20(assetId), from, to, amount);\n    }\n\n    /// @notice Deposits an asset into the contract and performs checks to avoid NativeValueWithERC\n    /// @param tokenId Token to deposit\n    /// @param amount Amount to deposit\n    /// @param isNative Wether the token is native or ERC20\n    function depositAsset(\n        address tokenId,\n        uint256 amount,\n        bool isNative\n    ) internal {\n        if (amount == 0) revert InvalidAmount();\n        if (isNative) {\n            if (msg.value != amount) revert InvalidAmount();\n        } else {\n            if (msg.value != 0) revert NativeValueWithERC();\n            uint256 _fromTokenBalance = LibAsset.getOwnBalance(tokenId);\n            LibAsset.transferFromERC20(\n                tokenId,\n                msg.sender,\n                address(this),\n                amount\n            );\n            if (LibAsset.getOwnBalance(tokenId) - _fromTokenBalance != amount)\n                revert InvalidAmount();\n        }\n    }\n\n    /// @notice Overload for depositAsset(address tokenId, uint256 amount, bool isNative)\n    /// @param tokenId Token to deposit\n    /// @param amount Amount to deposit\n    function depositAsset(address tokenId, uint256 amount) internal {\n        return depositAsset(tokenId, amount, tokenId == NATIVE_ASSETID);\n    }\n\n    /// @notice Determines whether the given assetId is the native asset\n    /// @param assetId The asset identifier to evaluate\n    /// @return Boolean indicating if the asset is the native asset\n    function isNativeAsset(address assetId) internal pure returns (bool) {\n        return assetId == NATIVE_ASSETID;\n    }\n\n    /// @notice Wrapper function to transfer a given asset (native or erc20) to\n    ///         some recipient. Should handle all non-compliant return value\n    ///         tokens as well by using the SafeERC20 contract by open zeppelin.\n    /// @param assetId Asset id for transfer (address(0) for native asset,\n    ///                token address for erc20s)\n    /// @param recipient Address to send asset to\n    /// @param amount Amount to send to given recipient\n    function transferAsset(\n        address assetId,\n        address payable recipient,\n        uint256 amount\n    ) internal {\n        (assetId == NATIVE_ASSETID)\n            ? transferNativeAsset(recipient, amount)\n            : transferERC20(assetId, recipient, amount);\n    }\n\n    /// @dev Checks whether the given address is a contract and contains code\n    function isContract(address _contractAddr) internal view returns (bool) {\n        uint256 size;\n        // solhint-disable-next-line no-inline-assembly\n        assembly {\n            size := extcodesize(_contractAddr)\n        }\n        return size > 0;\n    }\n}\n"
			},
			"bridges/interfaces/IDiamondCut.sol": {
				"content": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.4;\n\ninterface IDiamondCut {\n    enum FacetCutAction {\n        Add,\n        Replace,\n        Remove\n    }\n    // Add=0, Replace=1, Remove=2\n\n    struct FacetCut {\n        address facetAddress;\n        FacetCutAction action;\n        bytes4[] functionSelectors;\n    }\n\n    /// @notice Add/replace/remove any number of functions and optionally execute\n    ///         a function with delegatecall\n    /// @param _diamondCut Contains the facet addresses and function selectors\n    /// @param _init The address of the contract or facet to execute _calldata\n    /// @param _calldata A function call, including function selector and arguments\n    ///                  _calldata is executed with delegatecall on _init\n    function diamondCut(\n        FacetCut[] calldata _diamondCut,\n        address _init,\n        bytes calldata _calldata\n    ) external;\n\n    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n"
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../extensions/draft-IERC20Permit.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n    using Address for address;\n\n    function safeTransfer(\n        IERC20 token,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n    }\n\n    function safeTransferFrom(\n        IERC20 token,\n        address from,\n        address to,\n        uint256 value\n    ) internal {\n        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n    }\n\n    /**\n     * @dev Deprecated. This function has issues similar to the ones found in\n     * {IERC20-approve}, and its usage is discouraged.\n     *\n     * Whenever possible, use {safeIncreaseAllowance} and\n     * {safeDecreaseAllowance} instead.\n     */\n    function safeApprove(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        // safeApprove should only be called when setting an initial allowance,\n        // or when resetting it to zero. To increase and decrease it, use\n        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n        require(\n            (value == 0) || (token.allowance(address(this), spender) == 0),\n            \"SafeERC20: approve from non-zero to non-zero allowance\"\n        );\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n    }\n\n    function safeIncreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        uint256 newAllowance = token.allowance(address(this), spender) + value;\n        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n    }\n\n    function safeDecreaseAllowance(\n        IERC20 token,\n        address spender,\n        uint256 value\n    ) internal {\n        unchecked {\n            uint256 oldAllowance = token.allowance(address(this), spender);\n            require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n            uint256 newAllowance = oldAllowance - value;\n            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n        }\n    }\n\n    function safePermit(\n        IERC20Permit token,\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) internal {\n        uint256 nonceBefore = token.nonces(owner);\n        token.permit(owner, spender, value, deadline, v, r, s);\n        uint256 nonceAfter = token.nonces(owner);\n        require(nonceAfter == nonceBefore + 1, \"SafeERC20: permit did not succeed\");\n    }\n\n    /**\n     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n     * on the return value: the return value is optional (but if data is returned, it must not be false).\n     * @param token The token targeted by the call.\n     * @param data The call data (encoded using abi.encode or one of its variants).\n     */\n    function _callOptionalReturn(IERC20 token, bytes memory data) private {\n        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n        // the target address contains contract code and also asserts for success in the low-level call.\n\n        bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n        if (returndata.length > 0) {\n            // Return data is optional\n            require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n        }\n    }\n}\n"
			},
			"@openzeppelin/contracts/utils/Address.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev Returns true if `account` is a contract.\n     *\n     * [IMPORTANT]\n     * ====\n     * It is unsafe to assume that an address for which this function returns\n     * false is an externally-owned account (EOA) and not a contract.\n     *\n     * Among others, `isContract` will return false for the following\n     * types of addresses:\n     *\n     *  - an externally-owned account\n     *  - a contract in construction\n     *  - an address where a contract will be created\n     *  - an address where a contract lived, but was destroyed\n     * ====\n     *\n     * [IMPORTANT]\n     * ====\n     * You shouldn't rely on `isContract` to protect against flash loan attacks!\n     *\n     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n     * constructor.\n     * ====\n     */\n    function isContract(address account) internal view returns (bool) {\n        // This method relies on extcodesize/address.code.length, which returns 0\n        // for contracts in construction, since the code is only stored at the end\n        // of the constructor execution.\n\n        return account.code.length > 0;\n    }\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        require(success, \"Address: unable to send value, recipient may have reverted\");\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason, it is bubbled up by this\n     * function (like regular Solidity function calls).\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCall(target, data, \"Address: low-level call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n     * `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n     * with `errorMessage` as a fallback revert reason when `target` reverts.\n     *\n     * _Available since v3.1._\n     */\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(address(this).balance >= value, \"Address: insufficient balance for call\");\n        require(isContract(target), \"Address: call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        return functionStaticCall(target, data, \"Address: low-level static call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a static call.\n     *\n     * _Available since v3.3._\n     */\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        require(isContract(target), \"Address: static call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n     * but performing a delegate call.\n     *\n     * _Available since v3.4._\n     */\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(isContract(target), \"Address: delegate call to non-contract\");\n\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResult(success, returndata, errorMessage);\n    }\n\n    /**\n     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n     * revert reason using the provided one.\n     *\n     * _Available since v4.3._\n     */\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            // Look for revert reason and bubble it up if present\n            if (returndata.length > 0) {\n                // The easiest way to bubble the revert reason is using memory via assembly\n                /// @solidity memory-safe-assembly\n                assembly {\n                    let returndata_size := mload(returndata)\n                    revert(add(32, returndata), returndata_size)\n                }\n            } else {\n                revert(errorMessage);\n            }\n        }\n    }\n}\n"
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\ninterface IERC20Permit {\n    /**\n     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n     * given ``owner``'s signed approval.\n     *\n     * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n     * ordering also apply here.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `deadline` must be a timestamp in the future.\n     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n     * over the EIP712-formatted function arguments.\n     * - the signature must use ``owner``'s current nonce (see {nonces}).\n     *\n     * For more information on the signature format, see the\n     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n     * section].\n     */\n    function permit(\n        address owner,\n        address spender,\n        uint256 value,\n        uint256 deadline,\n        uint8 v,\n        bytes32 r,\n        bytes32 s\n    ) external;\n\n    /**\n     * @dev Returns the current nonce for `owner`. This value must be\n     * included whenever a signature is generated for {permit}.\n     *\n     * Every successful call to {permit} increases ``owner``'s nonce by one. This\n     * prevents a signature from being used multiple times.\n     */\n    function nonces(address owner) external view returns (uint256);\n\n    /**\n     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n     */\n    // solhint-disable-next-line func-name-mixedcase\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"
			}
		},
		"settings": {
			"optimizer": {
				"enabled": true,
				"runs": 200
			},
			"outputSelection": {
				"*": {
					"": [
						"ast"
					],
					"*": [
						"abi",
						"metadata",
						"devdoc",
						"userdoc",
						"storageLayout",
						"evm.legacyAssembly",
						"evm.bytecode",
						"evm.deployedBytecode",
						"evm.methodIdentifiers",
						"evm.gasEstimates",
						"evm.assembly"
					]
				}
			}
		}
	},
	"output": {
		"contracts": {
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"IERC20": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "owner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "spender",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "value",
									"type": "uint256"
								}
							],
							"name": "Approval",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "from",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "value",
									"type": "uint256"
								}
							],
							"name": "Transfer",
							"type": "event"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "owner",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "spender",
									"type": "address"
								}
							],
							"name": "allowance",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "spender",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "approve",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "account",
									"type": "address"
								}
							],
							"name": "balanceOf",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [],
							"name": "totalSupply",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "transfer",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "from",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								}
							],
							"name": "transferFrom",
							"outputs": [
								{
									"internalType": "bool",
									"name": "",
									"type": "bool"
								}
							],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"details": "Interface of the ERC20 standard as defined in the EIP.",
						"events": {
							"Approval(address,address,uint256)": {
								"details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
							},
							"Transfer(address,address,uint256)": {
								"details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
							}
						},
						"kind": "dev",
						"methods": {
							"allowance(address,address)": {
								"details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
							},
							"approve(address,uint256)": {
								"details": "Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event."
							},
							"balanceOf(address)": {
								"details": "Returns the amount of tokens owned by `account`."
							},
							"totalSupply()": {
								"details": "Returns the amount of tokens in existence."
							},
							"transfer(address,uint256)": {
								"details": "Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
							},
							"transferFrom(address,address,uint256)": {
								"details": "Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event."
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"allowance(address,address)": "dd62ed3e",
							"approve(address,uint256)": "095ea7b3",
							"balanceOf(address)": "70a08231",
							"totalSupply()": "18160ddd",
							"transfer(address,uint256)": "a9059cbb",
							"transferFrom(address,address,uint256)": "23b872dd"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `from` to `to` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"IERC20Permit": {
					"abi": [
						{
							"inputs": [],
							"name": "DOMAIN_SEPARATOR",
							"outputs": [
								{
									"internalType": "bytes32",
									"name": "",
									"type": "bytes32"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "owner",
									"type": "address"
								}
							],
							"name": "nonces",
							"outputs": [
								{
									"internalType": "uint256",
									"name": "",
									"type": "uint256"
								}
							],
							"stateMutability": "view",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "owner",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "spender",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "value",
									"type": "uint256"
								},
								{
									"internalType": "uint256",
									"name": "deadline",
									"type": "uint256"
								},
								{
									"internalType": "uint8",
									"name": "v",
									"type": "uint8"
								},
								{
									"internalType": "bytes32",
									"name": "r",
									"type": "bytes32"
								},
								{
									"internalType": "bytes32",
									"name": "s",
									"type": "bytes32"
								}
							],
							"name": "permit",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"details": "Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.",
						"kind": "dev",
						"methods": {
							"DOMAIN_SEPARATOR()": {
								"details": "Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."
							},
							"nonces(address)": {
								"details": "Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."
							},
							"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
								"details": "Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]."
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"DOMAIN_SEPARATOR()": "3644e515",
							"nonces(address)": "7ecebe00",
							"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"SafeERC20": {
					"abi": [],
					"devdoc": {
						"details": "Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.",
						"kind": "dev",
						"methods": {},
						"title": "SafeERC20",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":707:4455  library SafeERC20 {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, shl(0xe0, 0x4e487b71))\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":707:4455  library SafeERC20 {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220ab000422977d375044dfeae3eb870ffe4eabe1f1312992d56a85f09d1b1967b064736f6c63430008040033\n}\n",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ab000422977d375044dfeae3eb870ffe4eabe1f1312992d56a85f09d1b1967b064736f6c63430008040033",
							"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP DIV 0x22 SWAP8 PUSH30 0x375044DFEAE3EB870FFE4EABE1F1312992D56A85F09D1B1967B064736F6C PUSH4 0x43000804 STOP CALLER ",
							"sourceMap": "707:3748:2:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;707:3748:2;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ab000422977d375044dfeae3eb870ffe4eabe1f1312992d56a85f09d1b1967b064736f6c63430008040033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB STOP DIV 0x22 SWAP8 PUSH30 0x375044DFEAE3EB870FFE4EABE1F1312992D56A85F09D1B1967B064736F6C PUSH4 0x43000804 STOP CALLER ",
							"sourceMap": "707:3748:2:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "103",
								"totalCost": "17303"
							},
							"internal": {
								"_callOptionalReturn(contract IERC20,bytes memory)": "infinite",
								"safeApprove(contract IERC20,address,uint256)": "infinite",
								"safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite",
								"safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite",
								"safePermit(contract IERC20Permit,address,address,uint256,uint256,uint8,bytes32,bytes32)": "infinite",
								"safeTransfer(contract IERC20,address,uint256)": "infinite",
								"safeTransferFrom(contract IERC20,address,address,uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH #[$]",
									"source": 2,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH [$]",
									"source": 2,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "B"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "CODECOPY",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP1",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MLOAD",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "BYTE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "73"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "EQ",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH [tag]",
									"source": 2,
									"value": "1"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "JUMPI",
									"source": 2
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "4E487B71"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "E0"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "SHL",
									"source": -1
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "4"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "24"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "REVERT",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "tag",
									"source": 2,
									"value": "1"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "JUMPDEST",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "ADDRESS",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "0"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "PUSH",
									"source": 2,
									"value": "73"
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP2",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "MSTORE8",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP3",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "DUP2",
									"source": 2
								},
								{
									"begin": 707,
									"end": 4455,
									"name": "RETURN",
									"source": 2
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220ab000422977d375044dfeae3eb870ffe4eabe1f1312992d56a85f09d1b1967b064736f6c63430008040033",
									".code": [
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSHDEPLOYADDRESS",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "ADDRESS",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "EQ",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "80"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 707,
											"end": 4455,
											"name": "REVERT",
											"source": 2
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"@openzeppelin/contracts/utils/Address.sol": {
				"Address": {
					"abi": [],
					"devdoc": {
						"details": "Collection of functions related to the address type",
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305  library Address {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, shl(0xe0, 0x4e487b71))\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"@openzeppelin/contracts/utils/Address.sol\":194:8305  library Address {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220bc04e532bc5780dc3a9ad645814a2e2296de5f4da92fd4d9932455e782a945de64736f6c63430008040033\n}\n",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc04e532bc5780dc3a9ad645814a2e2296de5f4da92fd4d9932455e782a945de64736f6c63430008040033",
							"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC DIV 0xE5 ORIGIN 0xBC JUMPI DUP1 0xDC GASPRICE SWAP11 0xD6 GASLIMIT DUP2 0x4A 0x2E 0x22 SWAP7 0xDE 0x5F 0x4D 0xA9 0x2F 0xD4 0xD9 SWAP4 0x24 SSTORE 0xE7 DUP3 0xA9 GASLIMIT 0xDE PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "194:8111:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8111:3;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc04e532bc5780dc3a9ad645814a2e2296de5f4da92fd4d9932455e782a945de64736f6c63430008040033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC DIV 0xE5 ORIGIN 0xBC JUMPI DUP1 0xDC GASPRICE SWAP11 0xD6 GASLIMIT DUP2 0x4A 0x2E 0x22 SWAP7 0xDE 0x5F 0x4D 0xA9 0x2F 0xD4 0xD9 SWAP4 0x24 SSTORE 0xE7 DUP3 0xA9 GASLIMIT 0xDE PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "194:8111:3:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "103",
								"totalCost": "17303"
							},
							"internal": {
								"functionCall(address,bytes memory)": "infinite",
								"functionCall(address,bytes memory,string memory)": "infinite",
								"functionCallWithValue(address,bytes memory,uint256)": "infinite",
								"functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
								"functionDelegateCall(address,bytes memory)": "infinite",
								"functionDelegateCall(address,bytes memory,string memory)": "infinite",
								"functionStaticCall(address,bytes memory)": "infinite",
								"functionStaticCall(address,bytes memory,string memory)": "infinite",
								"isContract(address)": "infinite",
								"sendValue(address payable,uint256)": "infinite",
								"verifyCallResult(bool,bytes memory,string memory)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH #[$]",
									"source": 3,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH [$]",
									"source": 3,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "B"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "CODECOPY",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP1",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MLOAD",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "BYTE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "73"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "EQ",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH [tag]",
									"source": 3,
									"value": "1"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "JUMPI",
									"source": 3
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "4E487B71"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "E0"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "SHL",
									"source": -1
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "4"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "24"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "REVERT",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "tag",
									"source": 3,
									"value": "1"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "JUMPDEST",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "ADDRESS",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "0"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "PUSH",
									"source": 3,
									"value": "73"
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP2",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "MSTORE8",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP3",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "DUP2",
									"source": 3
								},
								{
									"begin": 194,
									"end": 8305,
									"name": "RETURN",
									"source": 3
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220bc04e532bc5780dc3a9ad645814a2e2296de5f4da92fd4d9932455e782a945de64736f6c63430008040033",
									".code": [
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSHDEPLOYADDRESS",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "ADDRESS",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "EQ",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "80"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 194,
											"end": 8305,
											"name": "REVERT",
											"source": 3
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"bridges/facets/CBridgeFacet.sol": {
				"CBridgeFacet": {
					"abi": [
						{
							"inputs": [],
							"name": "CannotBridgeToSameNetwork",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "InvalidAmount",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "InvalidConfig",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "NativeValueWithERC",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "NoTransferToNullAddress",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "NullAddrIsNotAValidSpender",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "NullAddrIsNotAnERC20Token",
							"type": "error"
						},
						{
							"inputs": [],
							"name": "ReentrancyError",
							"type": "error"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "address",
									"name": "cBridge",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "chainId",
									"type": "uint256"
								}
							],
							"name": "CBridgeInitialized",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "string",
									"name": "bridgeUsed",
									"type": "string"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "tokenAddress",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "from",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "to",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "amount",
									"type": "uint256"
								},
								{
									"indexed": false,
									"internalType": "uint256",
									"name": "chainIdTo",
									"type": "uint256"
								}
							],
							"name": "TransferStarted",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": false,
									"internalType": "address",
									"name": "newAddress",
									"type": "address"
								}
							],
							"name": "UpdatedCBridgeAddress",
							"type": "event"
						},
						{
							"inputs": [
								{
									"components": [
										{
											"internalType": "uint32",
											"name": "maxSlippage",
											"type": "uint32"
										},
										{
											"internalType": "uint64",
											"name": "dstChainId",
											"type": "uint64"
										},
										{
											"internalType": "uint64",
											"name": "nonce",
											"type": "uint64"
										},
										{
											"internalType": "uint256",
											"name": "amount",
											"type": "uint256"
										},
										{
											"internalType": "address",
											"name": "receiver",
											"type": "address"
										},
										{
											"internalType": "address",
											"name": "token",
											"type": "address"
										}
									],
									"internalType": "struct CBridgeFacet.CBridgeData",
									"name": "_cBridgeData",
									"type": "tuple"
								}
							],
							"name": "bridgeTokensCBridge",
							"outputs": [],
							"stateMutability": "payable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_cBridge",
									"type": "address"
								}
							],
							"name": "initializeCBridge",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_newAddress",
									"type": "address"
								}
							],
							"name": "updateCBridgeAddress",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {
							"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))": {
								"params": {
									"_cBridgeData": ": provides necessary data for cBridge transfer"
								}
							},
							"initializeCBridge(address)": {
								"params": {
									"_cBridge": "address of the CBridge router contract"
								}
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"bridges/facets/CBridgeFacet.sol\":600:4497  contract CBridgeFacet is ReentrancyGuard {... */\n  mstore(0x40, 0x80)\n  callvalue\n  dup1\n  iszero\n  tag_1\n  jumpi\n  0x00\n  dup1\n  revert\ntag_1:\n  pop\n  dataSize(sub_0)\n  dup1\n  dataOffset(sub_0)\n  0x00\n  codecopy\n  0x00\n  return\nstop\n\nsub_0: assembly {\n        /* \"bridges/facets/CBridgeFacet.sol\":600:4497  contract CBridgeFacet is ReentrancyGuard {... */\n      mstore(0x40, 0x80)\n      jumpi(tag_1, lt(calldatasize, 0x04))\n      shr(0xe0, calldataload(0x00))\n      dup1\n      0x1124bcf9\n      eq\n      tag_2\n      jumpi\n      dup1\n      0x5277cbc7\n      eq\n      tag_3\n      jumpi\n      dup1\n      0xdae03389\n      eq\n      tag_4\n      jumpi\n    tag_1:\n      0x00\n      dup1\n      revert\n        /* \"bridges/facets/CBridgeFacet.sol\":2041:2379  function initializeCBridge(address _cBridge) external {... */\n    tag_2:\n      callvalue\n      dup1\n      iszero\n      tag_5\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_5:\n      pop\n      tag_6\n      tag_7\n      calldatasize\n      0x04\n      tag_8\n      jump\t// in\n    tag_7:\n      tag_9\n      jump\t// in\n    tag_6:\n      stop\n        /* \"bridges/facets/CBridgeFacet.sol\":2501:2963  function bridgeTokensCBridge(CBridgeData calldata _cBridgeData)... */\n    tag_3:\n      tag_6\n      tag_11\n      calldatasize\n      0x04\n      tag_12\n      jump\t// in\n    tag_11:\n      tag_13\n      jump\t// in\n        /* \"bridges/facets/CBridgeFacet.sol\":2969:3268  function updateCBridgeAddress(address _newAddress) external {... */\n    tag_4:\n      callvalue\n      dup1\n      iszero\n      tag_14\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_14:\n      pop\n      tag_6\n      tag_16\n      calldatasize\n      0x04\n      tag_8\n      jump\t// in\n    tag_16:\n      tag_17\n      jump\t// in\n        /* \"bridges/facets/CBridgeFacet.sol\":2041:2379  function initializeCBridge(address _cBridge) external {... */\n    tag_9:\n        /* \"bridges/facets/CBridgeFacet.sol\":2105:2140  LibDiamond.enforceIsContractOwner() */\n      tag_19\n        /* \"bridges/facets/CBridgeFacet.sol\":2105:2138  LibDiamond.enforceIsContractOwner */\n      tag_20\n        /* \"bridges/facets/CBridgeFacet.sol\":2105:2140  LibDiamond.enforceIsContractOwner() */\n      jump\t// in\n    tag_19:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/facets/CBridgeFacet.sol\":2154:2176  _cBridge == address(0) */\n      dup2\n      and\n        /* \"bridges/facets/CBridgeFacet.sol\":2150:2200  if (_cBridge == address(0)) revert InvalidConfig() */\n      tag_21\n      jumpi\n        /* \"bridges/facets/CBridgeFacet.sol\":2185:2200  InvalidConfig() */\n      mload(0x40)\n      shl(0xe3, 0x06b7c759)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/facets/CBridgeFacet.sol\":2150:2200  if (_cBridge == address(0)) revert InvalidConfig() */\n    tag_21:\n        /* \"bridges/facets/CBridgeFacet.sol\":1397:1437  keccak256(\"io.etherspot.facets.cbridge\") */\n      0x9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a\n        /* \"bridges/facets/CBridgeFacet.sol\":2252:2272  s.cBridge = _cBridge */\n      dup1\n      sload\n      not(sub(shl(0xa0, 0x01), 0x01))\n      and\n      sub(shl(0xa0, 0x01), 0x01)\n      dup4\n      and\n      swap1\n      dup2\n      or\n      dup3\n      sstore\n        /* \"bridges/facets/CBridgeFacet.sol\":2301:2314  block.chainid */\n      chainid\n        /* \"bridges/facets/CBridgeFacet.sol\":2282:2298  s.cBridgeChainId */\n      0x9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4b\n        /* \"bridges/facets/CBridgeFacet.sol\":2282:2314  s.cBridgeChainId = block.chainid */\n      dup2\n      swap1\n      sstore\n        /* \"bridges/facets/CBridgeFacet.sol\":2329:2372  CBridgeInitialized(_cBridge, block.chainid) */\n      0x40\n      dup1\n      mload\n        /* \"#utility.yul\":4587:4638   */\n      swap3\n      dup4\n      mstore\n        /* \"#utility.yul\":4669:4671   */\n      0x20\n        /* \"#utility.yul\":4654:4672   */\n      dup4\n      add\n        /* \"#utility.yul\":4647:4681   */\n      swap2\n      swap1\n      swap2\n      mstore\n        /* \"bridges/facets/CBridgeFacet.sol\":2329:2372  CBridgeInitialized(_cBridge, block.chainid) */\n      0x5b114a545b5a08e3628017ac6e1af1f29e3f593dde50a4a93ab76f2a2220cd38\n      swap2\n        /* \"#utility.yul\":4560:4578   */\n      add\n        /* \"bridges/facets/CBridgeFacet.sol\":2329:2372  CBridgeInitialized(_cBridge, block.chainid) */\n    tag_24:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log1\n        /* \"bridges/facets/CBridgeFacet.sol\":2041:2379  function initializeCBridge(address _cBridge) external {... */\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/facets/CBridgeFacet.sol\":2501:2963  function bridgeTokensCBridge(CBridgeData calldata _cBridgeData)... */\n    tag_13:\n        /* \"bridges/helpers/ReentrancyGuard.sol\":1077:1086  NAMESPACE */\n      0xa65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b\n        /* \"bridges/helpers/ReentrancyGuard.sol\":743:751  s.status */\n      dup1\n      sload\n        /* \"bridges/helpers/ReentrancyGuard.sol\":615:616  1 */\n      0x01\n        /* \"bridges/helpers/ReentrancyGuard.sol\":743:763  s.status == _ENTERED */\n      eq\n        /* \"bridges/helpers/ReentrancyGuard.sol\":739:789  if (s.status == _ENTERED) revert ReentrancyError() */\n      iszero\n      tag_29\n      jumpi\n        /* \"bridges/helpers/ReentrancyGuard.sol\":772:789  ReentrancyError() */\n      mload(0x40)\n      shl(0xe0, 0x29f745a7)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/helpers/ReentrancyGuard.sol\":739:789  if (s.status == _ENTERED) revert ReentrancyError() */\n    tag_29:\n        /* \"bridges/helpers/ReentrancyGuard.sol\":615:616  1 */\n      0x01\n        /* \"bridges/helpers/ReentrancyGuard.sol\":799:818  s.status = _ENTERED */\n      dup2\n      sstore\n        /* \"bridges/facets/CBridgeFacet.sol\":2633:2695  LibAsset.depositAsset(_cBridgeData.token, _cBridgeData.amount) */\n      tag_31\n        /* \"bridges/facets/CBridgeFacet.sol\":2655:2673  _cBridgeData.token */\n      tag_32\n      0xc0\n      dup5\n      add\n      0xa0\n      dup6\n      add\n      tag_8\n      jump\t// in\n    tag_32:\n        /* \"bridges/facets/CBridgeFacet.sol\":2675:2687  _cBridgeData */\n      dup4\n        /* \"bridges/facets/CBridgeFacet.sol\":2675:2694  _cBridgeData.amount */\n      0x60\n      add\n      calldataload\n        /* \"bridges/facets/CBridgeFacet.sol\":2633:2654  LibAsset.depositAsset */\n      tag_33\n        /* \"bridges/facets/CBridgeFacet.sol\":2633:2695  LibAsset.depositAsset(_cBridgeData.token, _cBridgeData.amount) */\n      jump\t// in\n    tag_31:\n        /* \"bridges/facets/CBridgeFacet.sol\":2705:2731  _startBridge(_cBridgeData) */\n      tag_34\n      tag_35\n      calldatasize\n      dup5\n      swap1\n      sub\n      dup5\n      add\n        /* \"bridges/facets/CBridgeFacet.sol\":2718:2730  _cBridgeData */\n      dup5\n        /* \"bridges/facets/CBridgeFacet.sol\":2705:2731  _startBridge(_cBridgeData) */\n      tag_36\n      jump\t// in\n    tag_35:\n        /* \"bridges/facets/CBridgeFacet.sol\":2705:2717  _startBridge */\n      tag_37\n        /* \"bridges/facets/CBridgeFacet.sol\":2705:2731  _startBridge(_cBridgeData) */\n      jump\t// in\n    tag_34:\n        /* \"bridges/facets/CBridgeFacet.sol\":2747:2956  TransferStarted(... */\n      0x83bd4b75444b26482a091d91d32e43a65722f9fd8267a590beadccd9e61539e8\n        /* \"bridges/facets/CBridgeFacet.sol\":2799:2817  _cBridgeData.token */\n      tag_38\n      0xc0\n      dup5\n      add\n      0xa0\n      dup6\n      add\n      tag_8\n      jump\t// in\n    tag_38:\n        /* \"bridges/facets/CBridgeFacet.sol\":2831:2841  msg.sender */\n      caller\n        /* \"bridges/facets/CBridgeFacet.sol\":2855:2876  _cBridgeData.receiver */\n      tag_39\n      0xa0\n      dup7\n      add\n      0x80\n      dup8\n      add\n      tag_8\n      jump\t// in\n    tag_39:\n        /* \"bridges/facets/CBridgeFacet.sol\":2890:2909  _cBridgeData.amount */\n      0x60\n      dup7\n      add\n      calldataload\n        /* \"bridges/facets/CBridgeFacet.sol\":2923:2946  _cBridgeData.dstChainId */\n      tag_40\n      0x40\n      dup9\n      add\n      0x20\n      dup10\n      add\n      tag_41\n      jump\t// in\n    tag_40:\n        /* \"bridges/facets/CBridgeFacet.sol\":2747:2956  TransferStarted(... */\n      0x40\n      dup1\n      mload\n        /* \"#utility.yul\":6231:6234   */\n      0xc0\n        /* \"#utility.yul\":6213:6235   */\n      dup1\n      dup3\n      mstore\n        /* \"#utility.yul\":6272:6273   */\n      0x07\n        /* \"#utility.yul\":6251:6270   */\n      swap1\n      dup3\n      add\n        /* \"#utility.yul\":6244:6274   */\n      mstore\n      shl(0xc8, 0x63427269646765)\n        /* \"#utility.yul\":6305:6308   */\n      0xe0\n        /* \"#utility.yul\":6290:6309   */\n      dup3\n      add\n        /* \"#utility.yul\":6283:6321   */\n      mstore\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":6433:6448   */\n      swap7\n      dup8\n      and\n        /* \"#utility.yul\":6426:6430   */\n      0x20\n        /* \"#utility.yul\":6411:6431   */\n      dup3\n      add\n        /* \"#utility.yul\":6404:6449   */\n      mstore\n        /* \"#utility.yul\":6485:6500   */\n      swap5\n      dup7\n      and\n        /* \"#utility.yul\":6465:6483   */\n      swap1\n      dup6\n      add\n        /* \"#utility.yul\":6458:6501   */\n      mstore\n        /* \"#utility.yul\":6537:6552   */\n      swap4\n      swap1\n      swap2\n      and\n        /* \"#utility.yul\":6532:6534   */\n      0x60\n        /* \"#utility.yul\":6517:6535   */\n      dup4\n      add\n        /* \"#utility.yul\":6510:6553   */\n      mstore\n      0x80\n        /* \"#utility.yul\":6569:6588   */\n      dup3\n      add\n        /* \"#utility.yul\":6562:6597   */\n      mstore\n        /* \"#utility.yul\":6646:6664   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":6634:6665   */\n      swap1\n      swap2\n      and\n      0xa0\n        /* \"#utility.yul\":6613:6632   */\n      dup3\n      add\n        /* \"#utility.yul\":6606:6666   */\n      mstore\n        /* \"#utility.yul\":6353:6356   */\n      0x0100\n        /* \"#utility.yul\":6338:6357   */\n      add\n        /* \"bridges/facets/CBridgeFacet.sol\":2747:2956  TransferStarted(... */\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      log1\n        /* \"bridges/helpers/ReentrancyGuard.sol\":572:573  0 */\n      0x00\n        /* \"bridges/helpers/ReentrancyGuard.sol\":839:862  s.status = _NOT_ENTERED */\n      swap1\n      sstore\n      pop\n        /* \"bridges/facets/CBridgeFacet.sol\":2501:2963  function bridgeTokensCBridge(CBridgeData calldata _cBridgeData)... */\n      jump\t// out\n        /* \"bridges/facets/CBridgeFacet.sol\":2969:3268  function updateCBridgeAddress(address _newAddress) external {... */\n    tag_17:\n        /* \"bridges/facets/CBridgeFacet.sol\":3039:3074  LibDiamond.enforceIsContractOwner() */\n      tag_45\n        /* \"bridges/facets/CBridgeFacet.sol\":3039:3072  LibDiamond.enforceIsContractOwner */\n      tag_20\n        /* \"bridges/facets/CBridgeFacet.sol\":3039:3074  LibDiamond.enforceIsContractOwner() */\n      jump\t// in\n    tag_45:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/facets/CBridgeFacet.sol\":3088:3113  _newAddress == address(0) */\n      dup2\n      and\n        /* \"bridges/facets/CBridgeFacet.sol\":3084:3137  if (_newAddress == address(0)) revert InvalidConfig() */\n      tag_46\n      jumpi\n        /* \"bridges/facets/CBridgeFacet.sol\":3122:3137  InvalidConfig() */\n      mload(0x40)\n      shl(0xe3, 0x06b7c759)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/facets/CBridgeFacet.sol\":3084:3137  if (_newAddress == address(0)) revert InvalidConfig() */\n    tag_46:\n        /* \"bridges/facets/CBridgeFacet.sol\":1397:1437  keccak256(\"io.etherspot.facets.cbridge\") */\n      0x9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a\n        /* \"bridges/facets/CBridgeFacet.sol\":3189:3212  s.cBridge = _newAddress */\n      dup1\n      sload\n      not(sub(shl(0xa0, 0x01), 0x01))\n      and\n      sub(shl(0xa0, 0x01), 0x01)\n      dup4\n      and\n      swap1\n      dup2\n      or\n      dup3\n      sstore\n        /* \"bridges/facets/CBridgeFacet.sol\":3227:3261  UpdatedCBridgeAddress(_newAddress) */\n      mload(0x40)\n        /* \"#utility.yul\":3000:3051   */\n      swap1\n      dup2\n      mstore\n        /* \"bridges/facets/CBridgeFacet.sol\":3227:3261  UpdatedCBridgeAddress(_newAddress) */\n      0xef1a021f4afad10827a9f886313f92d00348a53d0b0df8d0aa270a0ac3379bc5\n      swap1\n        /* \"#utility.yul\":2988:2990   */\n      0x20\n        /* \"#utility.yul\":2973:2991   */\n      add\n        /* \"bridges/facets/CBridgeFacet.sol\":3227:3261  UpdatedCBridgeAddress(_newAddress) */\n      tag_24\n        /* \"#utility.yul\":2955:3057   */\n      jump\n        /* \"bridges/libs/LibDiamond.sol\":2079:2269  function enforceIsContractOwner() internal view {... */\n    tag_20:\n        /* \"bridges/libs/LibDiamond.sol\":202:247  keccak256(\"diamond.standard.diamond.storage\") */\n      0xc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c\n        /* \"bridges/libs/LibDiamond.sol\":2172:2202  diamondStorage().contractOwner */\n      0x04\n      add\n      sload\n      sub(shl(0xa0, 0x01), 0x01)\n      and\n        /* \"bridges/libs/LibDiamond.sol\":2158:2168  msg.sender */\n      caller\n        /* \"bridges/libs/LibDiamond.sol\":2158:2202  msg.sender == diamondStorage().contractOwner */\n      eq\n        /* \"bridges/libs/LibDiamond.sol\":2137:2262  require(... */\n      tag_53\n      jumpi\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n        /* \"#utility.yul\":5282:5284   */\n      0x20\n        /* \"bridges/libs/LibDiamond.sol\":2137:2262  require(... */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":5264:5285   */\n      mstore\n        /* \"#utility.yul\":5321:5323   */\n      0x22\n        /* \"#utility.yul\":5301:5319   */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":5294:5324   */\n      mstore\n        /* \"#utility.yul\":5360:5394   */\n      0x4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e\n        /* \"#utility.yul\":5340:5358   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":5333:5395   */\n      mstore\n      shl(0xf1, 0x32b9)\n        /* \"#utility.yul\":5411:5429   */\n      0x64\n      dup3\n      add\n        /* \"#utility.yul\":5404:5436   */\n      mstore\n        /* \"#utility.yul\":5453:5472   */\n      0x84\n      add\n        /* \"bridges/libs/LibDiamond.sol\":2137:2262  require(... */\n    tag_54:\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n    tag_53:\n        /* \"bridges/libs/LibDiamond.sol\":2079:2269  function enforceIsContractOwner() internal view {... */\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":4970:5114  function depositAsset(address tokenId, uint256 amount) internal {... */\n    tag_33:\n        /* \"bridges/libs/LibAsset.sol\":5051:5107  depositAsset(tokenId, amount, tokenId == NATIVE_ASSETID) */\n      tag_59\n        /* \"bridges/libs/LibAsset.sol\":5064:5071  tokenId */\n      dup3\n        /* \"bridges/libs/LibAsset.sol\":5073:5079  amount */\n      dup3\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":5081:5106  tokenId == NATIVE_ASSETID */\n      dup3\n      and\n      iszero\n        /* \"bridges/libs/LibAsset.sol\":5051:5063  depositAsset */\n      tag_60\n        /* \"bridges/libs/LibAsset.sol\":5051:5107  depositAsset(tokenId, amount, tokenId == NATIVE_ASSETID) */\n      jump\t// in\n    tag_59:\n        /* \"bridges/libs/LibAsset.sol\":4970:5114  function depositAsset(address tokenId, uint256 amount) internal {... */\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/facets/CBridgeFacet.sol\":3548:4230  function _startBridge(CBridgeData memory _cBridgeData) private {... */\n    tag_37:\n        /* \"bridges/facets/CBridgeFacet.sol\":3621:3638  Storage storage s */\n      0x00\n        /* \"bridges/facets/CBridgeFacet.sol\":1397:1437  keccak256(\"io.etherspot.facets.cbridge\") */\n      0x9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a\n        /* \"bridges/facets/CBridgeFacet.sol\":3680:3689  s.cBridge */\n      dup1\n      sload\n        /* \"bridges/facets/CBridgeFacet.sol\":3721:3744  _cBridgeData.dstChainId */\n      0x20\n      dup5\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":3680:3689  s.cBridge */\n      swap2\n      swap3\n      pop\n      sub(shl(0xa0, 0x01), 0x01)\n      and\n      swap1\n        /* \"bridges/facets/CBridgeFacet.sol\":3704:3744  block.chainid == _cBridgeData.dstChainId */\n      0xffffffffffffffff\n      and\n        /* \"bridges/facets/CBridgeFacet.sol\":3704:3717  block.chainid */\n      chainid\n        /* \"bridges/facets/CBridgeFacet.sol\":3704:3744  block.chainid == _cBridgeData.dstChainId */\n      eq\n        /* \"bridges/facets/CBridgeFacet.sol\":3700:3792  if (block.chainid == _cBridgeData.dstChainId)... */\n      iszero\n      tag_63\n      jumpi\n        /* \"bridges/facets/CBridgeFacet.sol\":3765:3792  CannotBridgeToSameNetwork() */\n      mload(0x40)\n      shl(0xe0, 0x4ac09ad3)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/facets/CBridgeFacet.sol\":3700:3792  if (block.chainid == _cBridgeData.dstChainId)... */\n    tag_63:\n        /* \"bridges/facets/CBridgeFacet.sol\":3803:3930  LibAsset.maxApproveERC20(... */\n      tag_64\n        /* \"bridges/facets/CBridgeFacet.sol\":3848:3860  _cBridgeData */\n      dup4\n        /* \"bridges/facets/CBridgeFacet.sol\":3848:3866  _cBridgeData.token */\n      0xa0\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":3881:3887  bridge */\n      dup3\n        /* \"bridges/facets/CBridgeFacet.sol\":3901:3913  _cBridgeData */\n      dup6\n        /* \"bridges/facets/CBridgeFacet.sol\":3901:3920  _cBridgeData.amount */\n      0x60\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":3803:3827  LibAsset.maxApproveERC20 */\n      tag_65\n        /* \"bridges/facets/CBridgeFacet.sol\":3803:3930  LibAsset.maxApproveERC20(... */\n      jump\t// in\n    tag_64:\n        /* \"bridges/facets/CBridgeFacet.sol\":4020:4041  _cBridgeData.receiver */\n      0x80\n      dup4\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":4055:4073  _cBridgeData.token */\n      0xa0\n      dup5\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":4087:4106  _cBridgeData.amount */\n      0x60\n      dup6\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":4120:4143  _cBridgeData.dstChainId */\n      0x20\n      dup7\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":4157:4175  _cBridgeData.nonce */\n      0x40\n      dup1\n      dup9\n      add\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":4189:4213  _cBridgeData.maxSlippage */\n      dup9\n      mload\n        /* \"bridges/facets/CBridgeFacet.sol\":3985:4223  ICBridge(bridge).send(... */\n      swap2\n      mload\n      shl(0xe0, 0xa5977fbb)\n      dup2\n      mstore\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":4088:4103   */\n      swap7\n      dup8\n      and\n        /* \"bridges/facets/CBridgeFacet.sol\":3985:4223  ICBridge(bridge).send(... */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":4070:4104   */\n      mstore\n        /* \"#utility.yul\":4140:4155   */\n      swap5\n      dup7\n      and\n        /* \"#utility.yul\":4120:4138   */\n      0x24\n      dup7\n      add\n        /* \"#utility.yul\":4113:4156   */\n      mstore\n        /* \"#utility.yul\":4172:4190   */\n      0x44\n      dup6\n      add\n        /* \"#utility.yul\":4165:4199   */\n      swap4\n      swap1\n      swap4\n      mstore\n        /* \"#utility.yul\":4218:4236   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":4272:4287   */\n      swap2\n      dup3\n      and\n        /* \"#utility.yul\":4252:4270   */\n      0x64\n      dup6\n      add\n        /* \"#utility.yul\":4245:4288   */\n      mstore\n        /* \"#utility.yul\":4325:4340   */\n      swap2\n      and\n        /* \"#utility.yul\":4304:4323   */\n      0x84\n      dup4\n      add\n        /* \"#utility.yul\":4297:4341   */\n      mstore\n        /* \"bridges/facets/CBridgeFacet.sol\":3985:4223  ICBridge(bridge).send(... */\n      0xffffffff\n        /* \"#utility.yul\":4378:4401   */\n      and\n        /* \"#utility.yul\":4357:4376   */\n      0xa4\n      dup3\n      add\n        /* \"#utility.yul\":4350:4402   */\n      mstore\n        /* \"bridges/facets/CBridgeFacet.sol\":3985:4006  ICBridge(bridge).send */\n      swap1\n      dup3\n      and\n      swap1\n      0xa5977fbb\n      swap1\n        /* \"#utility.yul\":4004:4023   */\n      0xc4\n      add\n        /* \"bridges/facets/CBridgeFacet.sol\":3985:4223  ICBridge(bridge).send(... */\n      0x00\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      0x00\n      dup8\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_68\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_68:\n      pop\n      gas\n      call\n      iszero\n      dup1\n      iszero\n      tag_70\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_70:\n      pop\n      pop\n      pop\n      pop\n        /* \"bridges/facets/CBridgeFacet.sol\":3548:4230  function _startBridge(CBridgeData memory _cBridgeData) private {... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":4102:4794  function depositAsset(... */\n    tag_60:\n        /* \"bridges/libs/LibAsset.sol\":4225:4236  amount == 0 */\n      dup2\n        /* \"bridges/libs/LibAsset.sol\":4221:4260  if (amount == 0) revert InvalidAmount() */\n      tag_73\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":4245:4260  InvalidAmount() */\n      mload(0x40)\n      shl(0xe1, 0x162908e3)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":4221:4260  if (amount == 0) revert InvalidAmount() */\n    tag_73:\n        /* \"bridges/libs/LibAsset.sol\":4274:4282  isNative */\n      dup1\n        /* \"bridges/libs/LibAsset.sol\":4270:4788  if (isNative) {... */\n      iszero\n      tag_74\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":4315:4321  amount */\n      dup2\n        /* \"bridges/libs/LibAsset.sol\":4302:4311  msg.value */\n      callvalue\n        /* \"bridges/libs/LibAsset.sol\":4302:4321  msg.value != amount */\n      eq\n        /* \"bridges/libs/LibAsset.sol\":4298:4345  if (msg.value != amount) revert InvalidAmount() */\n      tag_75\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":4330:4345  InvalidAmount() */\n      mload(0x40)\n      shl(0xe1, 0x162908e3)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":4298:4345  if (msg.value != amount) revert InvalidAmount() */\n    tag_75:\n        /* \"bridges/libs/LibAsset.sol\":4102:4794  function depositAsset(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":4270:4788  if (isNative) {... */\n    tag_74:\n        /* \"bridges/libs/LibAsset.sol\":4380:4389  msg.value */\n      callvalue\n        /* \"bridges/libs/LibAsset.sol\":4380:4394  msg.value != 0 */\n      iszero\n        /* \"bridges/libs/LibAsset.sol\":4376:4423  if (msg.value != 0) revert NativeValueWithERC() */\n      tag_77\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":4403:4423  NativeValueWithERC() */\n      mload(0x40)\n      shl(0xe0, 0x3f45b5)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":4376:4423  if (msg.value != 0) revert NativeValueWithERC() */\n    tag_77:\n        /* \"bridges/libs/LibAsset.sol\":4437:4462  uint256 _fromTokenBalance */\n      0x00\n        /* \"bridges/libs/LibAsset.sol\":4465:4496  LibAsset.getOwnBalance(tokenId) */\n      tag_78\n        /* \"bridges/libs/LibAsset.sol\":4488:4495  tokenId */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":4465:4487  LibAsset.getOwnBalance */\n      tag_79\n        /* \"bridges/libs/LibAsset.sol\":4465:4496  LibAsset.getOwnBalance(tokenId) */\n      jump\t// in\n    tag_78:\n        /* \"bridges/libs/LibAsset.sol\":4437:4496  uint256 _fromTokenBalance = LibAsset.getOwnBalance(tokenId) */\n      swap1\n      pop\n        /* \"bridges/libs/LibAsset.sol\":4510:4658  LibAsset.transferFromERC20(... */\n      tag_80\n        /* \"bridges/libs/LibAsset.sol\":4554:4561  tokenId */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":4579:4589  msg.sender */\n      caller\n        /* \"bridges/libs/LibAsset.sol\":4615:4619  this */\n      address\n        /* \"bridges/libs/LibAsset.sol\":4638:4644  amount */\n      dup7\n        /* \"bridges/libs/LibAsset.sol\":4510:4536  LibAsset.transferFromERC20 */\n      tag_81\n        /* \"bridges/libs/LibAsset.sol\":4510:4658  LibAsset.transferFromERC20(... */\n      jump\t// in\n    tag_80:\n        /* \"bridges/libs/LibAsset.sol\":4731:4737  amount */\n      dup3\n        /* \"bridges/libs/LibAsset.sol\":4710:4727  _fromTokenBalance */\n      dup2\n        /* \"bridges/libs/LibAsset.sol\":4676:4707  LibAsset.getOwnBalance(tokenId) */\n      tag_82\n        /* \"bridges/libs/LibAsset.sol\":4699:4706  tokenId */\n      dup7\n        /* \"bridges/libs/LibAsset.sol\":4676:4698  LibAsset.getOwnBalance */\n      tag_79\n        /* \"bridges/libs/LibAsset.sol\":4676:4707  LibAsset.getOwnBalance(tokenId) */\n      jump\t// in\n    tag_82:\n        /* \"bridges/libs/LibAsset.sol\":4676:4727  LibAsset.getOwnBalance(tokenId) - _fromTokenBalance */\n      tag_83\n      swap2\n      swap1\n      tag_84\n      jump\t// in\n    tag_83:\n        /* \"bridges/libs/LibAsset.sol\":4676:4737  LibAsset.getOwnBalance(tokenId) - _fromTokenBalance != amount */\n      eq\n        /* \"bridges/libs/LibAsset.sol\":4672:4777  if (LibAsset.getOwnBalance(tokenId) - _fromTokenBalance != amount)... */\n      tag_85\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":4762:4777  InvalidAmount() */\n      mload(0x40)\n      shl(0xe1, 0x162908e3)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":4672:4777  if (LibAsset.getOwnBalance(tokenId) - _fromTokenBalance != amount)... */\n    tag_85:\n        /* \"bridges/libs/LibAsset.sol\":4270:4788  if (isNative) {... */\n      pop\n        /* \"bridges/libs/LibAsset.sol\":4102:4794  function depositAsset(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":2284:2707  function maxApproveERC20(... */\n    tag_65:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":2411:2445  address(assetId) == NATIVE_ASSETID */\n      dup4\n      and\n        /* \"bridges/libs/LibAsset.sol\":2407:2454  if (address(assetId) == NATIVE_ASSETID) return; */\n      tag_87\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":2284:2707  function maxApproveERC20(... */\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":2407:2454  if (address(assetId) == NATIVE_ASSETID) return; */\n    tag_87:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":2467:2490  spender == NULL_ADDRESS */\n      dup3\n      and\n        /* \"bridges/libs/LibAsset.sol\":2463:2527  if (spender == NULL_ADDRESS) revert NullAddrIsNotAValidSpender() */\n      tag_88\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":2499:2527  NullAddrIsNotAValidSpender() */\n      mload(0x40)\n      shl(0xe0, 0x63ba9bff)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":2463:2527  if (spender == NULL_ADDRESS) revert NullAddrIsNotAValidSpender() */\n    tag_88:\n        /* \"bridges/libs/LibAsset.sol\":2557:2598  assetId.allowance(address(this), spender) */\n      mload(0x40)\n      shl(0xe1, 0x6eb1769f)\n      dup2\n      mstore\n        /* \"bridges/libs/LibAsset.sol\":2583:2587  this */\n      address\n        /* \"bridges/libs/LibAsset.sol\":2557:2598  assetId.allowance(address(this), spender) */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":3274:3308   */\n      mstore\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":3344:3359   */\n      dup4\n      dup2\n      and\n        /* \"#utility.yul\":3324:3342   */\n      0x24\n      dup4\n      add\n        /* \"#utility.yul\":3317:3360   */\n      mstore\n        /* \"bridges/libs/LibAsset.sol\":2537:2554  uint256 allowance */\n      0x00\n      swap2\n        /* \"bridges/libs/LibAsset.sol\":2557:2574  assetId.allowance */\n      swap1\n      dup6\n      and\n      swap1\n      0xdd62ed3e\n      swap1\n        /* \"#utility.yul\":3209:3227   */\n      0x44\n      add\n        /* \"bridges/libs/LibAsset.sol\":2557:2598  assetId.allowance(address(this), spender) */\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_91\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_91:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_93\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_93:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_94\n      swap2\n      swap1\n      tag_95\n      jump\t// in\n    tag_94:\n        /* \"bridges/libs/LibAsset.sol\":2537:2598  uint256 allowance = assetId.allowance(address(this), spender) */\n      swap1\n      pop\n        /* \"bridges/libs/LibAsset.sol\":2624:2630  amount */\n      dup2\n        /* \"bridges/libs/LibAsset.sol\":2612:2621  allowance */\n      dup2\n        /* \"bridges/libs/LibAsset.sol\":2612:2630  allowance < amount */\n      lt\n        /* \"bridges/libs/LibAsset.sol\":2608:2700  if (allowance < amount)... */\n      iszero\n      tag_85\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":2644:2700  SafeERC20.safeApprove(IERC20(assetId), spender, MAX_INT) */\n      tag_85\n        /* \"bridges/libs/LibAsset.sol\":2673:2680  assetId */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":2683:2690  spender */\n      dup5\n      not(0x00)\n        /* \"bridges/libs/LibAsset.sol\":2644:2665  SafeERC20.safeApprove */\n      tag_98\n        /* \"bridges/libs/LibAsset.sol\":2644:2700  SafeERC20.safeApprove(IERC20(assetId), spender, MAX_INT) */\n      jump\t// in\n        /* \"bridges/libs/LibAsset.sol\":1255:1487  function getOwnBalance(address assetId) internal view returns (uint256) {... */\n    tag_79:\n        /* \"bridges/libs/LibAsset.sol\":1318:1325  uint256 */\n      0x00\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":1356:1381  assetId == NATIVE_ASSETID */\n      dup3\n      and\n      iszero\n        /* \"bridges/libs/LibAsset.sol\":1356:1480  assetId == NATIVE_ASSETID... */\n      tag_100\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":1440:1480  IERC20(assetId).balanceOf(address(this)) */\n      mload(0x40)\n      shl(0xe0, 0x70a08231)\n      dup2\n      mstore\n        /* \"bridges/libs/LibAsset.sol\":1474:1478  this */\n      address\n        /* \"bridges/libs/LibAsset.sol\":1440:1480  IERC20(assetId).balanceOf(address(this)) */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":3000:3051   */\n      mstore\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":1440:1465  IERC20(assetId).balanceOf */\n      dup4\n      and\n      swap1\n      0x70a08231\n      swap1\n        /* \"#utility.yul\":2973:2991   */\n      0x24\n      add\n        /* \"bridges/libs/LibAsset.sol\":1440:1480  IERC20(assetId).balanceOf(address(this)) */\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_102\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_102:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_104\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_104:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_105\n      swap2\n      swap1\n      tag_95\n      jump\t// in\n    tag_105:\n        /* \"bridges/libs/LibAsset.sol\":1356:1480  assetId == NATIVE_ASSETID... */\n      jump(tag_106)\n    tag_100:\n        /* \"bridges/libs/LibAsset.sol\":1400:1421  address(this).balance */\n      selfbalance\n        /* \"bridges/libs/LibAsset.sol\":1356:1480  assetId == NATIVE_ASSETID... */\n    tag_106:\n        /* \"bridges/libs/LibAsset.sol\":1337:1480  return... */\n      swap3\n        /* \"bridges/libs/LibAsset.sol\":1255:1487  function getOwnBalance(address assetId) internal view returns (uint256) {... */\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"bridges/libs/LibAsset.sol\":3504:3856  function transferFromERC20(... */\n    tag_81:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":3651:3676  assetId == NATIVE_ASSETID */\n      dup5\n      and\n        /* \"bridges/libs/LibAsset.sol\":3647:3712  if (assetId == NATIVE_ASSETID) revert NullAddrIsNotAnERC20Token() */\n      tag_108\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":3685:3712  NullAddrIsNotAnERC20Token() */\n      mload(0x40)\n      shl(0xe2, 0x346fafc3)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":3647:3712  if (assetId == NATIVE_ASSETID) revert NullAddrIsNotAnERC20Token() */\n    tag_108:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"bridges/libs/LibAsset.sol\":3726:3744  to == NULL_ADDRESS */\n      dup3\n      and\n        /* \"bridges/libs/LibAsset.sol\":3722:3778  if (to == NULL_ADDRESS) revert NoTransferToNullAddress() */\n      tag_109\n      jumpi\n        /* \"bridges/libs/LibAsset.sol\":3753:3778  NoTransferToNullAddress() */\n      mload(0x40)\n      shl(0xe0, 0x21f74345)\n      dup2\n      mstore\n      0x04\n      add\n      mload(0x40)\n      dup1\n      swap2\n      sub\n      swap1\n      revert\n        /* \"bridges/libs/LibAsset.sol\":3722:3778  if (to == NULL_ADDRESS) revert NoTransferToNullAddress() */\n    tag_109:\n        /* \"bridges/libs/LibAsset.sol\":3788:3849  SafeERC20.safeTransferFrom(IERC20(assetId), from, to, amount) */\n      tag_85\n        /* \"bridges/libs/LibAsset.sol\":3822:3829  assetId */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":3832:3836  from */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":3838:3840  to */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":3842:3848  amount */\n      dup5\n        /* \"bridges/libs/LibAsset.sol\":3788:3814  SafeERC20.safeTransferFrom */\n      tag_111\n        /* \"bridges/libs/LibAsset.sol\":3788:3849  SafeERC20.safeTransferFrom(IERC20(assetId), from, to, amount) */\n      jump\t// in\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1475:2078  function safeApprove(... */\n    tag_98:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1830:1840  value == 0 */\n      dup1\n      iszero\n      dup1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1829:1891  (value == 0) || (token.allowance(address(this), spender) == 0) */\n      tag_113\n      jumpi\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1846:1885  token.allowance(address(this), spender) */\n      mload(0x40)\n      shl(0xe1, 0x6eb1769f)\n      dup2\n      mstore\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1870:1874  this */\n      address\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1846:1885  token.allowance(address(this), spender) */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":3274:3308   */\n      mstore\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":3344:3359   */\n      dup4\n      dup2\n      and\n        /* \"#utility.yul\":3324:3342   */\n      0x24\n      dup4\n      add\n        /* \"#utility.yul\":3317:3360   */\n      mstore\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1846:1861  token.allowance */\n      dup5\n      and\n      swap1\n      0xdd62ed3e\n      swap1\n        /* \"#utility.yul\":3209:3227   */\n      0x44\n      add\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1846:1885  token.allowance(address(this), spender) */\n      0x20\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup7\n      dup1\n      extcodesize\n      iszero\n      dup1\n      iszero\n      tag_115\n      jumpi\n      0x00\n      dup1\n      revert\n    tag_115:\n      pop\n      gas\n      staticcall\n      iszero\n      dup1\n      iszero\n      tag_117\n      jumpi\n      returndatasize\n      0x00\n      dup1\n      returndatacopy\n      revert(0x00, returndatasize)\n    tag_117:\n      pop\n      pop\n      pop\n      pop\n      mload(0x40)\n      returndatasize\n      not(0x1f)\n      0x1f\n      dup3\n      add\n      and\n      dup3\n      add\n      dup1\n      0x40\n      mstore\n      pop\n      dup2\n      add\n      swap1\n      tag_118\n      swap2\n      swap1\n      tag_95\n      jump\t// in\n    tag_118:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1846:1890  token.allowance(address(this), spender) == 0 */\n      iszero\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1829:1891  (value == 0) || (token.allowance(address(this), spender) == 0) */\n    tag_113:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1808:1971  require(... */\n      tag_119\n      jumpi\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n        /* \"#utility.yul\":7648:7650   */\n      0x20\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1808:1971  require(... */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":7630:7651   */\n      mstore\n        /* \"#utility.yul\":7687:7689   */\n      0x36\n        /* \"#utility.yul\":7667:7685   */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":7660:7690   */\n      mstore\n        /* \"#utility.yul\":7726:7760   */\n      0x5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f\n        /* \"#utility.yul\":7706:7724   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":7699:7761   */\n      mstore\n      shl(0x50, 0x20746f206e6f6e2d7a65726f20616c6c6f77616e6365)\n        /* \"#utility.yul\":7777:7795   */\n      0x64\n      dup3\n      add\n        /* \"#utility.yul\":7770:7822   */\n      mstore\n        /* \"#utility.yul\":7839:7858   */\n      0x84\n      add\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1808:1971  require(... */\n      tag_54\n        /* \"#utility.yul\":7620:7864   */\n      jump\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1808:1971  require(... */\n    tag_119:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":2008:2070  abi.encodeWithSelector(token.approve.selector, spender, value) */\n      mload(0x40)\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":4605:4637   */\n      dup4\n      and\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":2008:2070  abi.encodeWithSelector(token.approve.selector, spender, value) */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":4587:4638   */\n      mstore\n        /* \"#utility.yul\":4654:4672   */\n      0x44\n      dup2\n      add\n        /* \"#utility.yul\":4647:4681   */\n      dup3\n      swap1\n      mstore\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1981:2071  _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)) */\n      tag_75\n      swap1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":2001:2006  token */\n      dup5\n      swap1\n      shl(0xe0, 0x095ea7b3)\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":2031:2053  token.approve.selector */\n      swap1\n        /* \"#utility.yul\":4560:4578   */\n      0x64\n      add\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":2008:2070  abi.encodeWithSelector(token.approve.selector, spender, value) */\n    tag_123:\n      0x40\n      dup1\n      mload\n      not(0x1f)\n      dup2\n      dup5\n      sub\n      add\n      dup2\n      mstore\n      swap2\n      swap1\n      mstore\n      0x20\n      dup2\n      add\n      dup1\n      mload\n      sub(shl(0xe0, 0x01), 0x01)\n      and\n      not(sub(shl(0xe0, 0x01), 0x01))\n      swap1\n      swap4\n      and\n      swap3\n      swap1\n      swap3\n      or\n      swap1\n      swap2\n      mstore\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1981:2000  _callOptionalReturn */\n      tag_124\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1981:2071  _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)) */\n      jump\t// in\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":974:1215  function safeTransferFrom(... */\n    tag_111:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1139:1207  abi.encodeWithSelector(token.transferFrom.selector, from, to, value) */\n      mload(0x40)\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":3629:3644   */\n      dup1\n      dup6\n      and\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1139:1207  abi.encodeWithSelector(token.transferFrom.selector, from, to, value) */\n      0x24\n      dup4\n      add\n        /* \"#utility.yul\":3611:3645   */\n      mstore\n        /* \"#utility.yul\":3681:3696   */\n      dup4\n      and\n        /* \"#utility.yul\":3661:3679   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":3654:3697   */\n      mstore\n        /* \"#utility.yul\":3713:3731   */\n      0x64\n      dup2\n      add\n        /* \"#utility.yul\":3706:3740   */\n      dup3\n      swap1\n      mstore\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1112:1208  _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)) */\n      tag_85\n      swap1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1132:1137  token */\n      dup6\n      swap1\n      shl(0xe0, 0x23b872dd)\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1162:1189  token.transferFrom.selector */\n      swap1\n        /* \"#utility.yul\":3546:3564   */\n      0x84\n      add\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":1139:1207  abi.encodeWithSelector(token.transferFrom.selector, from, to, value) */\n      tag_123\n        /* \"#utility.yul\":3528:3746   */\n      jump\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":3747:4453  function _callOptionalReturn(IERC20 token, bytes memory data) private {... */\n    tag_124:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4189  bytes memory returndata */\n      0x00\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      tag_130\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4220:4224  data */\n      dup3\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      mload(0x40)\n      dup1\n      0x40\n      add\n      0x40\n      mstore\n      dup1\n      0x20\n      dup2\n      mstore\n      0x20\n      add\n      0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564\n      dup2\n      mstore\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4200:4205  token */\n      dup6\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4219  address(token).functionCall */\n      and\n      tag_131\n      swap1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4192:4261  address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      swap3\n      swap2\n      swap1\n      0xffffffff\n      and\n      jump\t// in\n    tag_130:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4292  returndata.length */\n      dup1\n      mload\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4166:4261  bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\") */\n      swap1\n      swap2\n      pop\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4275:4296  returndata.length > 0 */\n      iszero\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4271:4447  if (returndata.length > 0) {... */\n      tag_75\n      jumpi\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4370:4380  returndata */\n      dup1\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4359:4389  abi.decode(returndata, (bool)) */\n      dup1\n      0x20\n      add\n      swap1\n      mload\n      dup2\n      add\n      swap1\n      tag_133\n      swap2\n      swap1\n      tag_134\n      jump\t// in\n    tag_133:\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436  require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\") */\n      tag_75\n      jumpi\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n        /* \"#utility.yul\":7237:7239   */\n      0x20\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436  require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\") */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":7219:7240   */\n      mstore\n        /* \"#utility.yul\":7276:7278   */\n      0x2a\n        /* \"#utility.yul\":7256:7274   */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":7249:7279   */\n      mstore\n        /* \"#utility.yul\":7315:7349   */\n      0x5361666545524332303a204552433230206f7065726174696f6e20646964206e\n        /* \"#utility.yul\":7295:7313   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":7288:7350   */\n      mstore\n      shl(0xb2, 0x1bdd081cdd58d8d95959)\n        /* \"#utility.yul\":7366:7384   */\n      0x64\n      dup3\n      add\n        /* \"#utility.yul\":7359:7399   */\n      mstore\n        /* \"#utility.yul\":7416:7435   */\n      0x84\n      add\n        /* \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":4351:4436  require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\") */\n      tag_54\n        /* \"#utility.yul\":7209:7441   */\n      jump\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084  function functionCall(... */\n    tag_131:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3994:4006  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077  functionCallWithValue(target, data, 0, errorMessage) */\n      tag_139\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4047:4053  target */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4055:4059  data */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4061:4062  0 */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4064:4076  errorMessage */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4046  functionCallWithValue */\n      tag_140\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4025:4077  functionCallWithValue(target, data, 0, errorMessage) */\n      jump\t// in\n    tag_139:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4018:4077  return functionCallWithValue(target, data, 0, errorMessage) */\n      swap1\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":3861:4084  function functionCall(... */\n    tag_138:\n      swap4\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447  function functionCallWithValue(... */\n    tag_140:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5113:5125  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5170:5175  value */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5166  address(this).balance */\n      selfbalance\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5145:5175  address(this).balance >= value */\n      lt\n      iszero\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218  require(address(this).balance >= value, \"Address: insufficient balance for call\") */\n      tag_142\n      jumpi\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n        /* \"#utility.yul\":5685:5687   */\n      0x20\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218  require(address(this).balance >= value, \"Address: insufficient balance for call\") */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":5667:5688   */\n      mstore\n        /* \"#utility.yul\":5724:5726   */\n      0x26\n        /* \"#utility.yul\":5704:5722   */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":5697:5727   */\n      mstore\n        /* \"#utility.yul\":5763:5797   */\n      0x416464726573733a20696e73756666696369656e742062616c616e636520666f\n        /* \"#utility.yul\":5743:5761   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":5736:5798   */\n      mstore\n      shl(0xd2, 0x1c8818d85b1b)\n        /* \"#utility.yul\":5814:5832   */\n      0x64\n      dup3\n      add\n        /* \"#utility.yul\":5807:5843   */\n      mstore\n        /* \"#utility.yul\":5860:5879   */\n      0x84\n      add\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218  require(address(this).balance >= value, \"Address: insufficient balance for call\") */\n      tag_54\n        /* \"#utility.yul\":5657:5885   */\n      jump\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5137:5218  require(address(this).balance >= value, \"Address: insufficient balance for call\") */\n    tag_142:\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"@openzeppelin/contracts/utils/Address.sol\":1465:1484  account.code.length */\n      dup6\n      and\n      extcodesize\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288  require(isContract(target), \"Address: call to non-contract\") */\n      tag_147\n      jumpi\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n        /* \"#utility.yul\":6879:6881   */\n      0x20\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288  require(isContract(target), \"Address: call to non-contract\") */\n      0x04\n      dup3\n      add\n        /* \"#utility.yul\":6861:6882   */\n      mstore\n        /* \"#utility.yul\":6918:6920   */\n      0x1d\n        /* \"#utility.yul\":6898:6916   */\n      0x24\n      dup3\n      add\n        /* \"#utility.yul\":6891:6921   */\n      mstore\n        /* \"#utility.yul\":6957:6988   */\n      0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000\n        /* \"#utility.yul\":6937:6955   */\n      0x44\n      dup3\n      add\n        /* \"#utility.yul\":6930:6989   */\n      mstore\n        /* \"#utility.yul\":7006:7024   */\n      0x64\n      add\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288  require(isContract(target), \"Address: call to non-contract\") */\n      tag_54\n        /* \"#utility.yul\":6851:7030   */\n      jump\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5228:5288  require(isContract(target), \"Address: call to non-contract\") */\n    tag_147:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5300:5312  bool success */\n      0x00\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5314:5337  bytes memory returndata */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5347  target */\n      dup7\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5352  target.call */\n      and\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5360:5365  value */\n      dup6\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5367:5371  data */\n      dup8\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5341:5372  target.call{value: value}(data) */\n      mload(0x40)\n      tag_150\n      swap2\n      swap1\n      tag_151\n      jump\t// in\n    tag_150:\n      0x00\n      mload(0x40)\n      dup1\n      dup4\n      sub\n      dup2\n      dup6\n      dup8\n      gas\n      call\n      swap3\n      pop\n      pop\n      pop\n      returndatasize\n      dup1\n      0x00\n      dup2\n      eq\n      tag_154\n      jumpi\n      mload(0x40)\n      swap2\n      pop\n      and(add(returndatasize, 0x3f), not(0x1f))\n      dup3\n      add\n      0x40\n      mstore\n      returndatasize\n      dup3\n      mstore\n      returndatasize\n      0x00\n      0x20\n      dup5\n      add\n      returndatacopy\n      jump(tag_153)\n    tag_154:\n      0x60\n      swap2\n      pop\n    tag_153:\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5299:5372  (bool success, bytes memory returndata) = target.call{value: value}(data) */\n      swap2\n      pop\n      swap2\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440  verifyCallResult(success, returndata, errorMessage) */\n      tag_155\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5406:5413  success */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5415:5425  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5427:5439  errorMessage */\n      dup7\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5405  verifyCallResult */\n      tag_156\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5389:5440  verifyCallResult(success, returndata, errorMessage) */\n      jump\t// in\n    tag_155:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":5382:5440  return verifyCallResult(success, returndata, errorMessage) */\n      swap8\n        /* \"@openzeppelin/contracts/utils/Address.sol\":4948:5447  function functionCallWithValue(... */\n      swap7\n      pop\n      pop\n      pop\n      pop\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7561:8303  function verifyCallResult(... */\n    tag_156:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7707:7719  bytes memory */\n      0x60\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7735:7742  success */\n      dup4\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297  if (success) {... */\n      iszero\n      tag_159\n      jumpi\n      pop\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7765:7775  returndata */\n      dup2\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7758:7775  return returndata */\n      jump(tag_138)\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7731:8297  if (success) {... */\n    tag_159:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7893  returndata.length */\n      dup3\n      mload\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7876:7897  returndata.length > 0 */\n      iszero\n        /* \"@openzeppelin/contracts/utils/Address.sol\":7872:8287  if (returndata.length > 0) {... */\n      tag_161\n      jumpi\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8120:8130  returndata */\n      dup3\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8114:8131  mload(returndata) */\n      mload\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8180:8195  returndata_size */\n      dup1\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8167:8177  returndata */\n      dup5\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8163:8165  32 */\n      0x20\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8159:8178  add(32, returndata) */\n      add\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8152:8196  revert(add(32, returndata), returndata_size) */\n      revert\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8069:8214  {... */\n    tag_161:\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8259:8271  errorMessage */\n      dup2\n        /* \"@openzeppelin/contracts/utils/Address.sol\":8252:8272  revert(errorMessage) */\n      mload(0x40)\n      shl(0xe5, 0x461bcd)\n      dup2\n      mstore\n      0x04\n      add\n      tag_54\n      swap2\n      swap1\n      tag_164\n      jump\t// in\n        /* \"#utility.yul\":14:187   */\n    tag_166:\n        /* \"#utility.yul\":82:102   */\n      dup1\n      calldataload\n      sub(shl(0xa0, 0x01), 0x01)\n        /* \"#utility.yul\":131:162   */\n      dup2\n      and\n        /* \"#utility.yul\":121:163   */\n      dup2\n      eq\n        /* \"#utility.yul\":111:113   */\n      tag_168\n      jumpi\n        /* \"#utility.yul\":177:178   */\n      0x00\n        /* \"#utility.yul\":174:175   */\n      dup1\n        /* \"#utility.yul\":167:179   */\n      revert\n        /* \"#utility.yul\":111:113   */\n    tag_168:\n        /* \"#utility.yul\":63:187   */\n      swap2\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":192:355   */\n    tag_169:\n        /* \"#utility.yul\":259:279   */\n      dup1\n      calldataload\n        /* \"#utility.yul\":319:329   */\n      0xffffffff\n        /* \"#utility.yul\":308:330   */\n      dup2\n      and\n        /* \"#utility.yul\":298:331   */\n      dup2\n      eq\n        /* \"#utility.yul\":288:290   */\n      tag_168\n      jumpi\n        /* \"#utility.yul\":345:346   */\n      0x00\n        /* \"#utility.yul\":342:343   */\n      dup1\n        /* \"#utility.yul\":335:347   */\n      revert\n        /* \"#utility.yul\":360:531   */\n    tag_172:\n        /* \"#utility.yul\":427:447   */\n      dup1\n      calldataload\n        /* \"#utility.yul\":487:505   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":476:506   */\n      dup2\n      and\n        /* \"#utility.yul\":466:507   */\n      dup2\n      eq\n        /* \"#utility.yul\":456:458   */\n      tag_168\n      jumpi\n        /* \"#utility.yul\":521:522   */\n      0x00\n        /* \"#utility.yul\":518:519   */\n      dup1\n        /* \"#utility.yul\":511:523   */\n      revert\n        /* \"#utility.yul\":536:732   */\n    tag_8:\n        /* \"#utility.yul\":595:601   */\n      0x00\n        /* \"#utility.yul\":648:650   */\n      0x20\n        /* \"#utility.yul\":636:645   */\n      dup3\n        /* \"#utility.yul\":627:634   */\n      dup5\n        /* \"#utility.yul\":623:646   */\n      sub\n        /* \"#utility.yul\":619:651   */\n      slt\n        /* \"#utility.yul\":616:618   */\n      iszero\n      tag_176\n      jumpi\n        /* \"#utility.yul\":669:675   */\n      dup1\n        /* \"#utility.yul\":661:667   */\n      dup2\n        /* \"#utility.yul\":654:676   */\n      revert\n        /* \"#utility.yul\":616:618   */\n    tag_176:\n        /* \"#utility.yul\":697:726   */\n      tag_138\n        /* \"#utility.yul\":716:725   */\n      dup3\n        /* \"#utility.yul\":697:726   */\n      tag_166\n      jump\t// in\n        /* \"#utility.yul\":737:1034   */\n    tag_134:\n        /* \"#utility.yul\":804:810   */\n      0x00\n        /* \"#utility.yul\":857:859   */\n      0x20\n        /* \"#utility.yul\":845:854   */\n      dup3\n        /* \"#utility.yul\":836:843   */\n      dup5\n        /* \"#utility.yul\":832:855   */\n      sub\n        /* \"#utility.yul\":828:860   */\n      slt\n        /* \"#utility.yul\":825:827   */\n      iszero\n      tag_179\n      jumpi\n        /* \"#utility.yul\":878:884   */\n      dup1\n        /* \"#utility.yul\":870:876   */\n      dup2\n        /* \"#utility.yul\":863:885   */\n      revert\n        /* \"#utility.yul\":825:827   */\n    tag_179:\n        /* \"#utility.yul\":915:924   */\n      dup2\n        /* \"#utility.yul\":909:925   */\n      mload\n        /* \"#utility.yul\":968:973   */\n      dup1\n        /* \"#utility.yul\":961:974   */\n      iszero\n        /* \"#utility.yul\":954:975   */\n      iszero\n        /* \"#utility.yul\":947:952   */\n      dup2\n        /* \"#utility.yul\":944:976   */\n      eq\n        /* \"#utility.yul\":934:936   */\n      tag_138\n      jumpi\n        /* \"#utility.yul\":995:1001   */\n      dup2\n        /* \"#utility.yul\":987:993   */\n      dup3\n        /* \"#utility.yul\":980:1002   */\n      revert\n        /* \"#utility.yul\":1039:1246   */\n    tag_12:\n        /* \"#utility.yul\":1128:1134   */\n      0x00\n        /* \"#utility.yul\":1181:1184   */\n      0xc0\n        /* \"#utility.yul\":1169:1178   */\n      dup3\n        /* \"#utility.yul\":1160:1167   */\n      dup5\n        /* \"#utility.yul\":1156:1179   */\n      sub\n        /* \"#utility.yul\":1152:1185   */\n      slt\n        /* \"#utility.yul\":1149:1151   */\n      iszero\n      tag_182\n      jumpi\n        /* \"#utility.yul\":1203:1209   */\n      dup1\n        /* \"#utility.yul\":1195:1201   */\n      dup2\n        /* \"#utility.yul\":1188:1210   */\n      revert\n        /* \"#utility.yul\":1149:1151   */\n    tag_182:\n      pop\n        /* \"#utility.yul\":1231:1240   */\n      swap2\n        /* \"#utility.yul\":1139:1246   */\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":1251:2172   */\n    tag_36:\n        /* \"#utility.yul\":1338:1344   */\n      0x00\n        /* \"#utility.yul\":1391:1394   */\n      0xc0\n        /* \"#utility.yul\":1379:1388   */\n      dup3\n        /* \"#utility.yul\":1370:1377   */\n      dup5\n        /* \"#utility.yul\":1366:1389   */\n      sub\n        /* \"#utility.yul\":1362:1395   */\n      slt\n        /* \"#utility.yul\":1359:1361   */\n      iszero\n      tag_184\n      jumpi\n        /* \"#utility.yul\":1413:1419   */\n      dup1\n        /* \"#utility.yul\":1405:1411   */\n      dup2\n        /* \"#utility.yul\":1398:1420   */\n      revert\n        /* \"#utility.yul\":1359:1361   */\n    tag_184:\n        /* \"#utility.yul\":1451:1453   */\n      0x40\n        /* \"#utility.yul\":1445:1454   */\n      mload\n        /* \"#utility.yul\":1493:1496   */\n      0xc0\n        /* \"#utility.yul\":1485:1491   */\n      dup2\n        /* \"#utility.yul\":1481:1497   */\n      add\n        /* \"#utility.yul\":1563:1569   */\n      dup2\n        /* \"#utility.yul\":1551:1561   */\n      dup2\n        /* \"#utility.yul\":1548:1570   */\n      lt\n        /* \"#utility.yul\":1527:1545   */\n      0xffffffffffffffff\n        /* \"#utility.yul\":1515:1525   */\n      dup3\n        /* \"#utility.yul\":1512:1546   */\n      gt\n        /* \"#utility.yul\":1509:1571   */\n      or\n        /* \"#utility.yul\":1506:1508   */\n      iszero\n      tag_185\n      jumpi\n      shl(0xe0, 0x4e487b71)\n        /* \"#utility.yul\":1594:1630   */\n      dup4\n      mstore\n        /* \"#utility.yul\":1653:1657   */\n      0x41\n        /* \"#utility.yul\":1650:1651   */\n      0x04\n        /* \"#utility.yul\":1643:1658   */\n      mstore\n        /* \"#utility.yul\":1686:1690   */\n      0x24\n        /* \"#utility.yul\":1601:1607   */\n      dup4\n        /* \"#utility.yul\":1671:1691   */\n      revert\n        /* \"#utility.yul\":1506:1508   */\n    tag_185:\n        /* \"#utility.yul\":1717:1719   */\n      0x40\n        /* \"#utility.yul\":1710:1732   */\n      mstore\n        /* \"#utility.yul\":1756:1784   */\n      tag_186\n        /* \"#utility.yul\":1774:1783   */\n      dup4\n        /* \"#utility.yul\":1756:1784   */\n      tag_169\n      jump\t// in\n    tag_186:\n        /* \"#utility.yul\":1748:1754   */\n      dup2\n        /* \"#utility.yul\":1741:1785   */\n      mstore\n        /* \"#utility.yul\":1818:1855   */\n      tag_187\n        /* \"#utility.yul\":1851:1853   */\n      0x20\n        /* \"#utility.yul\":1840:1849   */\n      dup5\n        /* \"#utility.yul\":1836:1854   */\n      add\n        /* \"#utility.yul\":1818:1855   */\n      tag_172\n      jump\t// in\n    tag_187:\n        /* \"#utility.yul\":1813:1815   */\n      0x20\n        /* \"#utility.yul\":1805:1811   */\n      dup3\n        /* \"#utility.yul\":1801:1816   */\n      add\n        /* \"#utility.yul\":1794:1856   */\n      mstore\n        /* \"#utility.yul\":1889:1926   */\n      tag_188\n        /* \"#utility.yul\":1922:1924   */\n      0x40\n        /* \"#utility.yul\":1911:1920   */\n      dup5\n        /* \"#utility.yul\":1907:1925   */\n      add\n        /* \"#utility.yul\":1889:1926   */\n      tag_172\n      jump\t// in\n    tag_188:\n        /* \"#utility.yul\":1884:1886   */\n      0x40\n        /* \"#utility.yul\":1876:1882   */\n      dup3\n        /* \"#utility.yul\":1872:1887   */\n      add\n        /* \"#utility.yul\":1865:1927   */\n      mstore\n        /* \"#utility.yul\":1988:1990   */\n      0x60\n        /* \"#utility.yul\":1977:1986   */\n      dup4\n        /* \"#utility.yul\":1973:1991   */\n      add\n        /* \"#utility.yul\":1960:1992   */\n      calldataload\n        /* \"#utility.yul\":1955:1957   */\n      0x60\n        /* \"#utility.yul\":1947:1953   */\n      dup3\n        /* \"#utility.yul\":1943:1958   */\n      add\n        /* \"#utility.yul\":1936:1993   */\n      mstore\n        /* \"#utility.yul\":2027:2066   */\n      tag_189\n        /* \"#utility.yul\":2061:2064   */\n      0x80\n        /* \"#utility.yul\":2050:2059   */\n      dup5\n        /* \"#utility.yul\":2046:2065   */\n      add\n        /* \"#utility.yul\":2027:2066   */\n      tag_166\n      jump\t// in\n    tag_189:\n        /* \"#utility.yul\":2021:2024   */\n      0x80\n        /* \"#utility.yul\":2013:2019   */\n      dup3\n        /* \"#utility.yul\":2009:2025   */\n      add\n        /* \"#utility.yul\":2002:2067   */\n      mstore\n        /* \"#utility.yul\":2101:2140   */\n      tag_190\n        /* \"#utility.yul\":2135:2138   */\n      0xa0\n        /* \"#utility.yul\":2124:2133   */\n      dup5\n        /* \"#utility.yul\":2120:2139   */\n      add\n        /* \"#utility.yul\":2101:2140   */\n      tag_166\n      jump\t// in\n    tag_190:\n        /* \"#utility.yul\":2095:2098   */\n      0xa0\n        /* \"#utility.yul\":2083:2099   */\n      dup3\n      add\n        /* \"#utility.yul\":2076:2141   */\n      mstore\n        /* \"#utility.yul\":2087:2093   */\n      swap4\n        /* \"#utility.yul\":1349:2172   */\n      swap3\n      pop\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2177:2371   */\n    tag_95:\n        /* \"#utility.yul\":2247:2253   */\n      0x00\n        /* \"#utility.yul\":2300:2302   */\n      0x20\n        /* \"#utility.yul\":2288:2297   */\n      dup3\n        /* \"#utility.yul\":2279:2286   */\n      dup5\n        /* \"#utility.yul\":2275:2298   */\n      sub\n        /* \"#utility.yul\":2271:2303   */\n      slt\n        /* \"#utility.yul\":2268:2270   */\n      iszero\n      tag_192\n      jumpi\n        /* \"#utility.yul\":2321:2327   */\n      dup1\n        /* \"#utility.yul\":2313:2319   */\n      dup2\n        /* \"#utility.yul\":2306:2328   */\n      revert\n        /* \"#utility.yul\":2268:2270   */\n    tag_192:\n      pop\n        /* \"#utility.yul\":2349:2365   */\n      mload\n      swap2\n        /* \"#utility.yul\":2258:2371   */\n      swap1\n      pop\n      jump\t// out\n        /* \"#utility.yul\":2376:2570   */\n    tag_41:\n        /* \"#utility.yul\":2434:2440   */\n      0x00\n        /* \"#utility.yul\":2487:2489   */\n      0x20\n        /* \"#utility.yul\":2475:2484   */\n      dup3\n        /* \"#utility.yul\":2466:2473   */\n      dup5\n        /* \"#utility.yul\":2462:2485   */\n      sub\n        /* \"#utility.yul\":2458:2490   */\n      slt\n        /* \"#utility.yul\":2455:2457   */\n      iszero\n      tag_194\n      jumpi\n        /* \"#utility.yul\":2508:2514   */\n      dup1\n        /* \"#utility.yul\":2500:2506   */\n      dup2\n        /* \"#utility.yul\":2493:2515   */\n      revert\n        /* \"#utility.yul\":2455:2457   */\n    tag_194:\n        /* \"#utility.yul\":2536:2564   */\n      tag_138\n        /* \"#utility.yul\":2554:2563   */\n      dup3\n        /* \"#utility.yul\":2536:2564   */\n      tag_172\n      jump\t// in\n        /* \"#utility.yul\":2575:2849   */\n    tag_151:\n        /* \"#utility.yul\":2704:2707   */\n      0x00\n        /* \"#utility.yul\":2742:2748   */\n      dup3\n        /* \"#utility.yul\":2736:2749   */\n      mload\n        /* \"#utility.yul\":2758:2811   */\n      tag_197\n        /* \"#utility.yul\":2804:2810   */\n      dup2\n        /* \"#utility.yul\":2799:2802   */\n      dup5\n        /* \"#utility.yul\":2792:2796   */\n      0x20\n        /* \"#utility.yul\":2784:2790   */\n      dup8\n        /* \"#utility.yul\":2780:2797   */\n      add\n        /* \"#utility.yul\":2758:2811   */\n      tag_198\n      jump\t// in\n    tag_197:\n        /* \"#utility.yul\":2827:2843   */\n      swap2\n      swap1\n      swap2\n      add\n      swap3\n        /* \"#utility.yul\":2712:2849   */\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":4692:5075   */\n    tag_164:\n        /* \"#utility.yul\":4841:4843   */\n      0x20\n        /* \"#utility.yul\":4830:4839   */\n      dup2\n        /* \"#utility.yul\":4823:4844   */\n      mstore\n        /* \"#utility.yul\":4804:4808   */\n      0x00\n        /* \"#utility.yul\":4873:4879   */\n      dup3\n        /* \"#utility.yul\":4867:4880   */\n      mload\n        /* \"#utility.yul\":4916:4922   */\n      dup1\n        /* \"#utility.yul\":4911:4913   */\n      0x20\n        /* \"#utility.yul\":4900:4909   */\n      dup5\n        /* \"#utility.yul\":4896:4914   */\n      add\n        /* \"#utility.yul\":4889:4923   */\n      mstore\n        /* \"#utility.yul\":4932:4998   */\n      tag_205\n        /* \"#utility.yul\":4991:4997   */\n      dup2\n        /* \"#utility.yul\":4986:4988   */\n      0x40\n        /* \"#utility.yul\":4975:4984   */\n      dup6\n        /* \"#utility.yul\":4971:4989   */\n      add\n        /* \"#utility.yul\":4966:4968   */\n      0x20\n        /* \"#utility.yul\":4958:4964   */\n      dup8\n        /* \"#utility.yul\":4954:4969   */\n      add\n        /* \"#utility.yul\":4932:4998   */\n      tag_198\n      jump\t// in\n    tag_205:\n        /* \"#utility.yul\":5059:5061   */\n      0x1f\n        /* \"#utility.yul\":5038:5053   */\n      add\n      not(0x1f)\n        /* \"#utility.yul\":5034:5063   */\n      and\n        /* \"#utility.yul\":5019:5064   */\n      swap2\n      swap1\n      swap2\n      add\n        /* \"#utility.yul\":5066:5068   */\n      0x40\n        /* \"#utility.yul\":5015:5069   */\n      add\n      swap3\n        /* \"#utility.yul\":4813:5075   */\n      swap2\n      pop\n      pop\n      jump\t// out\n        /* \"#utility.yul\":7869:8097   */\n    tag_84:\n        /* \"#utility.yul\":7909:7913   */\n      0x00\n        /* \"#utility.yul\":7937:7938   */\n      dup3\n        /* \"#utility.yul\":7934:7935   */\n      dup3\n        /* \"#utility.yul\":7931:7939   */\n      lt\n        /* \"#utility.yul\":7928:7930   */\n      iszero\n      tag_213\n      jumpi\n      shl(0xe0, 0x4e487b71)\n        /* \"#utility.yul\":7962:7996   */\n      dup2\n      mstore\n        /* \"#utility.yul\":8019:8023   */\n      0x11\n        /* \"#utility.yul\":8016:8017   */\n      0x04\n        /* \"#utility.yul\":8009:8024   */\n      mstore\n        /* \"#utility.yul\":8050:8054   */\n      0x24\n        /* \"#utility.yul\":7969:7973   */\n      dup2\n        /* \"#utility.yul\":8037:8055   */\n      revert\n        /* \"#utility.yul\":7928:7930   */\n    tag_213:\n      pop\n        /* \"#utility.yul\":8082:8091   */\n      sub\n      swap1\n        /* \"#utility.yul\":7918:8097   */\n      jump\t// out\n        /* \"#utility.yul\":8102:8360   */\n    tag_198:\n        /* \"#utility.yul\":8174:8175   */\n      0x00\n        /* \"#utility.yul\":8184:8297   */\n    tag_215:\n        /* \"#utility.yul\":8198:8204   */\n      dup4\n        /* \"#utility.yul\":8195:8196   */\n      dup2\n        /* \"#utility.yul\":8192:8205   */\n      lt\n        /* \"#utility.yul\":8184:8297   */\n      iszero\n      tag_217\n      jumpi\n        /* \"#utility.yul\":8274:8285   */\n      dup2\n      dup2\n      add\n        /* \"#utility.yul\":8268:8286   */\n      mload\n        /* \"#utility.yul\":8255:8266   */\n      dup4\n      dup3\n      add\n        /* \"#utility.yul\":8248:8287   */\n      mstore\n        /* \"#utility.yul\":8220:8222   */\n      0x20\n        /* \"#utility.yul\":8213:8223   */\n      add\n        /* \"#utility.yul\":8184:8297   */\n      jump(tag_215)\n    tag_217:\n        /* \"#utility.yul\":8315:8321   */\n      dup4\n        /* \"#utility.yul\":8312:8313   */\n      dup2\n        /* \"#utility.yul\":8309:8322   */\n      gt\n        /* \"#utility.yul\":8306:8308   */\n      iszero\n      tag_85\n      jumpi\n      pop\n      pop\n        /* \"#utility.yul\":8350:8351   */\n      0x00\n        /* \"#utility.yul\":8332:8348   */\n      swap2\n      add\n        /* \"#utility.yul\":8325:8352   */\n      mstore\n        /* \"#utility.yul\":8155:8360   */\n      jump\t// out\n\n    auxdata: 0xa2646970667358221220cb15352d24fad792b1c98a11f70b5fb2508b53270c64b9580de43bf7f7060f5464736f6c63430008040033\n}\n",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "608060405234801561001057600080fd5b50610d9f806100206000396000f3fe6080604052600436106100345760003560e01c80631124bcf9146100395780635277cbc71461005b578063dae033891461006e575b600080fd5b34801561004557600080fd5b50610059610054366004610ba5565b61008e565b005b610059610069366004610bdf565b61015d565b34801561007a57600080fd5b50610059610089366004610ba5565b610298565b610096610333565b6001600160a01b0381166100bd576040516306b7c75960e31b815260040160405180910390fd5b7f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a80546001600160a01b0319166001600160a01b0383169081178255467f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4b8190556040805192835260208301919091527f5b114a545b5a08e3628017ac6e1af1f29e3f593dde50a4a93ab76f2a2220cd3891015b60405180910390a15050565b7fa65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b8054600114156101a1576040516329f745a760e01b815260040160405180910390fd5b600181556101c26101b860c0840160a08501610ba5565b83606001356103c1565b6101d96101d436849003840184610bf6565b6103da565b7f83bd4b75444b26482a091d91d32e43a65722f9fd8267a590beadccd9e61539e861020a60c0840160a08501610ba5565b3361021b60a0860160808701610ba5565b60608601356102306040880160208901610cb1565b6040805160c0808252600790820152666342726964676560c81b60e08201526001600160a01b03968716602082015294861690850152939091166060830152608082015267ffffffffffffffff90911660a08201526101000160405180910390a16000905550565b6102a0610333565b6001600160a01b0381166102c7576040516306b7c75960e31b815260040160405180910390fd5b7f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a80546001600160a01b0319166001600160a01b03831690811782556040519081527fef1a021f4afad10827a9f886313f92d00348a53d0b0df8d0aa270a0ac3379bc590602001610151565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146103bf5760405162461bcd60e51b815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201526132b960f11b60648201526084015b60405180910390fd5b565b6103d682826001600160a01b038216156104fd565b5050565b60007f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a805460208401519192506001600160a01b03169067ffffffffffffffff1646141561043b57604051634ac09ad360e01b815260040160405180910390fd5b61044e8360a001518285606001516105b6565b608083015160a0840151606085015160208601516040808801518851915163a5977fbb60e01b81526001600160a01b0396871660048201529486166024860152604485019390935267ffffffffffffffff91821660648501529116608483015263ffffffff1660a48201529082169063a5977fbb9060c401600060405180830381600087803b1580156104e057600080fd5b505af11580156104f4573d6000803e3d6000fd5b50505050505050565b8161051b5760405163162908e360e11b815260040160405180910390fd5b8015610546578134146105415760405163162908e360e11b815260040160405180910390fd5b505050565b341561056457604051623f45b560e01b815260040160405180910390fd5b600061056f8461068a565b905061057d8433308661071f565b82816105888661068a565b6105929190610d1a565b146105b05760405163162908e360e11b815260040160405180910390fd5b50505050565b6001600160a01b0383166105c957505050565b6001600160a01b0382166105f0576040516363ba9bff60e01b815260040160405180910390fd5b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e9060440160206040518083038186803b15801561063b57600080fd5b505afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190610c99565b9050818110156105b0576105b08484600019610779565b60006001600160a01b03821615610717576040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106da57600080fd5b505afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107129190610c99565b610719565b475b92915050565b6001600160a01b0384166107465760405163346fafc360e21b815260040160405180910390fd5b6001600160a01b03821661076d576040516321f7434560e01b815260040160405180910390fd5b6105b0848484846108d0565b8015806108025750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190610c99565b155b61086d5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016103b6565b6040516001600160a01b03831660248201526044810182905261054190849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610908565b6040516001600160a01b03808516602483015283166044820152606481018290526105b09085906323b872dd60e01b90608401610899565b600061095d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109da9092919063ffffffff16565b805190915015610541578080602001905181019061097b9190610bbf565b6105415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b6565b60606109e984846000856109f3565b90505b9392505050565b606082471015610a545760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b6565b6001600160a01b0385163b610aab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b6565b600080866001600160a01b03168587604051610ac79190610ccb565b60006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b5091509150610b19828286610b24565b979650505050505050565b60608315610b335750816109ec565b825115610b435782518084602001fd5b8160405162461bcd60e51b81526004016103b69190610ce7565b80356001600160a01b0381168114610b7457600080fd5b919050565b803563ffffffff81168114610b7457600080fd5b803567ffffffffffffffff81168114610b7457600080fd5b600060208284031215610bb6578081fd5b6109ec82610b5d565b600060208284031215610bd0578081fd5b815180151581146109ec578182fd5b600060c08284031215610bf0578081fd5b50919050565b600060c08284031215610c07578081fd5b60405160c0810181811067ffffffffffffffff82111715610c3657634e487b7160e01b83526041600452602483fd5b604052610c4283610b79565b8152610c5060208401610b8d565b6020820152610c6160408401610b8d565b604082015260608301356060820152610c7c60808401610b5d565b6080820152610c8d60a08401610b5d565b60a08201529392505050565b600060208284031215610caa578081fd5b5051919050565b600060208284031215610cc2578081fd5b6109ec82610b8d565b60008251610cdd818460208701610d3d565b9190910192915050565b6020815260008251806020840152610d06816040850160208701610d3d565b601f01601f19169190910160400192915050565b600082821015610d3857634e487b7160e01b81526011600452602481fd5b500390565b60005b83811015610d58578181015183820152602001610d40565b838111156105b0575050600091015256fea2646970667358221220cb15352d24fad792b1c98a11f70b5fb2508b53270c64b9580de43bf7f7060f5464736f6c63430008040033",
							"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD9F DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1124BCF9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x5277CBC7 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xDAE03389 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0xBA5 JUMP JUMPDEST PUSH2 0x8E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x69 CALLDATASIZE PUSH1 0x4 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0x15D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x89 CALLDATASIZE PUSH1 0x4 PUSH2 0xBA5 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH2 0x96 PUSH2 0x333 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6B7C759 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE CHAINID PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4B DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x5B114A545B5A08E3628017AC6E1AF1F29E3F593DDE50A4A93AB76F2A2220CD38 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH32 0xA65BB2F450488AB0858C00EDC14ABC5297769BF42ADB48CFB77752890E8B697B DUP1 SLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29F745A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SSTORE PUSH2 0x1C2 PUSH2 0x1B8 PUSH1 0xC0 DUP5 ADD PUSH1 0xA0 DUP6 ADD PUSH2 0xBA5 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x3C1 JUMP JUMPDEST PUSH2 0x1D9 PUSH2 0x1D4 CALLDATASIZE DUP5 SWAP1 SUB DUP5 ADD DUP5 PUSH2 0xBF6 JUMP JUMPDEST PUSH2 0x3DA JUMP JUMPDEST PUSH32 0x83BD4B75444B26482A091D91D32E43A65722F9FD8267A590BEADCCD9E61539E8 PUSH2 0x20A PUSH1 0xC0 DUP5 ADD PUSH1 0xA0 DUP6 ADD PUSH2 0xBA5 JUMP JUMPDEST CALLER PUSH2 0x21B PUSH1 0xA0 DUP7 ADD PUSH1 0x80 DUP8 ADD PUSH2 0xBA5 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x230 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0xCB1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP1 DUP3 MSTORE PUSH1 0x7 SWAP1 DUP3 ADD MSTORE PUSH7 0x63427269646765 PUSH1 0xC8 SHL PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP5 DUP7 AND SWAP1 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x333 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6B7C759 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xEF1A021F4AFAD10827A9F886313F92D00348A53D0B0DF8D0AA270A0AC3379BC5 SWAP1 PUSH1 0x20 ADD PUSH2 0x151 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B9 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x3D6 DUP3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4FD JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF AND CHAINID EQ ISZERO PUSH2 0x43B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4AC09AD3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44E DUP4 PUSH1 0xA0 ADD MLOAD DUP3 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x5B6 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD DUP9 MLOAD SWAP2 MLOAD PUSH4 0xA5977FBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 DUP7 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE SWAP2 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0xA4 DUP3 ADD MSTORE SWAP1 DUP3 AND SWAP1 PUSH4 0xA5977FBB SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x51B JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x546 JUMPI DUP2 CALLVALUE EQ PUSH2 0x541 JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x564 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3F45B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x56F DUP5 PUSH2 0x68A JUMP JUMPDEST SWAP1 POP PUSH2 0x57D DUP5 CALLER ADDRESS DUP7 PUSH2 0x71F JUMP JUMPDEST DUP3 DUP2 PUSH2 0x588 DUP7 PUSH2 0x68A JUMP JUMPDEST PUSH2 0x592 SWAP2 SWAP1 PUSH2 0xD1A JUMP JUMPDEST EQ PUSH2 0x5B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5C9 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x63BA9BFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP6 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x64F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x673 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 DUP5 DUP5 PUSH1 0x0 NOT PUSH2 0x779 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x717 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x712 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST PUSH2 0x719 JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x746 JUMPI PUSH1 0x40 MLOAD PUSH4 0x346FAFC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x76D JUMPI PUSH1 0x40 MLOAD PUSH4 0x21F74345 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5B0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x8D0 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x802 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x800 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x541 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x5B0 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x899 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x95D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9DA SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x541 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x97B SWAP2 SWAP1 PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x541 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9E9 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x9F3 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0xAC7 SWAP2 SWAP1 PUSH2 0xCCB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB09 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xB19 DUP3 DUP3 DUP7 PUSH2 0xB24 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0xB33 JUMPI POP DUP2 PUSH2 0x9EC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xB43 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0xCE7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB6 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x9EC DUP3 PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x9EC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBF0 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC07 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xC36 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0xC42 DUP4 PUSH2 0xB79 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xC50 PUSH1 0x20 DUP5 ADD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xC61 PUSH1 0x40 DUP5 ADD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0xC7C PUSH1 0x80 DUP5 ADD PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xC8D PUSH1 0xA0 DUP5 ADD PUSH2 0xB5D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCAA JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x9EC DUP3 PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xCDD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xD3D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xD06 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xD3D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xD38 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD58 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD40 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB ISZERO CALLDATALOAD 0x2D 0x24 STATICCALL 0xD7 SWAP3 0xB1 0xC9 DUP11 GT 0xF7 SIGNEXTEND 0x5F 0xB2 POP DUP12 MSTORE8 0x27 0xC PUSH5 0xB9580DE43B 0xF7 0xF7 MOD 0xF SLOAD PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "600:3897:5:-:0;;;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"generatedSources": [
								{
									"ast": {
										"nodeType": "YulBlock",
										"src": "0:8362:11",
										"statements": [
											{
												"nodeType": "YulBlock",
												"src": "6:3:11",
												"statements": []
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "63:124:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "73:29:11",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "95:6:11"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "82:12:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "82:20:11"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "73:5:11"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "165:16:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "174:1:11",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "177:1:11",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "167:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "167:12:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "167:12:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "124:5:11"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "135:5:11"
																					},
																					{
																						"arguments": [
																							{
																								"arguments": [
																									{
																										"kind": "number",
																										"nodeType": "YulLiteral",
																										"src": "150:3:11",
																										"type": "",
																										"value": "160"
																									},
																									{
																										"kind": "number",
																										"nodeType": "YulLiteral",
																										"src": "155:1:11",
																										"type": "",
																										"value": "1"
																									}
																								],
																								"functionName": {
																									"name": "shl",
																									"nodeType": "YulIdentifier",
																									"src": "146:3:11"
																								},
																								"nodeType": "YulFunctionCall",
																								"src": "146:11:11"
																							},
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "159:1:11",
																								"type": "",
																								"value": "1"
																							}
																						],
																						"functionName": {
																							"name": "sub",
																							"nodeType": "YulIdentifier",
																							"src": "142:3:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "142:19:11"
																					}
																				],
																				"functionName": {
																					"name": "and",
																					"nodeType": "YulIdentifier",
																					"src": "131:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "131:31:11"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "121:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "121:42:11"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "114:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "114:50:11"
															},
															"nodeType": "YulIf",
															"src": "111:2:11"
														}
													]
												},
												"name": "abi_decode_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "42:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "53:5:11",
														"type": ""
													}
												],
												"src": "14:173:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "240:115:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "250:29:11",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "272:6:11"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "259:12:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "259:20:11"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "250:5:11"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "333:16:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "342:1:11",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "345:1:11",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "335:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "335:12:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "335:12:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "301:5:11"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "312:5:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "319:10:11",
																						"type": "",
																						"value": "0xffffffff"
																					}
																				],
																				"functionName": {
																					"name": "and",
																					"nodeType": "YulIdentifier",
																					"src": "308:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "308:22:11"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "298:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "298:33:11"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "291:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "291:41:11"
															},
															"nodeType": "YulIf",
															"src": "288:2:11"
														}
													]
												},
												"name": "abi_decode_uint32",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "219:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "230:5:11",
														"type": ""
													}
												],
												"src": "192:163:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "408:123:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "418:29:11",
															"value": {
																"arguments": [
																	{
																		"name": "offset",
																		"nodeType": "YulIdentifier",
																		"src": "440:6:11"
																	}
																],
																"functionName": {
																	"name": "calldataload",
																	"nodeType": "YulIdentifier",
																	"src": "427:12:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "427:20:11"
															},
															"variableNames": [
																{
																	"name": "value",
																	"nodeType": "YulIdentifier",
																	"src": "418:5:11"
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "509:16:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "518:1:11",
																					"type": "",
																					"value": "0"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "521:1:11",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "511:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "511:12:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "511:12:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "469:5:11"
																			},
																			{
																				"arguments": [
																					{
																						"name": "value",
																						"nodeType": "YulIdentifier",
																						"src": "480:5:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "487:18:11",
																						"type": "",
																						"value": "0xffffffffffffffff"
																					}
																				],
																				"functionName": {
																					"name": "and",
																					"nodeType": "YulIdentifier",
																					"src": "476:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "476:30:11"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "466:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "466:41:11"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "459:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "459:49:11"
															},
															"nodeType": "YulIf",
															"src": "456:2:11"
														}
													]
												},
												"name": "abi_decode_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "offset",
														"nodeType": "YulTypedName",
														"src": "387:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value",
														"nodeType": "YulTypedName",
														"src": "398:5:11",
														"type": ""
													}
												],
												"src": "360:171:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "606:126:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "652:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "661:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "669:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "654:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "654:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "654:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "627:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "636:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "623:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "623:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "648:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "619:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "619:32:11"
															},
															"nodeType": "YulIf",
															"src": "616:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "687:39:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "716:9:11"
																	}
																],
																"functionName": {
																	"name": "abi_decode_address",
																	"nodeType": "YulIdentifier",
																	"src": "697:18:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "697:29:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "687:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_address",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "572:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "583:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "595:6:11",
														"type": ""
													}
												],
												"src": "536:196:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "815:219:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "861:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "870:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "878:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "863:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "863:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "863:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "836:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "845:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "832:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "832:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "857:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "828:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "828:32:11"
															},
															"nodeType": "YulIf",
															"src": "825:2:11"
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "896:29:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "915:9:11"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "909:5:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "909:16:11"
															},
															"variables": [
																{
																	"name": "value",
																	"nodeType": "YulTypedName",
																	"src": "900:5:11",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "978:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "987:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "995:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "980:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "980:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "980:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value",
																				"nodeType": "YulIdentifier",
																				"src": "947:5:11"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"name": "value",
																								"nodeType": "YulIdentifier",
																								"src": "968:5:11"
																							}
																						],
																						"functionName": {
																							"name": "iszero",
																							"nodeType": "YulIdentifier",
																							"src": "961:6:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "961:13:11"
																					}
																				],
																				"functionName": {
																					"name": "iszero",
																					"nodeType": "YulIdentifier",
																					"src": "954:6:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "954:21:11"
																			}
																		],
																		"functionName": {
																			"name": "eq",
																			"nodeType": "YulIdentifier",
																			"src": "944:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "944:32:11"
																	}
																],
																"functionName": {
																	"name": "iszero",
																	"nodeType": "YulIdentifier",
																	"src": "937:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "937:40:11"
															},
															"nodeType": "YulIf",
															"src": "934:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "1013:15:11",
															"value": {
																"name": "value",
																"nodeType": "YulIdentifier",
																"src": "1023:5:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "1013:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_bool_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "781:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "792:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "804:6:11",
														"type": ""
													}
												],
												"src": "737:297:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1139:107:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "1186:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1195:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1203:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "1188:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1188:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1188:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "1160:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "1169:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "1156:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1156:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1181:3:11",
																		"type": "",
																		"value": "192"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "1152:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1152:33:11"
															},
															"nodeType": "YulIf",
															"src": "1149:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "1221:19:11",
															"value": {
																"name": "headStart",
																"nodeType": "YulIdentifier",
																"src": "1231:9:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "1221:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_struct$_CBridgeData_$784_calldata_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "1105:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "1116:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "1128:6:11",
														"type": ""
													}
												],
												"src": "1039:207:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "1349:823:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "1396:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1405:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1413:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "1398:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1398:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1398:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "1370:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "1379:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "1366:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1366:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1391:3:11",
																		"type": "",
																		"value": "192"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "1362:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1362:33:11"
															},
															"nodeType": "YulIf",
															"src": "1359:2:11"
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "1431:23:11",
															"value": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1451:2:11",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "1445:5:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1445:9:11"
															},
															"variables": [
																{
																	"name": "memPtr",
																	"nodeType": "YulTypedName",
																	"src": "1435:6:11",
																	"type": ""
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "1463:34:11",
															"value": {
																"arguments": [
																	{
																		"name": "memPtr",
																		"nodeType": "YulIdentifier",
																		"src": "1485:6:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1493:3:11",
																		"type": "",
																		"value": "192"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "1481:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1481:16:11"
															},
															"variables": [
																{
																	"name": "newFreePtr",
																	"nodeType": "YulTypedName",
																	"src": "1467:10:11",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "1580:121:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1601:6:11"
																				},
																				{
																					"arguments": [
																						{
																							"kind": "number",
																							"nodeType": "YulLiteral",
																							"src": "1613:3:11",
																							"type": "",
																							"value": "224"
																						},
																						{
																							"kind": "number",
																							"nodeType": "YulLiteral",
																							"src": "1618:10:11",
																							"type": "",
																							"value": "0x4e487b71"
																						}
																					],
																					"functionName": {
																						"name": "shl",
																						"nodeType": "YulIdentifier",
																						"src": "1609:3:11"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "1609:20:11"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "1594:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1594:36:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1594:36:11"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "1650:1:11",
																					"type": "",
																					"value": "4"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "1653:4:11",
																					"type": "",
																					"value": "0x41"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "1643:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1643:15:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1643:15:11"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "1678:6:11"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "1686:4:11",
																					"type": "",
																					"value": "0x24"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "1671:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "1671:20:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "1671:20:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "newFreePtr",
																				"nodeType": "YulIdentifier",
																				"src": "1515:10:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "1527:18:11",
																				"type": "",
																				"value": "0xffffffffffffffff"
																			}
																		],
																		"functionName": {
																			"name": "gt",
																			"nodeType": "YulIdentifier",
																			"src": "1512:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1512:34:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "newFreePtr",
																				"nodeType": "YulIdentifier",
																				"src": "1551:10:11"
																			},
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "1563:6:11"
																			}
																		],
																		"functionName": {
																			"name": "lt",
																			"nodeType": "YulIdentifier",
																			"src": "1548:2:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1548:22:11"
																	}
																],
																"functionName": {
																	"name": "or",
																	"nodeType": "YulIdentifier",
																	"src": "1509:2:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1509:62:11"
															},
															"nodeType": "YulIf",
															"src": "1506:2:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "1717:2:11",
																		"type": "",
																		"value": "64"
																	},
																	{
																		"name": "newFreePtr",
																		"nodeType": "YulIdentifier",
																		"src": "1721:10:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "1710:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1710:22:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1710:22:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "memPtr",
																		"nodeType": "YulIdentifier",
																		"src": "1748:6:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "1774:9:11"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_uint32",
																			"nodeType": "YulIdentifier",
																			"src": "1756:17:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1756:28:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "1741:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1741:44:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1741:44:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "1805:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "1813:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "1801:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1801:15:11"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1840:9:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "1851:2:11",
																						"type": "",
																						"value": "32"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1836:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1836:18:11"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "1818:17:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1818:37:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "1794:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1794:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1794:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "1876:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "1884:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "1872:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1872:15:11"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1911:9:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "1922:2:11",
																						"type": "",
																						"value": "64"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1907:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1907:18:11"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_uint64",
																			"nodeType": "YulIdentifier",
																			"src": "1889:17:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1889:37:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "1865:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1865:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1865:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "1947:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "1955:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "1943:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1943:15:11"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "1977:9:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "1988:2:11",
																						"type": "",
																						"value": "96"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "1973:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "1973:18:11"
																			}
																		],
																		"functionName": {
																			"name": "calldataload",
																			"nodeType": "YulIdentifier",
																			"src": "1960:12:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "1960:32:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "1936:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "1936:57:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "1936:57:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "2013:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "2021:3:11",
																				"type": "",
																				"value": "128"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "2009:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2009:16:11"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "2050:9:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "2061:3:11",
																						"type": "",
																						"value": "128"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "2046:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "2046:19:11"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_address",
																			"nodeType": "YulIdentifier",
																			"src": "2027:18:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2027:39:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "2002:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2002:65:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2002:65:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "memPtr",
																				"nodeType": "YulIdentifier",
																				"src": "2087:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "2095:3:11",
																				"type": "",
																				"value": "160"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "2083:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2083:16:11"
																	},
																	{
																		"arguments": [
																			{
																				"arguments": [
																					{
																						"name": "headStart",
																						"nodeType": "YulIdentifier",
																						"src": "2124:9:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "2135:3:11",
																						"type": "",
																						"value": "160"
																					}
																				],
																				"functionName": {
																					"name": "add",
																					"nodeType": "YulIdentifier",
																					"src": "2120:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "2120:19:11"
																			}
																		],
																		"functionName": {
																			"name": "abi_decode_address",
																			"nodeType": "YulIdentifier",
																			"src": "2101:18:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2101:39:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "2076:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2076:65:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2076:65:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2150:16:11",
															"value": {
																"name": "memPtr",
																"nodeType": "YulIdentifier",
																"src": "2160:6:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "2150:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_struct$_CBridgeData_$784_memory_ptr",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "1315:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "1326:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "1338:6:11",
														"type": ""
													}
												],
												"src": "1251:921:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2258:113:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "2304:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "2313:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "2321:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "2306:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "2306:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "2306:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "2279:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "2288:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "2275:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2275:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2300:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "2271:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2271:32:11"
															},
															"nodeType": "YulIf",
															"src": "2268:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2339:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "2355:9:11"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "2349:5:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2349:16:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "2339:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_uint256_fromMemory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "2224:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "2235:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2247:6:11",
														"type": ""
													}
												],
												"src": "2177:194:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2445:125:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "2491:26:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "2500:6:11"
																				},
																				{
																					"name": "value0",
																					"nodeType": "YulIdentifier",
																					"src": "2508:6:11"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "2493:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "2493:22:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "2493:22:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "dataEnd",
																				"nodeType": "YulIdentifier",
																				"src": "2466:7:11"
																			},
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "2475:9:11"
																			}
																		],
																		"functionName": {
																			"name": "sub",
																			"nodeType": "YulIdentifier",
																			"src": "2462:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2462:23:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2487:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "slt",
																	"nodeType": "YulIdentifier",
																	"src": "2458:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2458:32:11"
															},
															"nodeType": "YulIf",
															"src": "2455:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2526:38:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "2554:9:11"
																	}
																],
																"functionName": {
																	"name": "abi_decode_uint64",
																	"nodeType": "YulIdentifier",
																	"src": "2536:17:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2536:28:11"
															},
															"variableNames": [
																{
																	"name": "value0",
																	"nodeType": "YulIdentifier",
																	"src": "2526:6:11"
																}
															]
														}
													]
												},
												"name": "abi_decode_tuple_t_uint64",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "2411:9:11",
														"type": ""
													},
													{
														"name": "dataEnd",
														"nodeType": "YulTypedName",
														"src": "2422:7:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2434:6:11",
														"type": ""
													}
												],
												"src": "2376:194:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2712:137:11",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "2722:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "2742:6:11"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "2736:5:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2736:13:11"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "2726:6:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "2784:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "2792:4:11",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "2780:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "2780:17:11"
																	},
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2799:3:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "2804:6:11"
																	}
																],
																"functionName": {
																	"name": "copy_memory_to_memory",
																	"nodeType": "YulIdentifier",
																	"src": "2758:21:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2758:53:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "2758:53:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "2820:23:11",
															"value": {
																"arguments": [
																	{
																		"name": "pos",
																		"nodeType": "YulIdentifier",
																		"src": "2831:3:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "2836:6:11"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "2827:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2827:16:11"
															},
															"variableNames": [
																{
																	"name": "end",
																	"nodeType": "YulIdentifier",
																	"src": "2820:3:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "pos",
														"nodeType": "YulTypedName",
														"src": "2688:3:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2693:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "end",
														"nodeType": "YulTypedName",
														"src": "2704:3:11",
														"type": ""
													}
												],
												"src": "2575:274:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "2955:102:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "2965:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "2977:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "2988:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "2973:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "2973:18:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "2965:4:11"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3007:9:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "3022:6:11"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "3038:3:11",
																								"type": "",
																								"value": "160"
																							},
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "3043:1:11",
																								"type": "",
																								"value": "1"
																							}
																						],
																						"functionName": {
																							"name": "shl",
																							"nodeType": "YulIdentifier",
																							"src": "3034:3:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "3034:11:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "3047:1:11",
																						"type": "",
																						"value": "1"
																					}
																				],
																				"functionName": {
																					"name": "sub",
																					"nodeType": "YulIdentifier",
																					"src": "3030:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "3030:19:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "3018:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3018:32:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3000:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3000:51:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3000:51:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "2924:9:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "2935:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "2946:4:11",
														"type": ""
													}
												],
												"src": "2854:203:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3191:175:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "3201:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3213:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3224:2:11",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "3209:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3209:18:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3201:4:11"
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "3236:29:11",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3254:3:11",
																				"type": "",
																				"value": "160"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3259:1:11",
																				"type": "",
																				"value": "1"
																			}
																		],
																		"functionName": {
																			"name": "shl",
																			"nodeType": "YulIdentifier",
																			"src": "3250:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3250:11:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3263:1:11",
																		"type": "",
																		"value": "1"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "3246:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3246:19:11"
															},
															"variables": [
																{
																	"name": "_1",
																	"nodeType": "YulTypedName",
																	"src": "3240:2:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3281:9:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "3296:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "3304:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "3292:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3292:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3274:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3274:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3274:34:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3328:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3339:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "3324:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3324:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value1",
																				"nodeType": "YulIdentifier",
																				"src": "3348:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "3356:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "3344:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3344:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3317:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3317:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3317:43:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3152:9:11",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "3163:6:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "3171:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "3182:4:11",
														"type": ""
													}
												],
												"src": "3062:304:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3528:218:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "3538:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3550:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3561:2:11",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "3546:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3546:18:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3538:4:11"
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "3573:29:11",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3591:3:11",
																				"type": "",
																				"value": "160"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3596:1:11",
																				"type": "",
																				"value": "1"
																			}
																		],
																		"functionName": {
																			"name": "shl",
																			"nodeType": "YulIdentifier",
																			"src": "3587:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3587:11:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "3600:1:11",
																		"type": "",
																		"value": "1"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "3583:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3583:19:11"
															},
															"variables": [
																{
																	"name": "_1",
																	"nodeType": "YulTypedName",
																	"src": "3577:2:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "3618:9:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "3633:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "3641:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "3629:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3629:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3611:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3611:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3611:34:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3665:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3676:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "3661:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3661:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value1",
																				"nodeType": "YulIdentifier",
																				"src": "3685:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "3693:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "3681:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3681:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3654:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3654:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3654:43:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "3717:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "3728:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "3713:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "3713:18:11"
																	},
																	{
																		"name": "value2",
																		"nodeType": "YulIdentifier",
																		"src": "3733:6:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "3706:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "3706:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "3706:34:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3481:9:11",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "3492:6:11",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "3500:6:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "3508:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "3519:4:11",
														"type": ""
													}
												],
												"src": "3371:375:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "3986:422:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "3996:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4008:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4019:3:11",
																		"type": "",
																		"value": "192"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "4004:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4004:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "3996:4:11"
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "4032:29:11",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4050:3:11",
																				"type": "",
																				"value": "160"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4055:1:11",
																				"type": "",
																				"value": "1"
																			}
																		],
																		"functionName": {
																			"name": "shl",
																			"nodeType": "YulIdentifier",
																			"src": "4046:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4046:11:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4059:1:11",
																		"type": "",
																		"value": "1"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "4042:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4042:19:11"
															},
															"variables": [
																{
																	"name": "_1",
																	"nodeType": "YulTypedName",
																	"src": "4036:2:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4077:9:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "4092:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "4100:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4088:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4088:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4070:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4070:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4070:34:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4124:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4135:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4120:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4120:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value1",
																				"nodeType": "YulIdentifier",
																				"src": "4144:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "4152:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4140:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4140:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4113:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4113:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4113:43:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4176:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4187:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4172:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4172:18:11"
																	},
																	{
																		"name": "value2",
																		"nodeType": "YulIdentifier",
																		"src": "4192:6:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4165:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4165:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4165:34:11"
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "4208:28:11",
															"value": {
																"kind": "number",
																"nodeType": "YulLiteral",
																"src": "4218:18:11",
																"type": "",
																"value": "0xffffffffffffffff"
															},
															"variables": [
																{
																	"name": "_2",
																	"nodeType": "YulTypedName",
																	"src": "4212:2:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4256:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4267:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4252:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4252:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value3",
																				"nodeType": "YulIdentifier",
																				"src": "4276:6:11"
																			},
																			{
																				"name": "_2",
																				"nodeType": "YulIdentifier",
																				"src": "4284:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4272:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4272:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4245:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4245:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4245:43:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4308:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4319:3:11",
																				"type": "",
																				"value": "128"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4304:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4304:19:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value4",
																				"nodeType": "YulIdentifier",
																				"src": "4329:6:11"
																			},
																			{
																				"name": "_2",
																				"nodeType": "YulIdentifier",
																				"src": "4337:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4325:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4325:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4297:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4297:44:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4297:44:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4361:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4372:3:11",
																				"type": "",
																				"value": "160"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4357:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4357:19:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value5",
																				"nodeType": "YulIdentifier",
																				"src": "4382:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4390:10:11",
																				"type": "",
																				"value": "0xffffffff"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4378:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4378:23:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4350:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4350:52:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4350:52:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_address_t_uint256_t_uint64_t_uint64_t_uint32__to_t_address_t_address_t_uint256_t_uint64_t_uint64_t_uint32__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "3915:9:11",
														"type": ""
													},
													{
														"name": "value5",
														"nodeType": "YulTypedName",
														"src": "3926:6:11",
														"type": ""
													},
													{
														"name": "value4",
														"nodeType": "YulTypedName",
														"src": "3934:6:11",
														"type": ""
													},
													{
														"name": "value3",
														"nodeType": "YulTypedName",
														"src": "3942:6:11",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "3950:6:11",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "3958:6:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "3966:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "3977:4:11",
														"type": ""
													}
												],
												"src": "3751:657:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4542:145:11",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4552:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4564:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4575:2:11",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "4560:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4560:18:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "4552:4:11"
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4594:9:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "4609:6:11"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "4625:3:11",
																								"type": "",
																								"value": "160"
																							},
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "4630:1:11",
																								"type": "",
																								"value": "1"
																							}
																						],
																						"functionName": {
																							"name": "shl",
																							"nodeType": "YulIdentifier",
																							"src": "4621:3:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "4621:11:11"
																					},
																					{
																						"kind": "number",
																						"nodeType": "YulLiteral",
																						"src": "4634:1:11",
																						"type": "",
																						"value": "1"
																					}
																				],
																				"functionName": {
																					"name": "sub",
																					"nodeType": "YulIdentifier",
																					"src": "4617:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "4617:19:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "4605:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4605:32:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4587:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4587:51:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4587:51:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4658:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4669:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4654:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4654:18:11"
																	},
																	{
																		"name": "value1",
																		"nodeType": "YulIdentifier",
																		"src": "4674:6:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4647:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4647:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4647:34:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4503:9:11",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "4514:6:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "4522:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "4533:4:11",
														"type": ""
													}
												],
												"src": "4413:274:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "4813:262:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "4830:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "4841:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4823:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4823:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4823:21:11"
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "4853:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "value0",
																		"nodeType": "YulIdentifier",
																		"src": "4873:6:11"
																	}
																],
																"functionName": {
																	"name": "mload",
																	"nodeType": "YulIdentifier",
																	"src": "4867:5:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4867:13:11"
															},
															"variables": [
																{
																	"name": "length",
																	"nodeType": "YulTypedName",
																	"src": "4857:6:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4900:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4911:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4896:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4896:18:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "4916:6:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "4889:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4889:34:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4889:34:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "4958:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4966:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4954:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4954:15:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "4975:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "4986:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "4971:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "4971:18:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "4991:6:11"
																	}
																],
																"functionName": {
																	"name": "copy_memory_to_memory",
																	"nodeType": "YulIdentifier",
																	"src": "4932:21:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "4932:66:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "4932:66:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "5007:62:11",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5023:9:11"
																			},
																			{
																				"arguments": [
																					{
																						"arguments": [
																							{
																								"name": "length",
																								"nodeType": "YulIdentifier",
																								"src": "5042:6:11"
																							},
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "5050:2:11",
																								"type": "",
																								"value": "31"
																							}
																						],
																						"functionName": {
																							"name": "add",
																							"nodeType": "YulIdentifier",
																							"src": "5038:3:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "5038:15:11"
																					},
																					{
																						"arguments": [
																							{
																								"kind": "number",
																								"nodeType": "YulLiteral",
																								"src": "5059:2:11",
																								"type": "",
																								"value": "31"
																							}
																						],
																						"functionName": {
																							"name": "not",
																							"nodeType": "YulIdentifier",
																							"src": "5055:3:11"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "5055:7:11"
																					}
																				],
																				"functionName": {
																					"name": "and",
																					"nodeType": "YulIdentifier",
																					"src": "5034:3:11"
																				},
																				"nodeType": "YulFunctionCall",
																				"src": "5034:29:11"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5019:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5019:45:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5066:2:11",
																		"type": "",
																		"value": "64"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "5015:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5015:54:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "5007:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "4782:9:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "4793:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "4804:4:11",
														"type": ""
													}
												],
												"src": "4692:383:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5254:224:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "5271:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5282:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5264:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5264:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5264:21:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5305:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5316:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5301:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5301:18:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5321:2:11",
																		"type": "",
																		"value": "34"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5294:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5294:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5294:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5344:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5355:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5340:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5340:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "5360:34:11",
																		"type": "",
																		"value": "LibDiamond: Must be contract own"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5333:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5333:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5333:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5415:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5426:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5411:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5411:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "5431:4:11",
																		"type": "",
																		"value": "er"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5404:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5404:32:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5404:32:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "5445:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "5457:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5468:3:11",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "5453:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5453:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "5445:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "5231:9:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "5245:4:11",
														"type": ""
													}
												],
												"src": "5080:398:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "5657:228:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "5674:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5685:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5667:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5667:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5667:21:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5708:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5719:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5704:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5704:18:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5724:2:11",
																		"type": "",
																		"value": "38"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5697:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5697:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5697:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5747:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5758:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5743:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5743:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "5763:34:11",
																		"type": "",
																		"value": "Address: insufficient balance fo"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5736:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5736:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5736:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "5818:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "5829:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "5814:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "5814:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "5834:8:11",
																		"type": "",
																		"value": "r call"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "5807:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5807:36:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "5807:36:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "5852:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "5864:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "5875:3:11",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "5860:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "5860:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "5852:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "5634:9:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "5648:4:11",
														"type": ""
													}
												],
												"src": "5483:402:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6203:469:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "6220:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6231:3:11",
																		"type": "",
																		"value": "192"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6213:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6213:22:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6213:22:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6255:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6266:3:11",
																				"type": "",
																				"value": "192"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6251:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6251:19:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6272:1:11",
																		"type": "",
																		"value": "7"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6244:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6244:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6244:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6294:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6305:3:11",
																				"type": "",
																				"value": "224"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6290:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6290:19:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6311:9:11",
																		"type": "",
																		"value": "cBridge"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6283:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6283:38:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6283:38:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "6330:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "6342:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6353:3:11",
																		"type": "",
																		"value": "256"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "6338:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6338:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "6330:4:11"
																}
															]
														},
														{
															"nodeType": "YulVariableDeclaration",
															"src": "6366:29:11",
															"value": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6384:3:11",
																				"type": "",
																				"value": "160"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6389:1:11",
																				"type": "",
																				"value": "1"
																			}
																		],
																		"functionName": {
																			"name": "shl",
																			"nodeType": "YulIdentifier",
																			"src": "6380:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6380:11:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6393:1:11",
																		"type": "",
																		"value": "1"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "6376:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6376:19:11"
															},
															"variables": [
																{
																	"name": "_1",
																	"nodeType": "YulTypedName",
																	"src": "6370:2:11",
																	"type": ""
																}
															]
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6415:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6426:4:11",
																				"type": "",
																				"value": "0x20"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6411:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6411:20:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value0",
																				"nodeType": "YulIdentifier",
																				"src": "6437:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "6445:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "6433:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6433:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6404:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6404:45:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6404:45:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6469:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6480:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6465:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6465:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value1",
																				"nodeType": "YulIdentifier",
																				"src": "6489:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "6497:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "6485:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6485:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6458:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6458:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6458:43:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6521:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6532:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6517:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6517:18:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value2",
																				"nodeType": "YulIdentifier",
																				"src": "6541:6:11"
																			},
																			{
																				"name": "_1",
																				"nodeType": "YulIdentifier",
																				"src": "6549:2:11"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "6537:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6537:15:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6510:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6510:43:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6510:43:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6573:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6584:3:11",
																				"type": "",
																				"value": "128"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6569:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6569:19:11"
																	},
																	{
																		"name": "value3",
																		"nodeType": "YulIdentifier",
																		"src": "6590:6:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6562:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6562:35:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6562:35:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6617:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6628:3:11",
																				"type": "",
																				"value": "160"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6613:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6613:19:11"
																	},
																	{
																		"arguments": [
																			{
																				"name": "value4",
																				"nodeType": "YulIdentifier",
																				"src": "6638:6:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6646:18:11",
																				"type": "",
																				"value": "0xffffffffffffffff"
																			}
																		],
																		"functionName": {
																			"name": "and",
																			"nodeType": "YulIdentifier",
																			"src": "6634:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6634:31:11"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6606:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6606:60:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6606:60:11"
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_5a2d4bf05390b1b2373ebc9b5f99fd7bfffbf71a027b0a5a31b483b547ce5035_t_address_t_address_t_address_t_uint256_t_uint64__to_t_string_memory_ptr_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "6140:9:11",
														"type": ""
													},
													{
														"name": "value4",
														"nodeType": "YulTypedName",
														"src": "6151:6:11",
														"type": ""
													},
													{
														"name": "value3",
														"nodeType": "YulTypedName",
														"src": "6159:6:11",
														"type": ""
													},
													{
														"name": "value2",
														"nodeType": "YulTypedName",
														"src": "6167:6:11",
														"type": ""
													},
													{
														"name": "value1",
														"nodeType": "YulTypedName",
														"src": "6175:6:11",
														"type": ""
													},
													{
														"name": "value0",
														"nodeType": "YulTypedName",
														"src": "6183:6:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "6194:4:11",
														"type": ""
													}
												],
												"src": "5890:782:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "6851:179:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "6868:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6879:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6861:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6861:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6861:21:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6902:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6913:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6898:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6898:18:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "6918:2:11",
																		"type": "",
																		"value": "29"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6891:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6891:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6891:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "6941:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "6952:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "6937:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "6937:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "6957:31:11",
																		"type": "",
																		"value": "Address: call to non-contract"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "6930:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "6930:59:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "6930:59:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "6998:26:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "7010:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7021:2:11",
																		"type": "",
																		"value": "96"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "7006:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7006:18:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "6998:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "6828:9:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "6842:4:11",
														"type": ""
													}
												],
												"src": "6677:353:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "7209:232:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "7226:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7237:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7219:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7219:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7219:21:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7260:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7271:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7256:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7256:18:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7276:2:11",
																		"type": "",
																		"value": "42"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7249:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7249:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7249:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7299:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7310:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7295:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7295:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "7315:34:11",
																		"type": "",
																		"value": "SafeERC20: ERC20 operation did n"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7288:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7288:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7288:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7370:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7381:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7366:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7366:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "7386:12:11",
																		"type": "",
																		"value": "ot succeed"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7359:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7359:40:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7359:40:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "7408:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "7420:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7431:3:11",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "7416:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7416:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "7408:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "7186:9:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "7200:4:11",
														"type": ""
													}
												],
												"src": "7035:406:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "7620:244:11",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "7637:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7648:2:11",
																		"type": "",
																		"value": "32"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7630:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7630:21:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7630:21:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7671:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7682:2:11",
																				"type": "",
																				"value": "32"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7667:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7667:18:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7687:2:11",
																		"type": "",
																		"value": "54"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7660:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7660:30:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7660:30:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7710:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7721:2:11",
																				"type": "",
																				"value": "64"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7706:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7706:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "7726:34:11",
																		"type": "",
																		"value": "SafeERC20: approve from non-zero"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7699:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7699:62:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7699:62:11"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"name": "headStart",
																				"nodeType": "YulIdentifier",
																				"src": "7781:9:11"
																			},
																			{
																				"kind": "number",
																				"nodeType": "YulLiteral",
																				"src": "7792:2:11",
																				"type": "",
																				"value": "96"
																			}
																		],
																		"functionName": {
																			"name": "add",
																			"nodeType": "YulIdentifier",
																			"src": "7777:3:11"
																		},
																		"nodeType": "YulFunctionCall",
																		"src": "7777:18:11"
																	},
																	{
																		"kind": "string",
																		"nodeType": "YulLiteral",
																		"src": "7797:24:11",
																		"type": "",
																		"value": " to non-zero allowance"
																	}
																],
																"functionName": {
																	"name": "mstore",
																	"nodeType": "YulIdentifier",
																	"src": "7770:6:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7770:52:11"
															},
															"nodeType": "YulExpressionStatement",
															"src": "7770:52:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "7831:27:11",
															"value": {
																"arguments": [
																	{
																		"name": "headStart",
																		"nodeType": "YulIdentifier",
																		"src": "7843:9:11"
																	},
																	{
																		"kind": "number",
																		"nodeType": "YulLiteral",
																		"src": "7854:3:11",
																		"type": "",
																		"value": "128"
																	}
																],
																"functionName": {
																	"name": "add",
																	"nodeType": "YulIdentifier",
																	"src": "7839:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7839:19:11"
															},
															"variableNames": [
																{
																	"name": "tail",
																	"nodeType": "YulIdentifier",
																	"src": "7831:4:11"
																}
															]
														}
													]
												},
												"name": "abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "headStart",
														"nodeType": "YulTypedName",
														"src": "7597:9:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "tail",
														"nodeType": "YulTypedName",
														"src": "7611:4:11",
														"type": ""
													}
												],
												"src": "7446:418:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "7918:179:11",
													"statements": [
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "7948:117:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "diff",
																					"nodeType": "YulIdentifier",
																					"src": "7969:4:11"
																				},
																				{
																					"arguments": [
																						{
																							"kind": "number",
																							"nodeType": "YulLiteral",
																							"src": "7979:3:11",
																							"type": "",
																							"value": "224"
																						},
																						{
																							"kind": "number",
																							"nodeType": "YulLiteral",
																							"src": "7984:10:11",
																							"type": "",
																							"value": "0x4e487b71"
																						}
																					],
																					"functionName": {
																						"name": "shl",
																						"nodeType": "YulIdentifier",
																						"src": "7975:3:11"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "7975:20:11"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "7962:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "7962:34:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "7962:34:11"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "8016:1:11",
																					"type": "",
																					"value": "4"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "8019:4:11",
																					"type": "",
																					"value": "0x11"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "8009:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8009:15:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8009:15:11"
																	},
																	{
																		"expression": {
																			"arguments": [
																				{
																					"name": "diff",
																					"nodeType": "YulIdentifier",
																					"src": "8044:4:11"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "8050:4:11",
																					"type": "",
																					"value": "0x24"
																				}
																			],
																			"functionName": {
																				"name": "revert",
																				"nodeType": "YulIdentifier",
																				"src": "8037:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8037:18:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8037:18:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "7934:1:11"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "7937:1:11"
																	}
																],
																"functionName": {
																	"name": "lt",
																	"nodeType": "YulIdentifier",
																	"src": "7931:2:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "7931:8:11"
															},
															"nodeType": "YulIf",
															"src": "7928:2:11"
														},
														{
															"nodeType": "YulAssignment",
															"src": "8074:17:11",
															"value": {
																"arguments": [
																	{
																		"name": "x",
																		"nodeType": "YulIdentifier",
																		"src": "8086:1:11"
																	},
																	{
																		"name": "y",
																		"nodeType": "YulIdentifier",
																		"src": "8089:1:11"
																	}
																],
																"functionName": {
																	"name": "sub",
																	"nodeType": "YulIdentifier",
																	"src": "8082:3:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "8082:9:11"
															},
															"variableNames": [
																{
																	"name": "diff",
																	"nodeType": "YulIdentifier",
																	"src": "8074:4:11"
																}
															]
														}
													]
												},
												"name": "checked_sub_t_uint256",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "x",
														"nodeType": "YulTypedName",
														"src": "7900:1:11",
														"type": ""
													},
													{
														"name": "y",
														"nodeType": "YulTypedName",
														"src": "7903:1:11",
														"type": ""
													}
												],
												"returnVariables": [
													{
														"name": "diff",
														"nodeType": "YulTypedName",
														"src": "7909:4:11",
														"type": ""
													}
												],
												"src": "7869:228:11"
											},
											{
												"body": {
													"nodeType": "YulBlock",
													"src": "8155:205:11",
													"statements": [
														{
															"nodeType": "YulVariableDeclaration",
															"src": "8165:10:11",
															"value": {
																"kind": "number",
																"nodeType": "YulLiteral",
																"src": "8174:1:11",
																"type": "",
																"value": "0"
															},
															"variables": [
																{
																	"name": "i",
																	"nodeType": "YulTypedName",
																	"src": "8169:1:11",
																	"type": ""
																}
															]
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "8234:63:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"name": "dst",
																							"nodeType": "YulIdentifier",
																							"src": "8259:3:11"
																						},
																						{
																							"name": "i",
																							"nodeType": "YulIdentifier",
																							"src": "8264:1:11"
																						}
																					],
																					"functionName": {
																						"name": "add",
																						"nodeType": "YulIdentifier",
																						"src": "8255:3:11"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "8255:11:11"
																				},
																				{
																					"arguments": [
																						{
																							"arguments": [
																								{
																									"name": "src",
																									"nodeType": "YulIdentifier",
																									"src": "8278:3:11"
																								},
																								{
																									"name": "i",
																									"nodeType": "YulIdentifier",
																									"src": "8283:1:11"
																								}
																							],
																							"functionName": {
																								"name": "add",
																								"nodeType": "YulIdentifier",
																								"src": "8274:3:11"
																							},
																							"nodeType": "YulFunctionCall",
																							"src": "8274:11:11"
																						}
																					],
																					"functionName": {
																						"name": "mload",
																						"nodeType": "YulIdentifier",
																						"src": "8268:5:11"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "8268:18:11"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "8248:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8248:39:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8248:39:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "i",
																		"nodeType": "YulIdentifier",
																		"src": "8195:1:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "8198:6:11"
																	}
																],
																"functionName": {
																	"name": "lt",
																	"nodeType": "YulIdentifier",
																	"src": "8192:2:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "8192:13:11"
															},
															"nodeType": "YulForLoop",
															"post": {
																"nodeType": "YulBlock",
																"src": "8206:19:11",
																"statements": [
																	{
																		"nodeType": "YulAssignment",
																		"src": "8208:15:11",
																		"value": {
																			"arguments": [
																				{
																					"name": "i",
																					"nodeType": "YulIdentifier",
																					"src": "8217:1:11"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "8220:2:11",
																					"type": "",
																					"value": "32"
																				}
																			],
																			"functionName": {
																				"name": "add",
																				"nodeType": "YulIdentifier",
																				"src": "8213:3:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8213:10:11"
																		},
																		"variableNames": [
																			{
																				"name": "i",
																				"nodeType": "YulIdentifier",
																				"src": "8208:1:11"
																			}
																		]
																	}
																]
															},
															"pre": {
																"nodeType": "YulBlock",
																"src": "8188:3:11",
																"statements": []
															},
															"src": "8184:113:11"
														},
														{
															"body": {
																"nodeType": "YulBlock",
																"src": "8323:31:11",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"name": "dst",
																							"nodeType": "YulIdentifier",
																							"src": "8336:3:11"
																						},
																						{
																							"name": "length",
																							"nodeType": "YulIdentifier",
																							"src": "8341:6:11"
																						}
																					],
																					"functionName": {
																						"name": "add",
																						"nodeType": "YulIdentifier",
																						"src": "8332:3:11"
																					},
																					"nodeType": "YulFunctionCall",
																					"src": "8332:16:11"
																				},
																				{
																					"kind": "number",
																					"nodeType": "YulLiteral",
																					"src": "8350:1:11",
																					"type": "",
																					"value": "0"
																				}
																			],
																			"functionName": {
																				"name": "mstore",
																				"nodeType": "YulIdentifier",
																				"src": "8325:6:11"
																			},
																			"nodeType": "YulFunctionCall",
																			"src": "8325:27:11"
																		},
																		"nodeType": "YulExpressionStatement",
																		"src": "8325:27:11"
																	}
																]
															},
															"condition": {
																"arguments": [
																	{
																		"name": "i",
																		"nodeType": "YulIdentifier",
																		"src": "8312:1:11"
																	},
																	{
																		"name": "length",
																		"nodeType": "YulIdentifier",
																		"src": "8315:6:11"
																	}
																],
																"functionName": {
																	"name": "gt",
																	"nodeType": "YulIdentifier",
																	"src": "8309:2:11"
																},
																"nodeType": "YulFunctionCall",
																"src": "8309:13:11"
															},
															"nodeType": "YulIf",
															"src": "8306:2:11"
														}
													]
												},
												"name": "copy_memory_to_memory",
												"nodeType": "YulFunctionDefinition",
												"parameters": [
													{
														"name": "src",
														"nodeType": "YulTypedName",
														"src": "8133:3:11",
														"type": ""
													},
													{
														"name": "dst",
														"nodeType": "YulTypedName",
														"src": "8138:3:11",
														"type": ""
													},
													{
														"name": "length",
														"nodeType": "YulTypedName",
														"src": "8143:6:11",
														"type": ""
													}
												],
												"src": "8102:258:11"
											}
										]
									},
									"contents": "{\n    { }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_uint32(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_uint64(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(value0, value0) }\n        value0 := value\n    }\n    function abi_decode_tuple_t_struct$_CBridgeData_$784_calldata_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(value0, value0) }\n        value0 := headStart\n    }\n    function abi_decode_tuple_t_struct$_CBridgeData_$784_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(value0, value0) }\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, 192)\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr))\n        {\n            mstore(value0, shl(224, 0x4e487b71))\n            mstore(4, 0x41)\n            revert(value0, 0x24)\n        }\n        mstore(64, newFreePtr)\n        mstore(memPtr, abi_decode_uint32(headStart))\n        mstore(add(memPtr, 32), abi_decode_uint64(add(headStart, 32)))\n        mstore(add(memPtr, 64), abi_decode_uint64(add(headStart, 64)))\n        mstore(add(memPtr, 96), calldataload(add(headStart, 96)))\n        mstore(add(memPtr, 128), abi_decode_address(add(headStart, 128)))\n        mstore(add(memPtr, 160), abi_decode_address(add(headStart, 160)))\n        value0 := memPtr\n    }\n    function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := mload(headStart)\n    }\n    function abi_decode_tuple_t_uint64(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n        value0 := abi_decode_uint64(headStart)\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256_t_uint64_t_uint64_t_uint32__to_t_address_t_address_t_uint256_t_uint64_t_uint64_t_uint32__fromStack_reversed(headStart, value5, value4, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 192)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n        let _2 := 0xffffffffffffffff\n        mstore(add(headStart, 96), and(value3, _2))\n        mstore(add(headStart, 128), and(value4, _2))\n        mstore(add(headStart, 160), and(value5, 0xffffffff))\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        let length := mload(value0)\n        mstore(add(headStart, 32), length)\n        copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"LibDiamond: Must be contract own\")\n        mstore(add(headStart, 96), \"er\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Address: insufficient balance fo\")\n        mstore(add(headStart, 96), \"r call\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_5a2d4bf05390b1b2373ebc9b5f99fd7bfffbf71a027b0a5a31b483b547ce5035_t_address_t_address_t_address_t_uint256_t_uint64__to_t_string_memory_ptr_t_address_t_address_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 192)\n        mstore(add(headStart, 192), 7)\n        mstore(add(headStart, 224), \"cBridge\")\n        tail := add(headStart, 256)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(add(headStart, 0x20), and(value0, _1))\n        mstore(add(headStart, 64), and(value1, _1))\n        mstore(add(headStart, 96), and(value2, _1))\n        mstore(add(headStart, 128), value3)\n        mstore(add(headStart, 160), and(value4, 0xffffffffffffffff))\n    }\n    function abi_encode_tuple_t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 29)\n        mstore(add(headStart, 64), \"Address: call to non-contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 42)\n        mstore(add(headStart, 64), \"SafeERC20: ERC20 operation did n\")\n        mstore(add(headStart, 96), \"ot succeed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 54)\n        mstore(add(headStart, 64), \"SafeERC20: approve from non-zero\")\n        mstore(add(headStart, 96), \" to non-zero allowance\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        if lt(x, y)\n        {\n            mstore(diff, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(diff, 0x24)\n        }\n        diff := sub(x, y)\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n}",
									"id": 11,
									"language": "Yul",
									"name": "#utility.yul"
								}
							],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "6080604052600436106100345760003560e01c80631124bcf9146100395780635277cbc71461005b578063dae033891461006e575b600080fd5b34801561004557600080fd5b50610059610054366004610ba5565b61008e565b005b610059610069366004610bdf565b61015d565b34801561007a57600080fd5b50610059610089366004610ba5565b610298565b610096610333565b6001600160a01b0381166100bd576040516306b7c75960e31b815260040160405180910390fd5b7f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a80546001600160a01b0319166001600160a01b0383169081178255467f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4b8190556040805192835260208301919091527f5b114a545b5a08e3628017ac6e1af1f29e3f593dde50a4a93ab76f2a2220cd3891015b60405180910390a15050565b7fa65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b8054600114156101a1576040516329f745a760e01b815260040160405180910390fd5b600181556101c26101b860c0840160a08501610ba5565b83606001356103c1565b6101d96101d436849003840184610bf6565b6103da565b7f83bd4b75444b26482a091d91d32e43a65722f9fd8267a590beadccd9e61539e861020a60c0840160a08501610ba5565b3361021b60a0860160808701610ba5565b60608601356102306040880160208901610cb1565b6040805160c0808252600790820152666342726964676560c81b60e08201526001600160a01b03968716602082015294861690850152939091166060830152608082015267ffffffffffffffff90911660a08201526101000160405180910390a16000905550565b6102a0610333565b6001600160a01b0381166102c7576040516306b7c75960e31b815260040160405180910390fd5b7f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a80546001600160a01b0319166001600160a01b03831690811782556040519081527fef1a021f4afad10827a9f886313f92d00348a53d0b0df8d0aa270a0ac3379bc590602001610151565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146103bf5760405162461bcd60e51b815260206004820152602260248201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60448201526132b960f11b60648201526084015b60405180910390fd5b565b6103d682826001600160a01b038216156104fd565b5050565b60007f9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a805460208401519192506001600160a01b03169067ffffffffffffffff1646141561043b57604051634ac09ad360e01b815260040160405180910390fd5b61044e8360a001518285606001516105b6565b608083015160a0840151606085015160208601516040808801518851915163a5977fbb60e01b81526001600160a01b0396871660048201529486166024860152604485019390935267ffffffffffffffff91821660648501529116608483015263ffffffff1660a48201529082169063a5977fbb9060c401600060405180830381600087803b1580156104e057600080fd5b505af11580156104f4573d6000803e3d6000fd5b50505050505050565b8161051b5760405163162908e360e11b815260040160405180910390fd5b8015610546578134146105415760405163162908e360e11b815260040160405180910390fd5b505050565b341561056457604051623f45b560e01b815260040160405180910390fd5b600061056f8461068a565b905061057d8433308661071f565b82816105888661068a565b6105929190610d1a565b146105b05760405163162908e360e11b815260040160405180910390fd5b50505050565b6001600160a01b0383166105c957505050565b6001600160a01b0382166105f0576040516363ba9bff60e01b815260040160405180910390fd5b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e9060440160206040518083038186803b15801561063b57600080fd5b505afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190610c99565b9050818110156105b0576105b08484600019610779565b60006001600160a01b03821615610717576040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106da57600080fd5b505afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107129190610c99565b610719565b475b92915050565b6001600160a01b0384166107465760405163346fafc360e21b815260040160405180910390fd5b6001600160a01b03821661076d576040516321f7434560e01b815260040160405180910390fd5b6105b0848484846108d0565b8015806108025750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156107c857600080fd5b505afa1580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190610c99565b155b61086d5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016103b6565b6040516001600160a01b03831660248201526044810182905261054190849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610908565b6040516001600160a01b03808516602483015283166044820152606481018290526105b09085906323b872dd60e01b90608401610899565b600061095d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109da9092919063ffffffff16565b805190915015610541578080602001905181019061097b9190610bbf565b6105415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b6565b60606109e984846000856109f3565b90505b9392505050565b606082471015610a545760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b6565b6001600160a01b0385163b610aab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b6565b600080866001600160a01b03168587604051610ac79190610ccb565b60006040518083038185875af1925050503d8060008114610b04576040519150601f19603f3d011682016040523d82523d6000602084013e610b09565b606091505b5091509150610b19828286610b24565b979650505050505050565b60608315610b335750816109ec565b825115610b435782518084602001fd5b8160405162461bcd60e51b81526004016103b69190610ce7565b80356001600160a01b0381168114610b7457600080fd5b919050565b803563ffffffff81168114610b7457600080fd5b803567ffffffffffffffff81168114610b7457600080fd5b600060208284031215610bb6578081fd5b6109ec82610b5d565b600060208284031215610bd0578081fd5b815180151581146109ec578182fd5b600060c08284031215610bf0578081fd5b50919050565b600060c08284031215610c07578081fd5b60405160c0810181811067ffffffffffffffff82111715610c3657634e487b7160e01b83526041600452602483fd5b604052610c4283610b79565b8152610c5060208401610b8d565b6020820152610c6160408401610b8d565b604082015260608301356060820152610c7c60808401610b5d565b6080820152610c8d60a08401610b5d565b60a08201529392505050565b600060208284031215610caa578081fd5b5051919050565b600060208284031215610cc2578081fd5b6109ec82610b8d565b60008251610cdd818460208701610d3d565b9190910192915050565b6020815260008251806020840152610d06816040850160208701610d3d565b601f01601f19169190910160400192915050565b600082821015610d3857634e487b7160e01b81526011600452602481fd5b500390565b60005b83811015610d58578181015183820152602001610d40565b838111156105b0575050600091015256fea2646970667358221220cb15352d24fad792b1c98a11f70b5fb2508b53270c64b9580de43bf7f7060f5464736f6c63430008040033",
							"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x34 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1124BCF9 EQ PUSH2 0x39 JUMPI DUP1 PUSH4 0x5277CBC7 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0xDAE03389 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x45 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x54 CALLDATASIZE PUSH1 0x4 PUSH2 0xBA5 JUMP JUMPDEST PUSH2 0x8E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x59 PUSH2 0x69 CALLDATASIZE PUSH1 0x4 PUSH2 0xBDF JUMP JUMPDEST PUSH2 0x15D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x59 PUSH2 0x89 CALLDATASIZE PUSH1 0x4 PUSH2 0xBA5 JUMP JUMPDEST PUSH2 0x298 JUMP JUMPDEST PUSH2 0x96 PUSH2 0x333 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0xBD JUMPI PUSH1 0x40 MLOAD PUSH4 0x6B7C759 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE CHAINID PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4B DUP2 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x5B114A545B5A08E3628017AC6E1AF1F29E3F593DDE50A4A93AB76F2A2220CD38 SWAP2 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH32 0xA65BB2F450488AB0858C00EDC14ABC5297769BF42ADB48CFB77752890E8B697B DUP1 SLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29F745A7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP2 SSTORE PUSH2 0x1C2 PUSH2 0x1B8 PUSH1 0xC0 DUP5 ADD PUSH1 0xA0 DUP6 ADD PUSH2 0xBA5 JUMP JUMPDEST DUP4 PUSH1 0x60 ADD CALLDATALOAD PUSH2 0x3C1 JUMP JUMPDEST PUSH2 0x1D9 PUSH2 0x1D4 CALLDATASIZE DUP5 SWAP1 SUB DUP5 ADD DUP5 PUSH2 0xBF6 JUMP JUMPDEST PUSH2 0x3DA JUMP JUMPDEST PUSH32 0x83BD4B75444B26482A091D91D32E43A65722F9FD8267A590BEADCCD9E61539E8 PUSH2 0x20A PUSH1 0xC0 DUP5 ADD PUSH1 0xA0 DUP6 ADD PUSH2 0xBA5 JUMP JUMPDEST CALLER PUSH2 0x21B PUSH1 0xA0 DUP7 ADD PUSH1 0x80 DUP8 ADD PUSH2 0xBA5 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x230 PUSH1 0x40 DUP9 ADD PUSH1 0x20 DUP10 ADD PUSH2 0xCB1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xC0 DUP1 DUP3 MSTORE PUSH1 0x7 SWAP1 DUP3 ADD MSTORE PUSH7 0x63427269646765 PUSH1 0xC8 SHL PUSH1 0xE0 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE SWAP5 DUP7 AND SWAP1 DUP6 ADD MSTORE SWAP4 SWAP1 SWAP2 AND PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x100 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x0 SWAP1 SSTORE POP JUMP JUMPDEST PUSH2 0x2A0 PUSH2 0x333 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x2C7 JUMPI PUSH1 0x40 MLOAD PUSH4 0x6B7C759 PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xEF1A021F4AFAD10827A9F886313F92D00348A53D0B0DF8D0AA270A0AC3379BC5 SWAP1 PUSH1 0x20 ADD PUSH2 0x151 JUMP JUMPDEST PUSH32 0xC8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C PUSH1 0x4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3BF JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x22 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E PUSH1 0x44 DUP3 ADD MSTORE PUSH2 0x32B9 PUSH1 0xF1 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH2 0x3D6 DUP3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x4FD JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A DUP1 SLOAD PUSH1 0x20 DUP5 ADD MLOAD SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF AND CHAINID EQ ISZERO PUSH2 0x43B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4AC09AD3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x44E DUP4 PUSH1 0xA0 ADD MLOAD DUP3 DUP6 PUSH1 0x60 ADD MLOAD PUSH2 0x5B6 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0xA0 DUP5 ADD MLOAD PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x20 DUP7 ADD MLOAD PUSH1 0x40 DUP1 DUP9 ADD MLOAD DUP9 MLOAD SWAP2 MLOAD PUSH4 0xA5977FBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP5 DUP7 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x64 DUP6 ADD MSTORE SWAP2 AND PUSH1 0x84 DUP4 ADD MSTORE PUSH4 0xFFFFFFFF AND PUSH1 0xA4 DUP3 ADD MSTORE SWAP1 DUP3 AND SWAP1 PUSH4 0xA5977FBB SWAP1 PUSH1 0xC4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4F4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x51B JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x546 JUMPI DUP2 CALLVALUE EQ PUSH2 0x541 JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP JUMP JUMPDEST CALLVALUE ISZERO PUSH2 0x564 JUMPI PUSH1 0x40 MLOAD PUSH3 0x3F45B5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x56F DUP5 PUSH2 0x68A JUMP JUMPDEST SWAP1 POP PUSH2 0x57D DUP5 CALLER ADDRESS DUP7 PUSH2 0x71F JUMP JUMPDEST DUP3 DUP2 PUSH2 0x588 DUP7 PUSH2 0x68A JUMP JUMPDEST PUSH2 0x592 SWAP2 SWAP1 PUSH2 0xD1A JUMP JUMPDEST EQ PUSH2 0x5B0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x162908E3 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x5C9 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x5F0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x63BA9BFF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP6 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x63B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x64F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x673 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 LT ISZERO PUSH2 0x5B0 JUMPI PUSH2 0x5B0 DUP5 DUP5 PUSH1 0x0 NOT PUSH2 0x779 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x717 JUMPI PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH1 0x24 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x6DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6EE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x712 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST PUSH2 0x719 JUMP JUMPDEST SELFBALANCE JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x746 JUMPI PUSH1 0x40 MLOAD PUSH4 0x346FAFC3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x76D JUMPI PUSH1 0x40 MLOAD PUSH4 0x21F74345 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x5B0 DUP5 DUP5 DUP5 DUP5 PUSH2 0x8D0 JUMP JUMPDEST DUP1 ISZERO DUP1 PUSH2 0x802 JUMPI POP PUSH1 0x40 MLOAD PUSH4 0x6EB1769F PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND SWAP1 PUSH4 0xDD62ED3E SWAP1 PUSH1 0x44 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x7C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x7DC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x800 SWAP2 SWAP1 PUSH2 0xC99 JUMP JUMPDEST ISZERO JUMPDEST PUSH2 0x86D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x36 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F PUSH1 0x44 DUP3 ADD MSTORE PUSH22 0x20746F206E6F6E2D7A65726F20616C6C6F77616E6365 PUSH1 0x50 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x541 SWAP1 DUP5 SWAP1 PUSH4 0x95EA7B3 PUSH1 0xE0 SHL SWAP1 PUSH1 0x64 ADD JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB NOT SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE PUSH2 0x908 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x24 DUP4 ADD MSTORE DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH2 0x5B0 SWAP1 DUP6 SWAP1 PUSH4 0x23B872DD PUSH1 0xE0 SHL SWAP1 PUSH1 0x84 ADD PUSH2 0x899 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x95D DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9DA SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x541 JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x97B SWAP2 SWAP1 PUSH2 0xBBF JUMP JUMPDEST PUSH2 0x541 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2A PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5361666545524332303A204552433230206F7065726174696F6E20646964206E PUSH1 0x44 DUP3 ADD MSTORE PUSH10 0x1BDD081CDD58D8D95959 PUSH1 0xB2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x9E9 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x9F3 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 SELFBALANCE LT ISZERO PUSH2 0xA54 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A20696E73756666696369656E742062616C616E636520666F PUSH1 0x44 DUP3 ADD MSTORE PUSH6 0x1C8818D85B1B PUSH1 0xD2 SHL PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EXTCODESIZE PUSH2 0xAAB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x3B6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD PUSH2 0xAC7 SWAP2 SWAP1 PUSH2 0xCCB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xB04 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xB09 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP PUSH2 0xB19 DUP3 DUP3 DUP7 PUSH2 0xB24 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP4 ISZERO PUSH2 0xB33 JUMPI POP DUP2 PUSH2 0x9EC JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xB43 JUMPI DUP3 MLOAD DUP1 DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3B6 SWAP2 SWAP1 PUSH2 0xCE7 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBB6 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x9EC DUP3 PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBD0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x9EC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBF0 JUMPI DUP1 DUP2 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC07 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0xC36 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP4 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 DUP4 REVERT JUMPDEST PUSH1 0x40 MSTORE PUSH2 0xC42 DUP4 PUSH2 0xB79 JUMP JUMPDEST DUP2 MSTORE PUSH2 0xC50 PUSH1 0x20 DUP5 ADD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xC61 PUSH1 0x40 DUP5 ADD PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0xC7C PUSH1 0x80 DUP5 ADD PUSH2 0xB5D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xC8D PUSH1 0xA0 DUP5 ADD PUSH2 0xB5D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCAA JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCC2 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x9EC DUP3 PUSH2 0xB8D JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0xCDD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0xD3D JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xD06 DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xD3D JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 LT ISZERO PUSH2 0xD38 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 DUP2 REVERT JUMPDEST POP SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD58 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD40 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x5B0 JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCB ISZERO CALLDATALOAD 0x2D 0x24 STATICCALL 0xD7 SWAP3 0xB1 0xC9 DUP11 GT 0xF7 SIGNEXTEND 0x5F 0xB2 POP DUP12 MSTORE8 0x27 0xC PUSH5 0xB9580DE43B 0xF7 0xF7 MOD 0xF SLOAD PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "600:3897:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:338;;;;;;;;;;-1:-1:-1;2041:338:5;;;;;:::i;:::-;;:::i;:::-;;2501:462;;;;;;:::i;:::-;;:::i;2969:299::-;;;;;;;;;;-1:-1:-1;2969:299:5;;;;;:::i;:::-;;:::i;2041:338::-;2105:35;:33;:35::i;:::-;-1:-1:-1;;;;;2154:22:5;;2150:50;;2185:15;;-1:-1:-1;;;2185:15:5;;;;;;;;;;;2150:50;1397:40;2252:20;;-1:-1:-1;;;;;;2252:20:5;-1:-1:-1;;;;;2252:20:5;;;;;;;2301:13;2282:16;:32;;;2329:43;;;4587:51:11;;;4669:2;4654:18;;4647:34;;;;2329:43:5;;4560:18:11;2329:43:5;;;;;;;;2041:338;;:::o;2501:462::-;1077:9:6;743:8;;615:1;743:20;739:50;;;772:17;;-1:-1:-1;;;772:17:6;;;;;;;;;;;739:50;615:1;799:19;;2633:62:5::1;2655:18;::::0;;;::::1;::::0;::::1;;:::i;:::-;2675:12;:19;;;2633:21;:62::i;:::-;2705:26;;;::::0;;::::1;::::0;::::1;2718:12:::0;2705:26:::1;:::i;:::-;:12;:26::i;:::-;2747:209;2799:18;::::0;;;::::1;::::0;::::1;;:::i;:::-;2831:10;2855:21;::::0;;;::::1;::::0;::::1;;:::i;:::-;2890:19;::::0;::::1;;2923:23;::::0;;;::::1;::::0;::::1;;:::i;:::-;2747:209;::::0;;6231:3:11;6213:22;;;6272:1;6251:19;;;6244:30;-1:-1:-1;;;6305:3:11;6290:19;;6283:38;-1:-1:-1;;;;;6433:15:11;;;6426:4;6411:20;;6404:45;6485:15;;;6465:18;;;6458:43;6537:15;;;;6532:2;6517:18;;6510:43;-1:-1:-1;6569:19:11;;6562:35;6646:18;6634:31;;;-1:-1:-1;6613:19:11;;6606:60;6353:3;6338:19;2747:209:5::1;;;;;;;572:1:6::0;839:23;;-1:-1:-1;2501:462:5:o;2969:299::-;3039:35;:33;:35::i;:::-;-1:-1:-1;;;;;3088:25:5;;3084:53;;3122:15;;-1:-1:-1;;;3122:15:5;;;;;;;;;;;3084:53;1397:40;3189:23;;-1:-1:-1;;;;;;3189:23:5;-1:-1:-1;;;;;3189:23:5;;;;;;;3227:34;;3000:51:11;;;3227:34:5;;2988:2:11;2973:18;3227:34:5;2955:102:11;2079:190:10;202:45;2172:30;;;-1:-1:-1;;;;;2172:30:10;2158:10;:44;2137:125;;;;-1:-1:-1;;;2137:125:10;;5282:2:11;2137:125:10;;;5264:21:11;5321:2;5301:18;;;5294:30;5360:34;5340:18;;;5333:62;-1:-1:-1;;;5411:18:11;;;5404:32;5453:19;;2137:125:10;;;;;;;;;2079:190::o;4970:144:9:-;5051:56;5064:7;5073:6;-1:-1:-1;;;;;5081:25:9;;;5051:12;:56::i;:::-;4970:144;;:::o;3548:682:5:-;3621:17;1397:40;3680:9;;3721:23;;;;3680:9;;-1:-1:-1;;;;;;3680:9:5;;3704:40;;:13;:40;3700:92;;;3765:27;;-1:-1:-1;;;3765:27:5;;;;;;;;;;;3700:92;3803:127;3848:12;:18;;;3881:6;3901:12;:19;;;3803:24;:127::i;:::-;4020:21;;;;4055:18;;;;4087:19;;;;4120:23;;;;4157:18;;;;;4189:24;;3985:238;;-1:-1:-1;;;3985:238:5;;-1:-1:-1;;;;;4088:15:11;;;3985:238:5;;;4070:34:11;4140:15;;;4120:18;;;4113:43;4172:18;;;4165:34;;;;4218:18;4272:15;;;4252:18;;;4245:43;4325:15;;4304:19;;;4297:44;3985:238:5;4378:23:11;4357:19;;;4350:52;3985:21:5;;;;;;4004:19:11;;3985:238:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3548:682;;;:::o;4102:692:9:-;4225:11;4221:39;;4245:15;;-1:-1:-1;;;4245:15:9;;;;;;;;;;;4221:39;4274:8;4270:518;;;4315:6;4302:9;:19;4298:47;;4330:15;;-1:-1:-1;;;4330:15:9;;;;;;;;;;;4298:47;4102:692;;;:::o;4270:518::-;4380:9;:14;4376:47;;4403:20;;-1:-1:-1;;;4403:20:9;;;;;;;;;;;4376:47;4437:25;4465:31;4488:7;4465:22;:31::i;:::-;4437:59;;4510:148;4554:7;4579:10;4615:4;4638:6;4510:26;:148::i;:::-;4731:6;4710:17;4676:31;4699:7;4676:22;:31::i;:::-;:51;;;;:::i;:::-;:61;4672:105;;4762:15;;-1:-1:-1;;;4762:15:9;;;;;;;;;;;4672:105;4270:518;4102:692;;;:::o;2284:423::-;-1:-1:-1;;;;;2411:34:9;;2407:47;;2284:423;;;:::o;2407:47::-;-1:-1:-1;;;;;2467:23:9;;2463:64;;2499:28;;-1:-1:-1;;;2499:28:9;;;;;;;;;;;2463:64;2557:41;;-1:-1:-1;;;2557:41:9;;2583:4;2557:41;;;3274:34:11;-1:-1:-1;;;;;3344:15:11;;;3324:18;;;3317:43;2537:17:9;;2557;;;;;;3209:18:11;;2557:41:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2537:61;;2624:6;2612:9;:18;2608:92;;;2644:56;2673:7;2683;-1:-1:-1;;2644:21:9;:56::i;1255:232::-;1318:7;-1:-1:-1;;;;;1356:25:9;;;:124;;1440:40;;-1:-1:-1;;;1440:40:9;;1474:4;1440:40;;;3000:51:11;-1:-1:-1;;;;;1440:25:9;;;;;2973:18:11;;1440:40:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1356:124;;;1400:21;1356:124;1337:143;1255:232;-1:-1:-1;;1255:232:9:o;3504:352::-;-1:-1:-1;;;;;3651:25:9;;3647:65;;3685:27;;-1:-1:-1;;;3685:27:9;;;;;;;;;;;3647:65;-1:-1:-1;;;;;3726:18:9;;3722:56;;3753:25;;-1:-1:-1;;;3753:25:9;;;;;;;;;;;3722:56;3788:61;3822:7;3832:4;3838:2;3842:6;3788:26;:61::i;1475:603:2:-;1830:10;;;1829:62;;-1:-1:-1;1846:39:2;;-1:-1:-1;;;1846:39:2;;1870:4;1846:39;;;3274:34:11;-1:-1:-1;;;;;3344:15:11;;;3324:18;;;3317:43;1846:15:2;;;;;3209:18:11;;1846:39:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;1829:62;1808:163;;;;-1:-1:-1;;;1808:163:2;;7648:2:11;1808:163:2;;;7630:21:11;7687:2;7667:18;;;7660:30;7726:34;7706:18;;;7699:62;-1:-1:-1;;;7777:18:11;;;7770:52;7839:19;;1808:163:2;7620:244:11;1808:163:2;2008:62;;-1:-1:-1;;;;;4605:32:11;;2008:62:2;;;4587:51:11;4654:18;;;4647:34;;;1981:90:2;;2001:5;;-1:-1:-1;;;2031:22:2;4560:18:11;;2008:62:2;;;;-1:-1:-1;;2008:62:2;;;;;;;;;;;;;;-1:-1:-1;;;;;2008:62:2;-1:-1:-1;;;;;;2008:62:2;;;;;;;;;;1981:19;:90::i;974:241::-;1139:68;;-1:-1:-1;;;;;3629:15:11;;;1139:68:2;;;3611:34:11;3681:15;;3661:18;;;3654:43;3713:18;;;3706:34;;;1112:96:2;;1132:5;;-1:-1:-1;;;1162:27:2;3546:18:11;;1139:68:2;3528:218:11;3747:706:2;4166:23;4192:69;4220:4;4192:69;;;;;;;;;;;;;;;;;4200:5;-1:-1:-1;;;;;4192:27:2;;;:69;;;;;:::i;:::-;4275:17;;4166:95;;-1:-1:-1;4275:21:2;4271:176;;4370:10;4359:30;;;;;;;;;;;;:::i;:::-;4351:85;;;;-1:-1:-1;;;4351:85:2;;7237:2:11;4351:85:2;;;7219:21:11;7276:2;7256:18;;;7249:30;7315:34;7295:18;;;7288:62;-1:-1:-1;;;7366:18:11;;;7359:40;7416:19;;4351:85:2;7209:232:11;3861:223:3;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;-1:-1:-1;;;5137:81:3;;5685:2:11;5137:81:3;;;5667:21:11;5724:2;5704:18;;;5697:30;5763:34;5743:18;;;5736:62;-1:-1:-1;;;5814:18:11;;;5807:36;5860:19;;5137:81:3;5657:228:11;5137:81:3;-1:-1:-1;;;;;1465:19:3;;;5228:60;;;;-1:-1:-1;;;5228:60:3;;6879:2:11;5228:60:3;;;6861:21:11;6918:2;6898:18;;;6891:30;6957:31;6937:18;;;6930:59;7006:18;;5228:60:3;6851:179:11;5228:60:3;5300:12;5314:23;5341:6;-1:-1:-1;;;;;5341:11:3;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;4948:499;-1:-1:-1;;;;;;;4948:499:3:o;7561:742::-;7707:12;7735:7;7731:566;;;-1:-1:-1;7765:10:3;7758:17;;7731:566;7876:17;;:21;7872:415;;8120:10;8114:17;8180:15;8167:10;8163:2;8159:19;8152:44;8069:145;8259:12;8252:20;;-1:-1:-1;;;8252:20:3;;;;;;;;:::i;14:173:11:-;82:20;;-1:-1:-1;;;;;131:31:11;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:163::-;259:20;;319:10;308:22;;298:33;;288:2;;345:1;342;335:12;360:171;427:20;;487:18;476:30;;466:41;;456:2;;521:1;518;511:12;536:196;595:6;648:2;636:9;627:7;623:23;619:32;616:2;;;669:6;661;654:22;616:2;697:29;716:9;697:29;:::i;737:297::-;804:6;857:2;845:9;836:7;832:23;828:32;825:2;;;878:6;870;863:22;825:2;915:9;909:16;968:5;961:13;954:21;947:5;944:32;934:2;;995:6;987;980:22;1039:207;1128:6;1181:3;1169:9;1160:7;1156:23;1152:33;1149:2;;;1203:6;1195;1188:22;1149:2;-1:-1:-1;1231:9:11;1139:107;-1:-1:-1;1139:107:11:o;1251:921::-;1338:6;1391:3;1379:9;1370:7;1366:23;1362:33;1359:2;;;1413:6;1405;1398:22;1359:2;1451;1445:9;1493:3;1485:6;1481:16;1563:6;1551:10;1548:22;1527:18;1515:10;1512:34;1509:62;1506:2;;;-1:-1:-1;;;1594:36:11;;1653:4;1650:1;1643:15;1686:4;1601:6;1671:20;1506:2;1717;1710:22;1756:28;1774:9;1756:28;:::i;:::-;1748:6;1741:44;1818:37;1851:2;1840:9;1836:18;1818:37;:::i;:::-;1813:2;1805:6;1801:15;1794:62;1889:37;1922:2;1911:9;1907:18;1889:37;:::i;:::-;1884:2;1876:6;1872:15;1865:62;1988:2;1977:9;1973:18;1960:32;1955:2;1947:6;1943:15;1936:57;2027:39;2061:3;2050:9;2046:19;2027:39;:::i;:::-;2021:3;2013:6;2009:16;2002:65;2101:39;2135:3;2124:9;2120:19;2101:39;:::i;:::-;2095:3;2083:16;;2076:65;2087:6;1349:823;-1:-1:-1;;;1349:823:11:o;2177:194::-;2247:6;2300:2;2288:9;2279:7;2275:23;2271:32;2268:2;;;2321:6;2313;2306:22;2268:2;-1:-1:-1;2349:16:11;;2258:113;-1:-1:-1;2258:113:11:o;2376:194::-;2434:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:2;;;2508:6;2500;2493:22;2455:2;2536:28;2554:9;2536:28;:::i;2575:274::-;2704:3;2742:6;2736:13;2758:53;2804:6;2799:3;2792:4;2784:6;2780:17;2758:53;:::i;:::-;2827:16;;;;;2712:137;-1:-1:-1;;2712:137:11:o;4692:383::-;4841:2;4830:9;4823:21;4804:4;4873:6;4867:13;4916:6;4911:2;4900:9;4896:18;4889:34;4932:66;4991:6;4986:2;4975:9;4971:18;4966:2;4958:6;4954:15;4932:66;:::i;:::-;5059:2;5038:15;-1:-1:-1;;5034:29:11;5019:45;;;;5066:2;5015:54;;4813:262;-1:-1:-1;;4813:262:11:o;7869:228::-;7909:4;7937:1;7934;7931:8;7928:2;;;-1:-1:-1;;;7962:34:11;;8019:4;8016:1;8009:15;8050:4;7969;8037:18;7928:2;-1:-1:-1;8082:9:11;;7918:179::o;8102:258::-;8174:1;8184:113;8198:6;8195:1;8192:13;8184:113;;;8274:11;;;8268:18;8255:11;;;8248:39;8220:2;8213:10;8184:113;;;8315:6;8312:1;8309:13;8306:2;;;-1:-1:-1;;8350:1:11;8332:16;;8325:27;8155:205::o"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "697400",
								"executionCost": "728",
								"totalCost": "698128"
							},
							"external": {
								"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))": "infinite",
								"initializeCBridge(address)": "43398",
								"updateCBridgeAddress(address)": "23162"
							},
							"internal": {
								"_startBridge(struct CBridgeFacet.CBridgeData memory)": "infinite",
								"getStorage()": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH",
									"source": 5,
									"value": "80"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH",
									"source": 5,
									"value": "40"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "MSTORE",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "CALLVALUE",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "DUP1",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "ISZERO",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH [tag]",
									"source": 5,
									"value": "1"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "JUMPI",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "DUP1",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "REVERT",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "tag",
									"source": 5,
									"value": "1"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "JUMPDEST",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "POP",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH #[$]",
									"source": 5,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "DUP1",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH [$]",
									"source": 5,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "CODECOPY",
									"source": 5
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "PUSH",
									"source": 5,
									"value": "0"
								},
								{
									"begin": 600,
									"end": 4497,
									"name": "RETURN",
									"source": 5
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220cb15352d24fad792b1c98a11f70b5fb2508b53270c64b9580de43bf7f7060f5464736f6c63430008040033",
									".code": [
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "80"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "CALLDATASIZE",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "LT",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "1"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "CALLDATALOAD",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "E0"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "SHR",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "1124BCF9"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "EQ",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "2"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "5277CBC7"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "EQ",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "3"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "DAE03389"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "EQ",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "tag",
											"source": 5,
											"value": "1"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 600,
											"end": 4497,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "tag",
											"source": 5,
											"value": "2"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "CALLVALUE",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "5"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "tag",
											"source": 5,
											"value": "5"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "6"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "7"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "CALLDATASIZE",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "8"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "tag",
											"source": 5,
											"value": "7"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "9"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "tag",
											"source": 5,
											"value": "6"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "STOP",
											"source": 5
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "tag",
											"source": 5,
											"value": "3"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "6"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "11"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "CALLDATASIZE",
											"source": 5
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "12"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "tag",
											"source": 5,
											"value": "11"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "13"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "tag",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "CALLVALUE",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "14"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "tag",
											"source": 5,
											"value": "14"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "6"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "16"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "CALLDATASIZE",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "8"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "tag",
											"source": 5,
											"value": "16"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "17"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "tag",
											"source": 5,
											"value": "9"
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2105,
											"end": 2140,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "19"
										},
										{
											"begin": 2105,
											"end": 2138,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "20"
										},
										{
											"begin": 2105,
											"end": 2140,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2105,
											"end": 2140,
											"name": "tag",
											"source": 5,
											"value": "19"
										},
										{
											"begin": 2105,
											"end": 2140,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2154,
											"end": 2176,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 2154,
											"end": 2176,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 2150,
											"end": 2200,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "21"
										},
										{
											"begin": 2150,
											"end": 2200,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "6B7C759"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2185,
											"end": 2200,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 2150,
											"end": 2200,
											"name": "tag",
											"source": 5,
											"value": "21"
										},
										{
											"begin": 2150,
											"end": 2200,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 1397,
											"end": 1437,
											"name": "PUSH",
											"source": 5,
											"value": "9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A"
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "SLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "AND",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "OR",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "DUP3",
											"source": 5
										},
										{
											"begin": 2252,
											"end": 2272,
											"name": "SSTORE",
											"source": 5
										},
										{
											"begin": 2301,
											"end": 2314,
											"name": "CHAINID",
											"source": 5
										},
										{
											"begin": 2282,
											"end": 2298,
											"name": "PUSH",
											"source": 5,
											"value": "9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4B"
										},
										{
											"begin": 2282,
											"end": 2314,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 2282,
											"end": 2314,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2282,
											"end": 2314,
											"name": "SSTORE",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4587,
											"end": 4638,
											"name": "SWAP3",
											"source": 11
										},
										{
											"begin": 4587,
											"end": 4638,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 4587,
											"end": 4638,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4669,
											"end": 4671,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 4654,
											"end": 4672,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 4654,
											"end": 4672,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "PUSH",
											"source": 5,
											"value": "5B114A545B5A08E3628017AC6E1AF1F29E3F593DDE50A4A93AB76F2A2220CD38"
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 4560,
											"end": 4578,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "tag",
											"source": 5,
											"value": "24"
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2329,
											"end": 2372,
											"name": "LOG1",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 2041,
											"end": 2379,
											"name": "JUMP",
											"source": 5,
											"value": "[out]"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "tag",
											"source": 5,
											"value": "13"
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 1077,
											"end": 1086,
											"name": "PUSH",
											"source": 6,
											"value": "A65BB2F450488AB0858C00EDC14ABC5297769BF42ADB48CFB77752890E8B697B"
										},
										{
											"begin": 743,
											"end": 751,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 743,
											"end": 751,
											"name": "SLOAD",
											"source": 6
										},
										{
											"begin": 615,
											"end": 616,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 743,
											"end": 763,
											"name": "EQ",
											"source": 6
										},
										{
											"begin": 739,
											"end": 789,
											"name": "ISZERO",
											"source": 6
										},
										{
											"begin": 739,
											"end": 789,
											"name": "PUSH [tag]",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 739,
											"end": 789,
											"name": "JUMPI",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 772,
											"end": 789,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "29F745A7"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 772,
											"end": 789,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "MSTORE",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "PUSH",
											"source": 6,
											"value": "4"
										},
										{
											"begin": 772,
											"end": 789,
											"name": "ADD",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "PUSH",
											"source": 6,
											"value": "40"
										},
										{
											"begin": 772,
											"end": 789,
											"name": "MLOAD",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "DUP1",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "SWAP2",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "SUB",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 772,
											"end": 789,
											"name": "REVERT",
											"source": 6
										},
										{
											"begin": 739,
											"end": 789,
											"name": "tag",
											"source": 6,
											"value": "29"
										},
										{
											"begin": 739,
											"end": 789,
											"name": "JUMPDEST",
											"source": 6
										},
										{
											"begin": 615,
											"end": 616,
											"name": "PUSH",
											"source": 6,
											"value": "1"
										},
										{
											"begin": 799,
											"end": 818,
											"name": "DUP2",
											"source": 6
										},
										{
											"begin": 799,
											"end": 818,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": 2633,
											"end": 2695,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "31"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "32"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "PUSH",
											"source": 5,
											"value": "C0"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "PUSH",
											"source": 5,
											"value": "A0"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "DUP6",
											"source": 5
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "8"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "tag",
											"source": 5,
											"value": "32"
										},
										{
											"begin": 2655,
											"end": 2673,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2675,
											"end": 2687,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 2675,
											"end": 2694,
											"name": "PUSH",
											"source": 5,
											"value": "60"
										},
										{
											"begin": 2675,
											"end": 2694,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2675,
											"end": 2694,
											"name": "CALLDATALOAD",
											"source": 5
										},
										{
											"begin": 2633,
											"end": 2654,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "33"
										},
										{
											"begin": 2633,
											"end": 2695,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2633,
											"end": 2695,
											"name": "tag",
											"source": 5,
											"value": "31"
										},
										{
											"begin": 2633,
											"end": 2695,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "34"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "35"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "CALLDATASIZE",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2718,
											"end": 2730,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "36"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "tag",
											"source": 5,
											"value": "35"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2705,
											"end": 2717,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "37"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "tag",
											"source": 5,
											"value": "34"
										},
										{
											"begin": 2705,
											"end": 2731,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "PUSH",
											"source": 5,
											"value": "83BD4B75444B26482A091D91D32E43A65722F9FD8267A590BEADCCD9E61539E8"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "38"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "PUSH",
											"source": 5,
											"value": "C0"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "PUSH",
											"source": 5,
											"value": "A0"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "DUP6",
											"source": 5
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "8"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "tag",
											"source": 5,
											"value": "38"
										},
										{
											"begin": 2799,
											"end": 2817,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2831,
											"end": 2841,
											"name": "CALLER",
											"source": 5
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "39"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "PUSH",
											"source": 5,
											"value": "A0"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "DUP7",
											"source": 5
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "PUSH",
											"source": 5,
											"value": "80"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "DUP8",
											"source": 5
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "8"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "tag",
											"source": 5,
											"value": "39"
										},
										{
											"begin": 2855,
											"end": 2876,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2890,
											"end": 2909,
											"name": "PUSH",
											"source": 5,
											"value": "60"
										},
										{
											"begin": 2890,
											"end": 2909,
											"name": "DUP7",
											"source": 5
										},
										{
											"begin": 2890,
											"end": 2909,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2890,
											"end": 2909,
											"name": "CALLDATALOAD",
											"source": 5
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "DUP9",
											"source": 5
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "PUSH",
											"source": 5,
											"value": "20"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "DUP10",
											"source": 5
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "41"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "tag",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2923,
											"end": 2946,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 6231,
											"end": 6234,
											"name": "PUSH",
											"source": 11,
											"value": "C0"
										},
										{
											"begin": 6213,
											"end": 6235,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 6213,
											"end": 6235,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6213,
											"end": 6235,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6272,
											"end": 6273,
											"name": "PUSH",
											"source": 11,
											"value": "7"
										},
										{
											"begin": 6251,
											"end": 6270,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 6251,
											"end": 6270,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6251,
											"end": 6270,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6244,
											"end": 6274,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "63427269646765"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "C8"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 6305,
											"end": 6308,
											"name": "PUSH",
											"source": 11,
											"value": "E0"
										},
										{
											"begin": 6290,
											"end": 6309,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6290,
											"end": 6309,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6283,
											"end": 6321,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 6433,
											"end": 6448,
											"name": "SWAP7",
											"source": 11
										},
										{
											"begin": 6433,
											"end": 6448,
											"name": "DUP8",
											"source": 11
										},
										{
											"begin": 6433,
											"end": 6448,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 6426,
											"end": 6430,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 6411,
											"end": 6431,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6411,
											"end": 6431,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6404,
											"end": 6449,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6485,
											"end": 6500,
											"name": "SWAP5",
											"source": 11
										},
										{
											"begin": 6485,
											"end": 6500,
											"name": "DUP7",
											"source": 11
										},
										{
											"begin": 6485,
											"end": 6500,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 6465,
											"end": 6483,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 6465,
											"end": 6483,
											"name": "DUP6",
											"source": 11
										},
										{
											"begin": 6465,
											"end": 6483,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6458,
											"end": 6501,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6537,
											"end": 6552,
											"name": "SWAP4",
											"source": 11
										},
										{
											"begin": 6537,
											"end": 6552,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 6537,
											"end": 6552,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 6537,
											"end": 6552,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 6532,
											"end": 6534,
											"name": "PUSH",
											"source": 11,
											"value": "60"
										},
										{
											"begin": 6517,
											"end": 6535,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 6517,
											"end": 6535,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6510,
											"end": 6553,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "80"
										},
										{
											"begin": 6569,
											"end": 6588,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6569,
											"end": 6588,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6562,
											"end": 6597,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6646,
											"end": 6664,
											"name": "PUSH",
											"source": 11,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 6634,
											"end": 6665,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 6634,
											"end": 6665,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 6634,
											"end": 6665,
											"name": "AND",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": 6613,
											"end": 6632,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6613,
											"end": 6632,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6606,
											"end": 6666,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6353,
											"end": 6356,
											"name": "PUSH",
											"source": 11,
											"value": "100"
										},
										{
											"begin": 6338,
											"end": 6357,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2747,
											"end": 2956,
											"name": "LOG1",
											"source": 5
										},
										{
											"begin": 572,
											"end": 573,
											"name": "PUSH",
											"source": 6,
											"value": "0"
										},
										{
											"begin": 839,
											"end": 862,
											"name": "SWAP1",
											"source": 6
										},
										{
											"begin": 839,
											"end": 862,
											"name": "SSTORE",
											"source": 6
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2501,
											"end": 2963,
											"name": "JUMP",
											"source": 5,
											"value": "[out]"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "tag",
											"source": 5,
											"value": "17"
										},
										{
											"begin": 2969,
											"end": 3268,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 3039,
											"end": 3074,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "45"
										},
										{
											"begin": 3039,
											"end": 3072,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "20"
										},
										{
											"begin": 3039,
											"end": 3074,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 3039,
											"end": 3074,
											"name": "tag",
											"source": 5,
											"value": "45"
										},
										{
											"begin": 3039,
											"end": 3074,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3088,
											"end": 3113,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3088,
											"end": 3113,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 3084,
											"end": 3137,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "46"
										},
										{
											"begin": 3084,
											"end": 3137,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "6B7C759"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3122,
											"end": 3137,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 3084,
											"end": 3137,
											"name": "tag",
											"source": 5,
											"value": "46"
										},
										{
											"begin": 3084,
											"end": 3137,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 1397,
											"end": 1437,
											"name": "PUSH",
											"source": 5,
											"value": "9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A"
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "SLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "AND",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "OR",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "DUP3",
											"source": 5
										},
										{
											"begin": 3189,
											"end": 3212,
											"name": "SSTORE",
											"source": 5
										},
										{
											"begin": 3227,
											"end": 3261,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3227,
											"end": 3261,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3000,
											"end": 3051,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 3000,
											"end": 3051,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 3000,
											"end": 3051,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 3227,
											"end": 3261,
											"name": "PUSH",
											"source": 5,
											"value": "EF1A021F4AFAD10827A9F886313F92D00348A53D0B0DF8D0AA270A0AC3379BC5"
										},
										{
											"begin": 3227,
											"end": 3261,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 2988,
											"end": 2990,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 2973,
											"end": 2991,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3227,
											"end": 3261,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "24"
										},
										{
											"begin": 2955,
											"end": 3057,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 2079,
											"end": 2269,
											"name": "tag",
											"source": 10,
											"value": "20"
										},
										{
											"begin": 2079,
											"end": 2269,
											"name": "JUMPDEST",
											"source": 10
										},
										{
											"begin": 202,
											"end": 247,
											"name": "PUSH",
											"source": 10,
											"value": "C8FCAD8DB84D3CC18B4C41D551EA0EE66DD599CDE068D998E57D5E09332C131C"
										},
										{
											"begin": 2172,
											"end": 2202,
											"name": "PUSH",
											"source": 10,
											"value": "4"
										},
										{
											"begin": 2172,
											"end": 2202,
											"name": "ADD",
											"source": 10
										},
										{
											"begin": 2172,
											"end": 2202,
											"name": "SLOAD",
											"source": 10
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2172,
											"end": 2202,
											"name": "AND",
											"source": 10
										},
										{
											"begin": 2158,
											"end": 2168,
											"name": "CALLER",
											"source": 10
										},
										{
											"begin": 2158,
											"end": 2202,
											"name": "EQ",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "PUSH [tag]",
											"source": 10,
											"value": "53"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "JUMPI",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "PUSH",
											"source": 10,
											"value": "40"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "MLOAD",
											"source": 10
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "DUP2",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "MSTORE",
											"source": 10
										},
										{
											"begin": 5282,
											"end": 5284,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "PUSH",
											"source": 10,
											"value": "4"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "DUP3",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "ADD",
											"source": 10
										},
										{
											"begin": 5264,
											"end": 5285,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5321,
											"end": 5323,
											"name": "PUSH",
											"source": 11,
											"value": "22"
										},
										{
											"begin": 5301,
											"end": 5319,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 5301,
											"end": 5319,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5301,
											"end": 5319,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5294,
											"end": 5324,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5360,
											"end": 5394,
											"name": "PUSH",
											"source": 11,
											"value": "4C69624469616D6F6E643A204D75737420626520636F6E7472616374206F776E"
										},
										{
											"begin": 5340,
											"end": 5358,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 5340,
											"end": 5358,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5340,
											"end": 5358,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5333,
											"end": 5395,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "32B9"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "F1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 5411,
											"end": 5429,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 5411,
											"end": 5429,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5411,
											"end": 5429,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5404,
											"end": 5436,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5453,
											"end": 5472,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 5453,
											"end": 5472,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "tag",
											"source": 10,
											"value": "54"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "JUMPDEST",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "PUSH",
											"source": 10,
											"value": "40"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "MLOAD",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "DUP1",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "SWAP2",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "SUB",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "SWAP1",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "REVERT",
											"source": 10
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "tag",
											"source": 10,
											"value": "53"
										},
										{
											"begin": 2137,
											"end": 2262,
											"name": "JUMPDEST",
											"source": 10
										},
										{
											"begin": 2079,
											"end": 2269,
											"name": "JUMP",
											"source": 10,
											"value": "[out]"
										},
										{
											"begin": 4970,
											"end": 5114,
											"name": "tag",
											"source": 9,
											"value": "33"
										},
										{
											"begin": 4970,
											"end": 5114,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 5051,
											"end": 5107,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "59"
										},
										{
											"begin": 5064,
											"end": 5071,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 5073,
											"end": 5079,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 5081,
											"end": 5106,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 5081,
											"end": 5106,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 5081,
											"end": 5106,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 5051,
											"end": 5063,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "60"
										},
										{
											"begin": 5051,
											"end": 5107,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 5051,
											"end": 5107,
											"name": "tag",
											"source": 9,
											"value": "59"
										},
										{
											"begin": 5051,
											"end": 5107,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4970,
											"end": 5114,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4970,
											"end": 5114,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4970,
											"end": 5114,
											"name": "JUMP",
											"source": 9,
											"value": "[out]"
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "tag",
											"source": 5,
											"value": "37"
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 3621,
											"end": 3638,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 1397,
											"end": 1437,
											"name": "PUSH",
											"source": 5,
											"value": "9D7253CC9498E9CC54011BBBE9471A68ADBC99D0AC1EEF42369F5A452E814C4A"
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "SLOAD",
											"source": 5
										},
										{
											"begin": 3721,
											"end": 3744,
											"name": "PUSH",
											"source": 5,
											"value": "20"
										},
										{
											"begin": 3721,
											"end": 3744,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 3721,
											"end": 3744,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 3721,
											"end": 3744,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "SWAP3",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 3680,
											"end": 3689,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3704,
											"end": 3744,
											"name": "PUSH",
											"source": 5,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 3704,
											"end": 3744,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 3704,
											"end": 3717,
											"name": "CHAINID",
											"source": 5
										},
										{
											"begin": 3704,
											"end": 3744,
											"name": "EQ",
											"source": 5
										},
										{
											"begin": 3700,
											"end": 3792,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 3700,
											"end": 3792,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "63"
										},
										{
											"begin": 3700,
											"end": 3792,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "4AC09AD3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3765,
											"end": 3792,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 3700,
											"end": 3792,
											"name": "tag",
											"source": 5,
											"value": "63"
										},
										{
											"begin": 3700,
											"end": 3792,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 3803,
											"end": 3930,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "64"
										},
										{
											"begin": 3848,
											"end": 3860,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 3848,
											"end": 3866,
											"name": "PUSH",
											"source": 5,
											"value": "A0"
										},
										{
											"begin": 3848,
											"end": 3866,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 3848,
											"end": 3866,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3881,
											"end": 3887,
											"name": "DUP3",
											"source": 5
										},
										{
											"begin": 3901,
											"end": 3913,
											"name": "DUP6",
											"source": 5
										},
										{
											"begin": 3901,
											"end": 3920,
											"name": "PUSH",
											"source": 5,
											"value": "60"
										},
										{
											"begin": 3901,
											"end": 3920,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 3901,
											"end": 3920,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3803,
											"end": 3827,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "65"
										},
										{
											"begin": 3803,
											"end": 3930,
											"name": "JUMP",
											"source": 5,
											"value": "[in]"
										},
										{
											"begin": 3803,
											"end": 3930,
											"name": "tag",
											"source": 5,
											"value": "64"
										},
										{
											"begin": 3803,
											"end": 3930,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 4020,
											"end": 4041,
											"name": "PUSH",
											"source": 5,
											"value": "80"
										},
										{
											"begin": 4020,
											"end": 4041,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 4020,
											"end": 4041,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4020,
											"end": 4041,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4055,
											"end": 4073,
											"name": "PUSH",
											"source": 5,
											"value": "A0"
										},
										{
											"begin": 4055,
											"end": 4073,
											"name": "DUP5",
											"source": 5
										},
										{
											"begin": 4055,
											"end": 4073,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4055,
											"end": 4073,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4087,
											"end": 4106,
											"name": "PUSH",
											"source": 5,
											"value": "60"
										},
										{
											"begin": 4087,
											"end": 4106,
											"name": "DUP6",
											"source": 5
										},
										{
											"begin": 4087,
											"end": 4106,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4087,
											"end": 4106,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4120,
											"end": 4143,
											"name": "PUSH",
											"source": 5,
											"value": "20"
										},
										{
											"begin": 4120,
											"end": 4143,
											"name": "DUP7",
											"source": 5
										},
										{
											"begin": 4120,
											"end": 4143,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4120,
											"end": 4143,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4157,
											"end": 4175,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 4157,
											"end": 4175,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 4157,
											"end": 4175,
											"name": "DUP9",
											"source": 5
										},
										{
											"begin": 4157,
											"end": 4175,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4157,
											"end": 4175,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 4189,
											"end": 4213,
											"name": "DUP9",
											"source": 5
										},
										{
											"begin": 4189,
											"end": 4213,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "SWAP2",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A5977FBB"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "MSTORE",
											"source": 5
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 4088,
											"end": 4103,
											"name": "SWAP7",
											"source": 11
										},
										{
											"begin": 4088,
											"end": 4103,
											"name": "DUP8",
											"source": 11
										},
										{
											"begin": 4088,
											"end": 4103,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "4"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP3",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "ADD",
											"source": 5
										},
										{
											"begin": 4070,
											"end": 4104,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4140,
											"end": 4155,
											"name": "SWAP5",
											"source": 11
										},
										{
											"begin": 4140,
											"end": 4155,
											"name": "DUP7",
											"source": 11
										},
										{
											"begin": 4140,
											"end": 4155,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 4120,
											"end": 4138,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 4120,
											"end": 4138,
											"name": "DUP7",
											"source": 11
										},
										{
											"begin": 4120,
											"end": 4138,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4113,
											"end": 4156,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4172,
											"end": 4190,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 4172,
											"end": 4190,
											"name": "DUP6",
											"source": 11
										},
										{
											"begin": 4172,
											"end": 4190,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4165,
											"end": 4199,
											"name": "SWAP4",
											"source": 11
										},
										{
											"begin": 4165,
											"end": 4199,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 4165,
											"end": 4199,
											"name": "SWAP4",
											"source": 11
										},
										{
											"begin": 4165,
											"end": 4199,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4218,
											"end": 4236,
											"name": "PUSH",
											"source": 11,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 4272,
											"end": 4287,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 4272,
											"end": 4287,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 4272,
											"end": 4287,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 4252,
											"end": 4270,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 4252,
											"end": 4270,
											"name": "DUP6",
											"source": 11
										},
										{
											"begin": 4252,
											"end": 4270,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4245,
											"end": 4288,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4325,
											"end": 4340,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 4325,
											"end": 4340,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 4304,
											"end": 4323,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 4304,
											"end": 4323,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 4304,
											"end": 4323,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4297,
											"end": 4341,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "FFFFFFFF"
										},
										{
											"begin": 4378,
											"end": 4401,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 4357,
											"end": 4376,
											"name": "PUSH",
											"source": 11,
											"value": "A4"
										},
										{
											"begin": 4357,
											"end": 4376,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 4357,
											"end": 4376,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4350,
											"end": 4402,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "DUP3",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "AND",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "PUSH",
											"source": 5,
											"value": "A5977FBB"
										},
										{
											"begin": 3985,
											"end": 4006,
											"name": "SWAP1",
											"source": 5
										},
										{
											"begin": 4004,
											"end": 4023,
											"name": "PUSH",
											"source": 11,
											"value": "C4"
										},
										{
											"begin": 4004,
											"end": 4023,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "40"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "MLOAD",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP4",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "SUB",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP2",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP8",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "EXTCODESIZE",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "68"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "tag",
											"source": 5,
											"value": "68"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "GAS",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "CALL",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "ISZERO",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH [tag]",
											"source": 5,
											"value": "70"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "JUMPI",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "RETURNDATASIZE",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "DUP1",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "RETURNDATACOPY",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "RETURNDATASIZE",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "PUSH",
											"source": 5,
											"value": "0"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "REVERT",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "tag",
											"source": 5,
											"value": "70"
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "JUMPDEST",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3985,
											"end": 4223,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "POP",
											"source": 5
										},
										{
											"begin": 3548,
											"end": 4230,
											"name": "JUMP",
											"source": 5,
											"value": "[out]"
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "tag",
											"source": 9,
											"value": "60"
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4225,
											"end": 4236,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4221,
											"end": 4260,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "73"
										},
										{
											"begin": 4221,
											"end": 4260,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "162908E3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4245,
											"end": 4260,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 4221,
											"end": 4260,
											"name": "tag",
											"source": 9,
											"value": "73"
										},
										{
											"begin": 4221,
											"end": 4260,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4274,
											"end": 4282,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "74"
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 4315,
											"end": 4321,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4302,
											"end": 4311,
											"name": "CALLVALUE",
											"source": 9
										},
										{
											"begin": 4302,
											"end": 4321,
											"name": "EQ",
											"source": 9
										},
										{
											"begin": 4298,
											"end": 4345,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "75"
										},
										{
											"begin": 4298,
											"end": 4345,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "162908E3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4330,
											"end": 4345,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 4298,
											"end": 4345,
											"name": "tag",
											"source": 9,
											"value": "75"
										},
										{
											"begin": 4298,
											"end": 4345,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "JUMP",
											"source": 9,
											"value": "[out]"
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "tag",
											"source": 9,
											"value": "74"
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4380,
											"end": 4389,
											"name": "CALLVALUE",
											"source": 9
										},
										{
											"begin": 4380,
											"end": 4394,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 4376,
											"end": 4423,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "77"
										},
										{
											"begin": 4376,
											"end": 4423,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "3F45B5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4403,
											"end": 4423,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 4376,
											"end": 4423,
											"name": "tag",
											"source": 9,
											"value": "77"
										},
										{
											"begin": 4376,
											"end": 4423,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4437,
											"end": 4462,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 4465,
											"end": 4496,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "78"
										},
										{
											"begin": 4488,
											"end": 4495,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 4465,
											"end": 4487,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "79"
										},
										{
											"begin": 4465,
											"end": 4496,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 4465,
											"end": 4496,
											"name": "tag",
											"source": 9,
											"value": "78"
										},
										{
											"begin": 4465,
											"end": 4496,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4437,
											"end": 4496,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4437,
											"end": 4496,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4510,
											"end": 4658,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "80"
										},
										{
											"begin": 4554,
											"end": 4561,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 4579,
											"end": 4589,
											"name": "CALLER",
											"source": 9
										},
										{
											"begin": 4615,
											"end": 4619,
											"name": "ADDRESS",
											"source": 9
										},
										{
											"begin": 4638,
											"end": 4644,
											"name": "DUP7",
											"source": 9
										},
										{
											"begin": 4510,
											"end": 4536,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "81"
										},
										{
											"begin": 4510,
											"end": 4658,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 4510,
											"end": 4658,
											"name": "tag",
											"source": 9,
											"value": "80"
										},
										{
											"begin": 4510,
											"end": 4658,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4731,
											"end": 4737,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 4710,
											"end": 4727,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4707,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "82"
										},
										{
											"begin": 4699,
											"end": 4706,
											"name": "DUP7",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4698,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "79"
										},
										{
											"begin": 4676,
											"end": 4707,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 4676,
											"end": 4707,
											"name": "tag",
											"source": 9,
											"value": "82"
										},
										{
											"begin": 4676,
											"end": 4707,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "83"
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "84"
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "tag",
											"source": 9,
											"value": "83"
										},
										{
											"begin": 4676,
											"end": 4727,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4676,
											"end": 4737,
											"name": "EQ",
											"source": 9
										},
										{
											"begin": 4672,
											"end": 4777,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "85"
										},
										{
											"begin": 4672,
											"end": 4777,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "162908E3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 4762,
											"end": 4777,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 4672,
											"end": 4777,
											"name": "tag",
											"source": 9,
											"value": "85"
										},
										{
											"begin": 4672,
											"end": 4777,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 4270,
											"end": 4788,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 4102,
											"end": 4794,
											"name": "JUMP",
											"source": 9,
											"value": "[out]"
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "tag",
											"source": 9,
											"value": "65"
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2411,
											"end": 2445,
											"name": "DUP4",
											"source": 9
										},
										{
											"begin": 2411,
											"end": 2445,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 2407,
											"end": 2454,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "87"
										},
										{
											"begin": 2407,
											"end": 2454,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2284,
											"end": 2707,
											"name": "JUMP",
											"source": 9,
											"value": "[out]"
										},
										{
											"begin": 2407,
											"end": 2454,
											"name": "tag",
											"source": 9,
											"value": "87"
										},
										{
											"begin": 2407,
											"end": 2454,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2467,
											"end": 2490,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 2467,
											"end": 2490,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 2463,
											"end": 2527,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "88"
										},
										{
											"begin": 2463,
											"end": 2527,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "63BA9BFF"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2499,
											"end": 2527,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 2463,
											"end": 2527,
											"name": "tag",
											"source": 9,
											"value": "88"
										},
										{
											"begin": 2463,
											"end": 2527,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "6EB1769F"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 2583,
											"end": 2587,
											"name": "ADDRESS",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 3274,
											"end": 3308,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3317,
											"end": 3360,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 2537,
											"end": 2554,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 2537,
											"end": 2554,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "DUP6",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "PUSH",
											"source": 9,
											"value": "DD62ED3E"
										},
										{
											"begin": 2557,
											"end": 2574,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 3209,
											"end": 3227,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 3209,
											"end": 3227,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "20"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP4",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP7",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "EXTCODESIZE",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "91"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "tag",
											"source": 9,
											"value": "91"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "GAS",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "STATICCALL",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "93"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "RETURNDATACOPY",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "tag",
											"source": 9,
											"value": "93"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "1F"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "NOT",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "1F"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "94"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "95"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "tag",
											"source": 9,
											"value": "94"
										},
										{
											"begin": 2557,
											"end": 2598,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 2537,
											"end": 2598,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2537,
											"end": 2598,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 2624,
											"end": 2630,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2612,
											"end": 2621,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 2612,
											"end": 2630,
											"name": "LT",
											"source": 9
										},
										{
											"begin": 2608,
											"end": 2700,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 2608,
											"end": 2700,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "85"
										},
										{
											"begin": 2608,
											"end": 2700,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 2644,
											"end": 2700,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "85"
										},
										{
											"begin": 2673,
											"end": 2680,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 2683,
											"end": 2690,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 2644,
											"end": 2665,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "98"
										},
										{
											"begin": 2644,
											"end": 2700,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 1255,
											"end": 1487,
											"name": "tag",
											"source": 9,
											"value": "79"
										},
										{
											"begin": 1255,
											"end": 1487,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1318,
											"end": 1325,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 1356,
											"end": 1381,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1381,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1381,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "100"
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "70A08231"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 1474,
											"end": 1478,
											"name": "ADDRESS",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 3000,
											"end": 3051,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 1440,
											"end": 1465,
											"name": "DUP4",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1465,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1465,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1465,
											"name": "PUSH",
											"source": 9,
											"value": "70A08231"
										},
										{
											"begin": 1440,
											"end": 1465,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 2973,
											"end": 2991,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 2973,
											"end": 2991,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "20"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP4",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP7",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "EXTCODESIZE",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "102"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "tag",
											"source": 9,
											"value": "102"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "GAS",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "STATICCALL",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ISZERO",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "104"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "RETURNDATACOPY",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "tag",
											"source": 9,
											"value": "104"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "RETURNDATASIZE",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "1F"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "NOT",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "1F"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "POP",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "105"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "95"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "tag",
											"source": 9,
											"value": "105"
										},
										{
											"begin": 1440,
											"end": 1480,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "106"
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "JUMP",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "tag",
											"source": 9,
											"value": "100"
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1400,
											"end": 1421,
											"name": "SELFBALANCE",
											"source": 9
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "tag",
											"source": 9,
											"value": "106"
										},
										{
											"begin": 1356,
											"end": 1480,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 1337,
											"end": 1480,
											"name": "SWAP3",
											"source": 9
										},
										{
											"begin": 1255,
											"end": 1487,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 1255,
											"end": 1487,
											"name": "JUMP",
											"source": 9,
											"value": "[out]"
										},
										{
											"begin": 3504,
											"end": 3856,
											"name": "tag",
											"source": 9,
											"value": "81"
										},
										{
											"begin": 3504,
											"end": 3856,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3651,
											"end": 3676,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 3651,
											"end": 3676,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 3647,
											"end": 3712,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "108"
										},
										{
											"begin": 3647,
											"end": 3712,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "346FAFC3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E2"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 3685,
											"end": 3712,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 3647,
											"end": 3712,
											"name": "tag",
											"source": 9,
											"value": "108"
										},
										{
											"begin": 3647,
											"end": 3712,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3726,
											"end": 3744,
											"name": "DUP3",
											"source": 9
										},
										{
											"begin": 3726,
											"end": 3744,
											"name": "AND",
											"source": 9
										},
										{
											"begin": 3722,
											"end": 3778,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "109"
										},
										{
											"begin": 3722,
											"end": 3778,
											"name": "JUMPI",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "21F74345"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "DUP2",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "PUSH",
											"source": 9,
											"value": "4"
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "ADD",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "MLOAD",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "SWAP2",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "SUB",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "SWAP1",
											"source": 9
										},
										{
											"begin": 3753,
											"end": 3778,
											"name": "REVERT",
											"source": 9
										},
										{
											"begin": 3722,
											"end": 3778,
											"name": "tag",
											"source": 9,
											"value": "109"
										},
										{
											"begin": 3722,
											"end": 3778,
											"name": "JUMPDEST",
											"source": 9
										},
										{
											"begin": 3788,
											"end": 3849,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "85"
										},
										{
											"begin": 3822,
											"end": 3829,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 3832,
											"end": 3836,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 3838,
											"end": 3840,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 3842,
											"end": 3848,
											"name": "DUP5",
											"source": 9
										},
										{
											"begin": 3788,
											"end": 3814,
											"name": "PUSH [tag]",
											"source": 9,
											"value": "111"
										},
										{
											"begin": 3788,
											"end": 3849,
											"name": "JUMP",
											"source": 9,
											"value": "[in]"
										},
										{
											"begin": 1475,
											"end": 2078,
											"name": "tag",
											"source": 2,
											"value": "98"
										},
										{
											"begin": 1475,
											"end": 2078,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1830,
											"end": 1840,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1830,
											"end": 1840,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1830,
											"end": 1840,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1829,
											"end": 1891,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "113"
										},
										{
											"begin": 1829,
											"end": 1891,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "6EB1769F"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1870,
											"end": 1874,
											"name": "ADDRESS",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "4"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 3274,
											"end": 3308,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 3344,
											"end": 3359,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 3324,
											"end": 3342,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3317,
											"end": 3360,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1846,
											"end": 1861,
											"name": "DUP5",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1861,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1861,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1861,
											"name": "PUSH",
											"source": 2,
											"value": "DD62ED3E"
										},
										{
											"begin": 1846,
											"end": 1861,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 3209,
											"end": 3227,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 3209,
											"end": 3227,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "SUB",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP7",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "EXTCODESIZE",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "115"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "REVERT",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "tag",
											"source": 2,
											"value": "115"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "GAS",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "STATICCALL",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "117"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "RETURNDATASIZE",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "RETURNDATACOPY",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "RETURNDATASIZE",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "REVERT",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "tag",
											"source": 2,
											"value": "117"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "RETURNDATASIZE",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "1F"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "NOT",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "1F"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "118"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "95"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "tag",
											"source": 2,
											"value": "118"
										},
										{
											"begin": 1846,
											"end": 1885,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1846,
											"end": 1890,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 1829,
											"end": 1891,
											"name": "tag",
											"source": 2,
											"value": "113"
										},
										{
											"begin": 1829,
											"end": 1891,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "119"
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 7648,
											"end": 7650,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "PUSH",
											"source": 2,
											"value": "4"
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 7630,
											"end": 7651,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7687,
											"end": 7689,
											"name": "PUSH",
											"source": 11,
											"value": "36"
										},
										{
											"begin": 7667,
											"end": 7685,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 7667,
											"end": 7685,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7667,
											"end": 7685,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7660,
											"end": 7690,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7726,
											"end": 7760,
											"name": "PUSH",
											"source": 11,
											"value": "5361666545524332303A20617070726F76652066726F6D206E6F6E2D7A65726F"
										},
										{
											"begin": 7706,
											"end": 7724,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 7706,
											"end": 7724,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7706,
											"end": 7724,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7699,
											"end": 7761,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "20746F206E6F6E2D7A65726F20616C6C6F77616E6365"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "50"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 7777,
											"end": 7795,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 7777,
											"end": 7795,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7777,
											"end": 7795,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7770,
											"end": 7822,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7839,
											"end": 7858,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 7839,
											"end": 7858,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "54"
										},
										{
											"begin": 7620,
											"end": 7864,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "tag",
											"source": 2,
											"value": "119"
										},
										{
											"begin": 1808,
											"end": 1971,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 4605,
											"end": 4637,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 4605,
											"end": 4637,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "PUSH",
											"source": 2,
											"value": "24"
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4587,
											"end": 4638,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4654,
											"end": 4672,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 4654,
											"end": 4672,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 4654,
											"end": 4672,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 4647,
											"end": 4681,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1981,
											"end": 2071,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "75"
										},
										{
											"begin": 1981,
											"end": 2071,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 2001,
											"end": 2006,
											"name": "DUP5",
											"source": 2
										},
										{
											"begin": 2001,
											"end": 2006,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "95EA7B3"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 2031,
											"end": 2053,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4560,
											"end": 4578,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 4560,
											"end": 4578,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "tag",
											"source": 2,
											"value": "123"
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1F"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP5",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SUB",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "AND",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP4",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP3",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP3",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "OR",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 2008,
											"end": 2070,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 1981,
											"end": 2000,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "124"
										},
										{
											"begin": 1981,
											"end": 2071,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "tag",
											"source": 2,
											"value": "111"
										},
										{
											"begin": 974,
											"end": 1215,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 3629,
											"end": 3644,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 3629,
											"end": 3644,
											"name": "DUP6",
											"source": 11
										},
										{
											"begin": 3629,
											"end": 3644,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH",
											"source": 2,
											"value": "24"
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "DUP4",
											"source": 2
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 3611,
											"end": 3645,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 3681,
											"end": 3696,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 3681,
											"end": 3696,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 3661,
											"end": 3679,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 3661,
											"end": 3679,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 3661,
											"end": 3679,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3654,
											"end": 3697,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 3713,
											"end": 3731,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 3713,
											"end": 3731,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 3713,
											"end": 3731,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 3706,
											"end": 3740,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 3706,
											"end": 3740,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 3706,
											"end": 3740,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "85"
										},
										{
											"begin": 1112,
											"end": 1208,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 1132,
											"end": 1137,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": 1132,
											"end": 1137,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "23B872DD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 1162,
											"end": 1189,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 3546,
											"end": 3564,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 3546,
											"end": 3564,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1139,
											"end": 1207,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "123"
										},
										{
											"begin": 3528,
											"end": 3746,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "tag",
											"source": 2,
											"value": "124"
										},
										{
											"begin": 3747,
											"end": 4453,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4189,
											"name": "PUSH",
											"source": 2,
											"value": "0"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "130"
										},
										{
											"begin": 4220,
											"end": 4224,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "POP",
											"source": 2
										},
										{
											"begin": 4200,
											"end": 4205,
											"name": "DUP6",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "131"
										},
										{
											"begin": 4192,
											"end": 4219,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP3",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "PUSH",
											"source": 2,
											"value": "FFFFFFFF"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "AND",
											"source": 2
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "tag",
											"source": 2,
											"value": "130"
										},
										{
											"begin": 4192,
											"end": 4261,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4275,
											"end": 4292,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4275,
											"end": 4292,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4261,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4166,
											"end": 4261,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 4275,
											"end": 4296,
											"name": "ISZERO",
											"source": 2
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "75"
										},
										{
											"begin": 4271,
											"end": 4447,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 4370,
											"end": 4380,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "DUP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH",
											"source": 2,
											"value": "20"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "133"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP2",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "SWAP1",
											"source": 2
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "134"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "JUMP",
											"source": 2,
											"value": "[in]"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "tag",
											"source": 2,
											"value": "133"
										},
										{
											"begin": 4359,
											"end": 4389,
											"name": "JUMPDEST",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "75"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "JUMPI",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "40"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "MLOAD",
											"source": 2
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "DUP2",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "MSTORE",
											"source": 2
										},
										{
											"begin": 7237,
											"end": 7239,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH",
											"source": 2,
											"value": "4"
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "DUP3",
											"source": 2
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "ADD",
											"source": 2
										},
										{
											"begin": 7219,
											"end": 7240,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7276,
											"end": 7278,
											"name": "PUSH",
											"source": 11,
											"value": "2A"
										},
										{
											"begin": 7256,
											"end": 7274,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 7256,
											"end": 7274,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7256,
											"end": 7274,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7249,
											"end": 7279,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7315,
											"end": 7349,
											"name": "PUSH",
											"source": 11,
											"value": "5361666545524332303A204552433230206F7065726174696F6E20646964206E"
										},
										{
											"begin": 7295,
											"end": 7313,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 7295,
											"end": 7313,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7295,
											"end": 7313,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7288,
											"end": 7350,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1BDD081CDD58D8D95959"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "B2"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 7366,
											"end": 7384,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 7366,
											"end": 7384,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7366,
											"end": 7384,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 7359,
											"end": 7399,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7416,
											"end": 7435,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 7416,
											"end": 7435,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4351,
											"end": 4436,
											"name": "PUSH [tag]",
											"source": 2,
											"value": "54"
										},
										{
											"begin": 7209,
											"end": 7441,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "tag",
											"source": 3,
											"value": "131"
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 3994,
											"end": 4006,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "139"
										},
										{
											"begin": 4047,
											"end": 4053,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 4055,
											"end": 4059,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 4061,
											"end": 4062,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 4064,
											"end": 4076,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 4025,
											"end": 4046,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "140"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "tag",
											"source": 3,
											"value": "139"
										},
										{
											"begin": 4025,
											"end": 4077,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 4018,
											"end": 4077,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 4018,
											"end": 4077,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "tag",
											"source": 3,
											"value": "138"
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "SWAP4",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 3861,
											"end": 4084,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "tag",
											"source": 3,
											"value": "140"
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5113,
											"end": 5125,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 5170,
											"end": 5175,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5166,
											"name": "SELFBALANCE",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5175,
											"name": "LT",
											"source": 3
										},
										{
											"begin": 5145,
											"end": 5175,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "142"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5685,
											"end": 5687,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5667,
											"end": 5688,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5724,
											"end": 5726,
											"name": "PUSH",
											"source": 11,
											"value": "26"
										},
										{
											"begin": 5704,
											"end": 5722,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 5704,
											"end": 5722,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5704,
											"end": 5722,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5697,
											"end": 5727,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5763,
											"end": 5797,
											"name": "PUSH",
											"source": 11,
											"value": "416464726573733A20696E73756666696369656E742062616C616E636520666F"
										},
										{
											"begin": 5743,
											"end": 5761,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 5743,
											"end": 5761,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5743,
											"end": 5761,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5736,
											"end": 5798,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1C8818D85B1B"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "D2"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 5814,
											"end": 5832,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 5814,
											"end": 5832,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 5814,
											"end": 5832,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5807,
											"end": 5843,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 5860,
											"end": 5879,
											"name": "PUSH",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 5860,
											"end": 5879,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "54"
										},
										{
											"begin": 5657,
											"end": 5885,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "tag",
											"source": 3,
											"value": "142"
										},
										{
											"begin": 5137,
											"end": 5218,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 1465,
											"end": 1484,
											"name": "EXTCODESIZE",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "147"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 6879,
											"end": 6881,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 6861,
											"end": 6882,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6918,
											"end": 6920,
											"name": "PUSH",
											"source": 11,
											"value": "1D"
										},
										{
											"begin": 6898,
											"end": 6916,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 6898,
											"end": 6916,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6898,
											"end": 6916,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6891,
											"end": 6921,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 6957,
											"end": 6988,
											"name": "PUSH",
											"source": 11,
											"value": "416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000"
										},
										{
											"begin": 6937,
											"end": 6955,
											"name": "PUSH",
											"source": 11,
											"value": "44"
										},
										{
											"begin": 6937,
											"end": 6955,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 6937,
											"end": 6955,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 6930,
											"end": 6989,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 7006,
											"end": 7024,
											"name": "PUSH",
											"source": 11,
											"value": "64"
										},
										{
											"begin": 7006,
											"end": 7024,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "54"
										},
										{
											"begin": 6851,
											"end": 7030,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "tag",
											"source": 3,
											"value": "147"
										},
										{
											"begin": 5228,
											"end": 5288,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5300,
											"end": 5312,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5314,
											"end": 5337,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5347,
											"name": "DUP7",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 5341,
											"end": 5352,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 5360,
											"end": 5365,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 5367,
											"end": 5371,
											"name": "DUP8",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "150"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "151"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "150"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SUB",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP6",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP8",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "GAS",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "CALL",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "EQ",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "154"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "1F"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "NOT",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "3F"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "AND",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATASIZE",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "0"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "RETURNDATACOPY",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "153"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "154"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "tag",
											"source": 3,
											"value": "153"
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5341,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 5299,
											"end": 5372,
											"name": "POP",
											"source": 3
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "155"
										},
										{
											"begin": 5406,
											"end": 5413,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5415,
											"end": 5425,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 5427,
											"end": 5439,
											"name": "DUP7",
											"source": 3
										},
										{
											"begin": 5389,
											"end": 5405,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "156"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "tag",
											"source": 3,
											"value": "155"
										},
										{
											"begin": 5389,
											"end": 5440,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 5382,
											"end": 5440,
											"name": "SWAP8",
											"source": 3
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "SWAP7",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 4948,
											"end": 5447,
											"name": "JUMP",
											"source": 3,
											"value": "[out]"
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "tag",
											"source": 3,
											"value": "156"
										},
										{
											"begin": 7561,
											"end": 8303,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7707,
											"end": 7719,
											"name": "PUSH",
											"source": 3,
											"value": "60"
										},
										{
											"begin": 7735,
											"end": 7742,
											"name": "DUP4",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "159"
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 7765,
											"end": 7775,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "138"
										},
										{
											"begin": 7758,
											"end": 7775,
											"name": "JUMP",
											"source": 3
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "tag",
											"source": 3,
											"value": "159"
										},
										{
											"begin": 7731,
											"end": 8297,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 7876,
											"end": 7893,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 7876,
											"end": 7893,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 7876,
											"end": 7897,
											"name": "ISZERO",
											"source": 3
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "161"
										},
										{
											"begin": 7872,
											"end": 8287,
											"name": "JUMPI",
											"source": 3
										},
										{
											"begin": 8120,
											"end": 8130,
											"name": "DUP3",
											"source": 3
										},
										{
											"begin": 8114,
											"end": 8131,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": 8180,
											"end": 8195,
											"name": "DUP1",
											"source": 3
										},
										{
											"begin": 8167,
											"end": 8177,
											"name": "DUP5",
											"source": 3
										},
										{
											"begin": 8163,
											"end": 8165,
											"name": "PUSH",
											"source": 3,
											"value": "20"
										},
										{
											"begin": 8159,
											"end": 8178,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 8152,
											"end": 8196,
											"name": "REVERT",
											"source": 3
										},
										{
											"begin": 8069,
											"end": 8214,
											"name": "tag",
											"source": 3,
											"value": "161"
										},
										{
											"begin": 8069,
											"end": 8214,
											"name": "JUMPDEST",
											"source": 3
										},
										{
											"begin": 8259,
											"end": 8271,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "40"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "MLOAD",
											"source": 3
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "461BCD"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E5"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "DUP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "MSTORE",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH",
											"source": 3,
											"value": "4"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "ADD",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "54"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP2",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "SWAP1",
											"source": 3
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "PUSH [tag]",
											"source": 3,
											"value": "164"
										},
										{
											"begin": 8252,
											"end": 8272,
											"name": "JUMP",
											"source": 3,
											"value": "[in]"
										},
										{
											"begin": 14,
											"end": 187,
											"name": "tag",
											"source": 11,
											"value": "166"
										},
										{
											"begin": 14,
											"end": 187,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 82,
											"end": 102,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 82,
											"end": 102,
											"name": "CALLDATALOAD",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "A0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SUB",
											"source": -1
										},
										{
											"begin": 131,
											"end": 162,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 131,
											"end": 162,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 121,
											"end": 163,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 121,
											"end": 163,
											"name": "EQ",
											"source": 11
										},
										{
											"begin": 111,
											"end": 113,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "168"
										},
										{
											"begin": 111,
											"end": 113,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 177,
											"end": 178,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 174,
											"end": 175,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 167,
											"end": 179,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 111,
											"end": 113,
											"name": "tag",
											"source": 11,
											"value": "168"
										},
										{
											"begin": 111,
											"end": 113,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 63,
											"end": 187,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 63,
											"end": 187,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 63,
											"end": 187,
											"name": "POP",
											"source": 11
										},
										{
											"begin": 63,
											"end": 187,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 192,
											"end": 355,
											"name": "tag",
											"source": 11,
											"value": "169"
										},
										{
											"begin": 192,
											"end": 355,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 259,
											"end": 279,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 259,
											"end": 279,
											"name": "CALLDATALOAD",
											"source": 11
										},
										{
											"begin": 319,
											"end": 329,
											"name": "PUSH",
											"source": 11,
											"value": "FFFFFFFF"
										},
										{
											"begin": 308,
											"end": 330,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 308,
											"end": 330,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 298,
											"end": 331,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 298,
											"end": 331,
											"name": "EQ",
											"source": 11
										},
										{
											"begin": 288,
											"end": 290,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "168"
										},
										{
											"begin": 288,
											"end": 290,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 345,
											"end": 346,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 342,
											"end": 343,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 335,
											"end": 347,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 360,
											"end": 531,
											"name": "tag",
											"source": 11,
											"value": "172"
										},
										{
											"begin": 360,
											"end": 531,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 427,
											"end": 447,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 427,
											"end": 447,
											"name": "CALLDATALOAD",
											"source": 11
										},
										{
											"begin": 487,
											"end": 505,
											"name": "PUSH",
											"source": 11,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 476,
											"end": 506,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 476,
											"end": 506,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 466,
											"end": 507,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 466,
											"end": 507,
											"name": "EQ",
											"source": 11
										},
										{
											"begin": 456,
											"end": 458,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "168"
										},
										{
											"begin": 456,
											"end": 458,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 521,
											"end": 522,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 518,
											"end": 519,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 511,
											"end": 523,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 536,
											"end": 732,
											"name": "tag",
											"source": 11,
											"value": "8"
										},
										{
											"begin": 536,
											"end": 732,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 595,
											"end": 601,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 648,
											"end": 650,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 636,
											"end": 645,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 627,
											"end": 634,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 623,
											"end": 646,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 619,
											"end": 651,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 616,
											"end": 618,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 616,
											"end": 618,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "176"
										},
										{
											"begin": 616,
											"end": 618,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 669,
											"end": 675,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 661,
											"end": 667,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 654,
											"end": 676,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 616,
											"end": 618,
											"name": "tag",
											"source": 11,
											"value": "176"
										},
										{
											"begin": 616,
											"end": 618,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 697,
											"end": 726,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "138"
										},
										{
											"begin": 716,
											"end": 725,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 697,
											"end": 726,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "166"
										},
										{
											"begin": 697,
											"end": 726,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 737,
											"end": 1034,
											"name": "tag",
											"source": 11,
											"value": "134"
										},
										{
											"begin": 737,
											"end": 1034,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 804,
											"end": 810,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 857,
											"end": 859,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 845,
											"end": 854,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 836,
											"end": 843,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 832,
											"end": 855,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 828,
											"end": 860,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 825,
											"end": 827,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 825,
											"end": 827,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "179"
										},
										{
											"begin": 825,
											"end": 827,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 878,
											"end": 884,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 870,
											"end": 876,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 863,
											"end": 885,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 825,
											"end": 827,
											"name": "tag",
											"source": 11,
											"value": "179"
										},
										{
											"begin": 825,
											"end": 827,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 915,
											"end": 924,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 909,
											"end": 925,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 968,
											"end": 973,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 961,
											"end": 974,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 954,
											"end": 975,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 947,
											"end": 952,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 944,
											"end": 976,
											"name": "EQ",
											"source": 11
										},
										{
											"begin": 934,
											"end": 936,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "138"
										},
										{
											"begin": 934,
											"end": 936,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 995,
											"end": 1001,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 987,
											"end": 993,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 980,
											"end": 1002,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 1039,
											"end": 1246,
											"name": "tag",
											"source": 11,
											"value": "12"
										},
										{
											"begin": 1039,
											"end": 1246,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1128,
											"end": 1134,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 1181,
											"end": 1184,
											"name": "PUSH",
											"source": 11,
											"value": "C0"
										},
										{
											"begin": 1169,
											"end": 1178,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1160,
											"end": 1167,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 1156,
											"end": 1179,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 1152,
											"end": 1185,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 1149,
											"end": 1151,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 1149,
											"end": 1151,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "182"
										},
										{
											"begin": 1149,
											"end": 1151,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 1203,
											"end": 1209,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 1195,
											"end": 1201,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1188,
											"end": 1210,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 1149,
											"end": 1151,
											"name": "tag",
											"source": 11,
											"value": "182"
										},
										{
											"begin": 1149,
											"end": 1151,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 1231,
											"end": 1240,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 1139,
											"end": 1246,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 1139,
											"end": 1246,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 1251,
											"end": 2172,
											"name": "tag",
											"source": 11,
											"value": "36"
										},
										{
											"begin": 1251,
											"end": 2172,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1338,
											"end": 1344,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 1391,
											"end": 1394,
											"name": "PUSH",
											"source": 11,
											"value": "C0"
										},
										{
											"begin": 1379,
											"end": 1388,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1370,
											"end": 1377,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 1366,
											"end": 1389,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 1362,
											"end": 1395,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 1359,
											"end": 1361,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 1359,
											"end": 1361,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "184"
										},
										{
											"begin": 1359,
											"end": 1361,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 1413,
											"end": 1419,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 1405,
											"end": 1411,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1398,
											"end": 1420,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 1359,
											"end": 1361,
											"name": "tag",
											"source": 11,
											"value": "184"
										},
										{
											"begin": 1359,
											"end": 1361,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1451,
											"end": 1453,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 1445,
											"end": 1454,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 1493,
											"end": 1496,
											"name": "PUSH",
											"source": 11,
											"value": "C0"
										},
										{
											"begin": 1485,
											"end": 1491,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1481,
											"end": 1497,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1563,
											"end": 1569,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1551,
											"end": 1561,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1548,
											"end": 1570,
											"name": "LT",
											"source": 11
										},
										{
											"begin": 1527,
											"end": 1545,
											"name": "PUSH",
											"source": 11,
											"value": "FFFFFFFFFFFFFFFF"
										},
										{
											"begin": 1515,
											"end": 1525,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1512,
											"end": 1546,
											"name": "GT",
											"source": 11
										},
										{
											"begin": 1509,
											"end": 1571,
											"name": "OR",
											"source": 11
										},
										{
											"begin": 1506,
											"end": 1508,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 1506,
											"end": 1508,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "185"
										},
										{
											"begin": 1506,
											"end": 1508,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "4E487B71"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 1594,
											"end": 1630,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 1594,
											"end": 1630,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1653,
											"end": 1657,
											"name": "PUSH",
											"source": 11,
											"value": "41"
										},
										{
											"begin": 1650,
											"end": 1651,
											"name": "PUSH",
											"source": 11,
											"value": "4"
										},
										{
											"begin": 1643,
											"end": 1658,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1686,
											"end": 1690,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 1601,
											"end": 1607,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 1671,
											"end": 1691,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 1506,
											"end": 1508,
											"name": "tag",
											"source": 11,
											"value": "185"
										},
										{
											"begin": 1506,
											"end": 1508,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1717,
											"end": 1719,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 1710,
											"end": 1732,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1756,
											"end": 1784,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "186"
										},
										{
											"begin": 1774,
											"end": 1783,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 1756,
											"end": 1784,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "169"
										},
										{
											"begin": 1756,
											"end": 1784,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 1756,
											"end": 1784,
											"name": "tag",
											"source": 11,
											"value": "186"
										},
										{
											"begin": 1756,
											"end": 1784,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1748,
											"end": 1754,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 1741,
											"end": 1785,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1818,
											"end": 1855,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "187"
										},
										{
											"begin": 1851,
											"end": 1853,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 1840,
											"end": 1849,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 1836,
											"end": 1854,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1818,
											"end": 1855,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "172"
										},
										{
											"begin": 1818,
											"end": 1855,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 1818,
											"end": 1855,
											"name": "tag",
											"source": 11,
											"value": "187"
										},
										{
											"begin": 1818,
											"end": 1855,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1813,
											"end": 1815,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 1805,
											"end": 1811,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1801,
											"end": 1816,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1794,
											"end": 1856,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1889,
											"end": 1926,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "188"
										},
										{
											"begin": 1922,
											"end": 1924,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 1911,
											"end": 1920,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 1907,
											"end": 1925,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1889,
											"end": 1926,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "172"
										},
										{
											"begin": 1889,
											"end": 1926,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 1889,
											"end": 1926,
											"name": "tag",
											"source": 11,
											"value": "188"
										},
										{
											"begin": 1889,
											"end": 1926,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 1884,
											"end": 1886,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 1876,
											"end": 1882,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1872,
											"end": 1887,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1865,
											"end": 1927,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 1988,
											"end": 1990,
											"name": "PUSH",
											"source": 11,
											"value": "60"
										},
										{
											"begin": 1977,
											"end": 1986,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 1973,
											"end": 1991,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1960,
											"end": 1992,
											"name": "CALLDATALOAD",
											"source": 11
										},
										{
											"begin": 1955,
											"end": 1957,
											"name": "PUSH",
											"source": 11,
											"value": "60"
										},
										{
											"begin": 1947,
											"end": 1953,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 1943,
											"end": 1958,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 1936,
											"end": 1993,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 2027,
											"end": 2066,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "189"
										},
										{
											"begin": 2061,
											"end": 2064,
											"name": "PUSH",
											"source": 11,
											"value": "80"
										},
										{
											"begin": 2050,
											"end": 2059,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 2046,
											"end": 2065,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2027,
											"end": 2066,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "166"
										},
										{
											"begin": 2027,
											"end": 2066,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 2027,
											"end": 2066,
											"name": "tag",
											"source": 11,
											"value": "189"
										},
										{
											"begin": 2027,
											"end": 2066,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2021,
											"end": 2024,
											"name": "PUSH",
											"source": 11,
											"value": "80"
										},
										{
											"begin": 2013,
											"end": 2019,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2009,
											"end": 2025,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2002,
											"end": 2067,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 2101,
											"end": 2140,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "190"
										},
										{
											"begin": 2135,
											"end": 2138,
											"name": "PUSH",
											"source": 11,
											"value": "A0"
										},
										{
											"begin": 2124,
											"end": 2133,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 2120,
											"end": 2139,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2101,
											"end": 2140,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "166"
										},
										{
											"begin": 2101,
											"end": 2140,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 2101,
											"end": 2140,
											"name": "tag",
											"source": 11,
											"value": "190"
										},
										{
											"begin": 2101,
											"end": 2140,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2095,
											"end": 2098,
											"name": "PUSH",
											"source": 11,
											"value": "A0"
										},
										{
											"begin": 2083,
											"end": 2099,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2083,
											"end": 2099,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2076,
											"end": 2141,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 2087,
											"end": 2093,
											"name": "SWAP4",
											"source": 11
										},
										{
											"begin": 1349,
											"end": 2172,
											"name": "SWAP3",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 1349,
											"end": 2172,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 2177,
											"end": 2371,
											"name": "tag",
											"source": 11,
											"value": "95"
										},
										{
											"begin": 2177,
											"end": 2371,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2247,
											"end": 2253,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 2300,
											"end": 2302,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 2288,
											"end": 2297,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2279,
											"end": 2286,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 2275,
											"end": 2298,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 2271,
											"end": 2303,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 2268,
											"end": 2270,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 2268,
											"end": 2270,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "192"
										},
										{
											"begin": 2268,
											"end": 2270,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 2321,
											"end": 2327,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 2313,
											"end": 2319,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 2306,
											"end": 2328,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 2268,
											"end": 2270,
											"name": "tag",
											"source": 11,
											"value": "192"
										},
										{
											"begin": 2268,
											"end": 2270,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2349,
											"end": 2365,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 2349,
											"end": 2365,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 2258,
											"end": 2371,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2258,
											"end": 2371,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 2376,
											"end": 2570,
											"name": "tag",
											"source": 11,
											"value": "41"
										},
										{
											"begin": 2376,
											"end": 2570,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2434,
											"end": 2440,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 2487,
											"end": 2489,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 2475,
											"end": 2484,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2466,
											"end": 2473,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 2462,
											"end": 2485,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 2458,
											"end": 2490,
											"name": "SLT",
											"source": 11
										},
										{
											"begin": 2455,
											"end": 2457,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 2455,
											"end": 2457,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "194"
										},
										{
											"begin": 2455,
											"end": 2457,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 2508,
											"end": 2514,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 2500,
											"end": 2506,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 2493,
											"end": 2515,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 2455,
											"end": 2457,
											"name": "tag",
											"source": 11,
											"value": "194"
										},
										{
											"begin": 2455,
											"end": 2457,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2536,
											"end": 2564,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "138"
										},
										{
											"begin": 2554,
											"end": 2563,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2536,
											"end": 2564,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "172"
										},
										{
											"begin": 2536,
											"end": 2564,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 2575,
											"end": 2849,
											"name": "tag",
											"source": 11,
											"value": "151"
										},
										{
											"begin": 2575,
											"end": 2849,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2704,
											"end": 2707,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 2742,
											"end": 2748,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 2736,
											"end": 2749,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 2758,
											"end": 2811,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "197"
										},
										{
											"begin": 2804,
											"end": 2810,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 2799,
											"end": 2802,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 2792,
											"end": 2796,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 2784,
											"end": 2790,
											"name": "DUP8",
											"source": 11
										},
										{
											"begin": 2780,
											"end": 2797,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2758,
											"end": 2811,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "198"
										},
										{
											"begin": 2758,
											"end": 2811,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 2758,
											"end": 2811,
											"name": "tag",
											"source": 11,
											"value": "197"
										},
										{
											"begin": 2758,
											"end": 2811,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 2827,
											"end": 2843,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 2827,
											"end": 2843,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 2827,
											"end": 2843,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 2827,
											"end": 2843,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 2827,
											"end": 2843,
											"name": "SWAP3",
											"source": 11
										},
										{
											"begin": 2712,
											"end": 2849,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 2712,
											"end": 2849,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 4692,
											"end": 5075,
											"name": "tag",
											"source": 11,
											"value": "164"
										},
										{
											"begin": 4692,
											"end": 5075,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 4841,
											"end": 4843,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 4830,
											"end": 4839,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 4823,
											"end": 4844,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4804,
											"end": 4808,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 4873,
											"end": 4879,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 4867,
											"end": 4880,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 4916,
											"end": 4922,
											"name": "DUP1",
											"source": 11
										},
										{
											"begin": 4911,
											"end": 4913,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 4900,
											"end": 4909,
											"name": "DUP5",
											"source": 11
										},
										{
											"begin": 4896,
											"end": 4914,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4889,
											"end": 4923,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 4932,
											"end": 4998,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "205"
										},
										{
											"begin": 4991,
											"end": 4997,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 4986,
											"end": 4988,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 4975,
											"end": 4984,
											"name": "DUP6",
											"source": 11
										},
										{
											"begin": 4971,
											"end": 4989,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4966,
											"end": 4968,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 4958,
											"end": 4964,
											"name": "DUP8",
											"source": 11
										},
										{
											"begin": 4954,
											"end": 4969,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 4932,
											"end": 4998,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "198"
										},
										{
											"begin": 4932,
											"end": 4998,
											"name": "JUMP",
											"source": 11,
											"value": "[in]"
										},
										{
											"begin": 4932,
											"end": 4998,
											"name": "tag",
											"source": 11,
											"value": "205"
										},
										{
											"begin": 4932,
											"end": 4998,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 5059,
											"end": 5061,
											"name": "PUSH",
											"source": 11,
											"value": "1F"
										},
										{
											"begin": 5038,
											"end": 5053,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "1F"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "NOT",
											"source": -1
										},
										{
											"begin": 5034,
											"end": 5063,
											"name": "AND",
											"source": 11
										},
										{
											"begin": 5019,
											"end": 5064,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 5019,
											"end": 5064,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 5019,
											"end": 5064,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 5019,
											"end": 5064,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5066,
											"end": 5068,
											"name": "PUSH",
											"source": 11,
											"value": "40"
										},
										{
											"begin": 5015,
											"end": 5069,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 5015,
											"end": 5069,
											"name": "SWAP3",
											"source": 11
										},
										{
											"begin": 4813,
											"end": 5075,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 4813,
											"end": 5075,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 7869,
											"end": 8097,
											"name": "tag",
											"source": 11,
											"value": "84"
										},
										{
											"begin": 7869,
											"end": 8097,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 7909,
											"end": 7913,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 7937,
											"end": 7938,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7934,
											"end": 7935,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 7931,
											"end": 7939,
											"name": "LT",
											"source": 11
										},
										{
											"begin": 7928,
											"end": 7930,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 7928,
											"end": 7930,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "213"
										},
										{
											"begin": 7928,
											"end": 7930,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "4E487B71"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "PUSH",
											"source": -1,
											"value": "E0"
										},
										{
											"begin": -1,
											"end": -1,
											"name": "SHL",
											"source": -1
										},
										{
											"begin": 7962,
											"end": 7996,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 7962,
											"end": 7996,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 8019,
											"end": 8023,
											"name": "PUSH",
											"source": 11,
											"value": "11"
										},
										{
											"begin": 8016,
											"end": 8017,
											"name": "PUSH",
											"source": 11,
											"value": "4"
										},
										{
											"begin": 8009,
											"end": 8024,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 8050,
											"end": 8054,
											"name": "PUSH",
											"source": 11,
											"value": "24"
										},
										{
											"begin": 7969,
											"end": 7973,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 8037,
											"end": 8055,
											"name": "REVERT",
											"source": 11
										},
										{
											"begin": 7928,
											"end": 7930,
											"name": "tag",
											"source": 11,
											"value": "213"
										},
										{
											"begin": 7928,
											"end": 7930,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 8082,
											"end": 8091,
											"name": "SUB",
											"source": 11
										},
										{
											"begin": 8082,
											"end": 8091,
											"name": "SWAP1",
											"source": 11
										},
										{
											"begin": 7918,
											"end": 8097,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										},
										{
											"begin": 8102,
											"end": 8360,
											"name": "tag",
											"source": 11,
											"value": "198"
										},
										{
											"begin": 8102,
											"end": 8360,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 8174,
											"end": 8175,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "tag",
											"source": 11,
											"value": "215"
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 8198,
											"end": 8204,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 8195,
											"end": 8196,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 8192,
											"end": 8205,
											"name": "LT",
											"source": 11
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "217"
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": 8274,
											"end": 8285,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 8274,
											"end": 8285,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 8274,
											"end": 8285,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 8268,
											"end": 8286,
											"name": "MLOAD",
											"source": 11
										},
										{
											"begin": 8255,
											"end": 8266,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 8255,
											"end": 8266,
											"name": "DUP3",
											"source": 11
										},
										{
											"begin": 8255,
											"end": 8266,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 8248,
											"end": 8287,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 8220,
											"end": 8222,
											"name": "PUSH",
											"source": 11,
											"value": "20"
										},
										{
											"begin": 8213,
											"end": 8223,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "215"
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "JUMP",
											"source": 11
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "tag",
											"source": 11,
											"value": "217"
										},
										{
											"begin": 8184,
											"end": 8297,
											"name": "JUMPDEST",
											"source": 11
										},
										{
											"begin": 8315,
											"end": 8321,
											"name": "DUP4",
											"source": 11
										},
										{
											"begin": 8312,
											"end": 8313,
											"name": "DUP2",
											"source": 11
										},
										{
											"begin": 8309,
											"end": 8322,
											"name": "GT",
											"source": 11
										},
										{
											"begin": 8306,
											"end": 8308,
											"name": "ISZERO",
											"source": 11
										},
										{
											"begin": 8306,
											"end": 8308,
											"name": "PUSH [tag]",
											"source": 11,
											"value": "85"
										},
										{
											"begin": 8306,
											"end": 8308,
											"name": "JUMPI",
											"source": 11
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": -1,
											"end": -1,
											"name": "POP",
											"source": -1
										},
										{
											"begin": 8350,
											"end": 8351,
											"name": "PUSH",
											"source": 11,
											"value": "0"
										},
										{
											"begin": 8332,
											"end": 8348,
											"name": "SWAP2",
											"source": 11
										},
										{
											"begin": 8332,
											"end": 8348,
											"name": "ADD",
											"source": 11
										},
										{
											"begin": 8325,
											"end": 8352,
											"name": "MSTORE",
											"source": 11
										},
										{
											"begin": 8155,
											"end": 8360,
											"name": "JUMP",
											"source": 11,
											"value": "[out]"
										}
									]
								}
							}
						},
						"methodIdentifiers": {
							"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))": "5277cbc7",
							"initializeCBridge(address)": "1124bcf9",
							"updateCBridgeAddress(address)": "dae03389"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CannotBridgeToSameNetwork\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NativeValueWithERC\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoTransferToNullAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAddrIsNotAValidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAddrIsNotAnERC20Token\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyError\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"cBridge\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"CBridgeInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"bridgeUsed\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"chainIdTo\",\"type\":\"uint256\"}],\"name\":\"TransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"UpdatedCBridgeAddress\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxSlippage\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"dstChainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct CBridgeFacet.CBridgeData\",\"name\":\"_cBridgeData\",\"type\":\"tuple\"}],\"name\":\"bridgeTokensCBridge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_cBridge\",\"type\":\"address\"}],\"name\":\"initializeCBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"updateCBridgeAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))\":{\"params\":{\"_cBridgeData\":\": provides necessary data for cBridge transfer\"}},\"initializeCBridge(address)\":{\"params\":{\"_cBridge\":\"address of the CBridge router contract\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyError()\":[{\"notice\":\"Errors ///\"}]},\"kind\":\"user\",\"methods\":{\"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))\":{\"notice\":\"initiates token bridging\"},\"initializeCBridge(address)\":{\"notice\":\"initializes state variables for the cBridge facet\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/facets/CBridgeFacet.sol\":\"CBridgeFacet\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"bridges/errors/GenericErrors.sol\":{\"keccak256\":\"0x428005532c28e5c7ab8caf0683f3df926d36d9e4c4d2d84ada50961bbbafc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6c8c43e7ff4ed53a714221d42c73aebc8b9bb617f83c6fa39cb0f84ee85ed48\",\"dweb:/ipfs/QmRHpwL8iZVmykWEzbqhF6Are4duCKy4fp66JQgtrPnoUT\"]},\"bridges/facets/CBridgeFacet.sol\":{\"keccak256\":\"0x985638b2097d8f7e584aa1536fe63f648058ae00190903f72dd6349d3ebcf617\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3ad078e7ccbdd36d6d633fbbd8c0cbfa5ed19b3d855485957ac96c016d7a343\",\"dweb:/ipfs/QmdttGAaB4TEzvpTjXnW2ryb6vRY43iYES313d9o86B6wL\"]},\"bridges/helpers/ReentrancyGuard.sol\":{\"keccak256\":\"0x63437a01c734b65679c405ae011ea5290a5a1c220c8b9854319b2595d3ac02d2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4d2026bf9202befef764f0512b9cb1071e5b107b1b78de5987324fb783bfe7ce\",\"dweb:/ipfs/QmceFBuJ3hM7KwA195vxXkTcZVvZd27NvFWnmCyLzo5Rwg\"]},\"bridges/interfaces/ICBridge.sol\":{\"keccak256\":\"0x1d9e1f4ef38e6d8f810869d4e4126af4d3c5b70cf23ae0f61abb63151ef1c43c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e9255411a81a5fdd37caa1707e3888551cd9b5bbb6133c500a17f06856cb05f\",\"dweb:/ipfs/QmTPvY9kQxA6PLXz4zRpqqP9BVgGjLkKGLer3VU7v833rF\"]},\"bridges/interfaces/IDiamondCut.sol\":{\"keccak256\":\"0xaf48c483d94cb8dfb055c3d55d353619dbaecad1ccb1244457eac2b6e4ca83fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fe238728d20ecf3b03d34e113a5e969efee9b8bb11afad85bf7547fa3991556\",\"dweb:/ipfs/QmPWxemtzVure1XRJHzYDWQmJJoFfXwcooKUndVqBAAWgm\"]},\"bridges/libs/LibAsset.sol\":{\"keccak256\":\"0x35924399a060d86e97962eee65bc86a7f46a78e6c43d2ab342f9d2d400948666\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e5a16cc175256e3252c326280b96610a21efb16cf1b30599b0979f65277b71bc\",\"dweb:/ipfs/QmQ2WSHaTxfsQRnft5VzY54Zv9nReejXKP7FzKLjaVFBap\"]},\"bridges/libs/LibDiamond.sol\":{\"keccak256\":\"0x6b8a56169bf9dc723e535e6cdfa2e087f84dbbec2b236cf13944053382085b99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e51855fed0ed21ea2e8a9e36ea0c495a48ec597e3ec99ed97dde952ed855d20\",\"dweb:/ipfs/QmSVWvdWFxaBhw9gQS5f15sJHsB4RmnCJ1iff19VyC5gSo\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"errors": {
							"ReentrancyError()": [
								{
									"notice": "Errors ///"
								}
							]
						},
						"kind": "user",
						"methods": {
							"bridgeTokensCBridge((uint32,uint64,uint64,uint256,address,address))": {
								"notice": "initiates token bridging"
							},
							"initializeCBridge(address)": {
								"notice": "initializes state variables for the cBridge facet"
							}
						},
						"version": 1
					}
				}
			},
			"bridges/helpers/ReentrancyGuard.sol": {
				"ReentrancyGuard": {
					"abi": [
						{
							"inputs": [],
							"name": "ReentrancyError",
							"type": "error"
						}
					],
					"devdoc": {
						"author": "LI.FI (https://li.fi)",
						"kind": "dev",
						"methods": {},
						"title": "Reentrancy Guard",
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyError\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"LI.FI (https://li.fi)\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Reentrancy Guard\",\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyError()\":[{\"notice\":\"Errors ///\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Abstract contract to provide protection against reentrancy\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/helpers/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/helpers/ReentrancyGuard.sol\":{\"keccak256\":\"0x63437a01c734b65679c405ae011ea5290a5a1c220c8b9854319b2595d3ac02d2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4d2026bf9202befef764f0512b9cb1071e5b107b1b78de5987324fb783bfe7ce\",\"dweb:/ipfs/QmceFBuJ3hM7KwA195vxXkTcZVvZd27NvFWnmCyLzo5Rwg\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"errors": {
							"ReentrancyError()": [
								{
									"notice": "Errors ///"
								}
							]
						},
						"kind": "user",
						"methods": {},
						"notice": "Abstract contract to provide protection against reentrancy",
						"version": 1
					}
				}
			},
			"bridges/interfaces/ICBridge.sol": {
				"ICBridge": {
					"abi": [
						{
							"inputs": [
								{
									"internalType": "bytes",
									"name": "_relayRequest",
									"type": "bytes"
								},
								{
									"internalType": "bytes[]",
									"name": "_sigs",
									"type": "bytes[]"
								},
								{
									"internalType": "address[]",
									"name": "_signers",
									"type": "address[]"
								},
								{
									"internalType": "uint256[]",
									"name": "_powers",
									"type": "uint256[]"
								}
							],
							"name": "relay",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_receiver",
									"type": "address"
								},
								{
									"internalType": "address",
									"name": "_token",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_amount",
									"type": "uint256"
								},
								{
									"internalType": "uint64",
									"name": "_dstChinId",
									"type": "uint64"
								},
								{
									"internalType": "uint64",
									"name": "_nonce",
									"type": "uint64"
								},
								{
									"internalType": "uint32",
									"name": "_maxSlippage",
									"type": "uint32"
								}
							],
							"name": "send",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						},
						{
							"inputs": [
								{
									"internalType": "address",
									"name": "_receiver",
									"type": "address"
								},
								{
									"internalType": "uint256",
									"name": "_amount",
									"type": "uint256"
								},
								{
									"internalType": "uint64",
									"name": "_dstChinId",
									"type": "uint64"
								},
								{
									"internalType": "uint64",
									"name": "_nonce",
									"type": "uint64"
								},
								{
									"internalType": "uint32",
									"name": "_maxSlippage",
									"type": "uint32"
								}
							],
							"name": "sendNative",
							"outputs": [],
							"stateMutability": "payable",
							"type": "function"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"relay(bytes,bytes[],address[],uint256[])": "cdd1b25d",
							"send(address,address,uint256,uint64,uint64,uint32)": "a5977fbb",
							"sendNative(address,uint256,uint64,uint64,uint32)": "3f2e5fc3"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_relayRequest\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"_sigs\",\"type\":\"bytes[]\"},{\"internalType\":\"address[]\",\"name\":\"_signers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_powers\",\"type\":\"uint256[]\"}],\"name\":\"relay\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_dstChinId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"_maxSlippage\",\"type\":\"uint32\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_dstChinId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"_maxSlippage\",\"type\":\"uint32\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/interfaces/ICBridge.sol\":\"ICBridge\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/interfaces/ICBridge.sol\":{\"keccak256\":\"0x1d9e1f4ef38e6d8f810869d4e4126af4d3c5b70cf23ae0f61abb63151ef1c43c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e9255411a81a5fdd37caa1707e3888551cd9b5bbb6133c500a17f06856cb05f\",\"dweb:/ipfs/QmTPvY9kQxA6PLXz4zRpqqP9BVgGjLkKGLer3VU7v833rF\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			},
			"bridges/interfaces/IDiamondCut.sol": {
				"IDiamondCut": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"indexed": false,
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "DiamondCut",
							"type": "event"
						},
						{
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "diamondCut",
							"outputs": [],
							"stateMutability": "nonpayable",
							"type": "function"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": {
								"params": {
									"_calldata": "A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init",
									"_diamondCut": "Contains the facet addresses and function selectors",
									"_init": "The address of the contract or facet to execute _calldata"
								}
							}
						},
						"version": 1
					},
					"evm": {
						"assembly": "",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "",
							"opcodes": "",
							"sourceMap": ""
						},
						"gasEstimates": null,
						"legacyAssembly": null,
						"methodIdentifiers": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": "1f931c1c"
						}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments                  _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute         a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/interfaces/IDiamondCut.sol\":\"IDiamondCut\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/interfaces/IDiamondCut.sol\":{\"keccak256\":\"0xaf48c483d94cb8dfb055c3d55d353619dbaecad1ccb1244457eac2b6e4ca83fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fe238728d20ecf3b03d34e113a5e969efee9b8bb11afad85bf7547fa3991556\",\"dweb:/ipfs/QmPWxemtzVure1XRJHzYDWQmJJoFfXwcooKUndVqBAAWgm\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {
							"diamondCut((address,uint8,bytes4[])[],address,bytes)": {
								"notice": "Add/replace/remove any number of functions and optionally execute         a function with delegatecall"
							}
						},
						"version": 1
					}
				}
			},
			"bridges/libs/LibAsset.sol": {
				"LibAsset": {
					"abi": [],
					"devdoc": {
						"author": "Connext <support@connext.network>",
						"kind": "dev",
						"methods": {},
						"stateVariables": {
							"NATIVE_ASSETID": {
								"details": "All native assets use the empty address for their asset id      by convention"
							}
						},
						"title": "LibAsset",
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"bridges/libs/LibAsset.sol\":680:6528  library LibAsset {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, shl(0xe0, 0x4e487b71))\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"bridges/libs/LibAsset.sol\":680:6528  library LibAsset {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa2646970667358221220346b39c07cd67ceabeaa2a5dc7b41c2a9c8967e8fcfc0871d1e342e9f3b3808164736f6c63430008040033\n}\n",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220346b39c07cd67ceabeaa2a5dc7b41c2a9c8967e8fcfc0871d1e342e9f3b3808164736f6c63430008040033",
							"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE PUSH12 0x39C07CD67CEABEAA2A5DC7B4 SHR 0x2A SWAP13 DUP10 PUSH8 0xE8FCFC0871D1E342 0xE9 RETURN 0xB3 DUP1 DUP2 PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "680:5848:9:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;680:5848:9;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220346b39c07cd67ceabeaa2a5dc7b41c2a9c8967e8fcfc0871d1e342e9f3b3808164736f6c63430008040033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE PUSH12 0x39C07CD67CEABEAA2A5DC7B4 SHR 0x2A SWAP13 DUP10 PUSH8 0xE8FCFC0871D1E342 0xE9 RETURN 0xB3 DUP1 DUP2 PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "680:5848:9:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "103",
								"totalCost": "17303"
							},
							"internal": {
								"depositAsset(address,uint256)": "infinite",
								"depositAsset(address,uint256,bool)": "infinite",
								"getOwnBalance(address)": "infinite",
								"isContract(address)": "infinite",
								"isNativeAsset(address)": "infinite",
								"maxApproveERC20(contract IERC20,address,uint256)": "infinite",
								"transferAsset(address,address payable,uint256)": "infinite",
								"transferERC20(address,address,uint256)": "infinite",
								"transferFromERC20(address,address,address,uint256)": "infinite",
								"transferNativeAsset(address payable,uint256)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH #[$]",
									"source": 9,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH [$]",
									"source": 9,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "B"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP3",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP3",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP3",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "CODECOPY",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP1",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "MLOAD",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "0"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "BYTE",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "73"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "EQ",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH [tag]",
									"source": 9,
									"value": "1"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "JUMPI",
									"source": 9
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "4E487B71"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "E0"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "SHL",
									"source": -1
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "0"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "MSTORE",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "0"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "4"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "MSTORE",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "24"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "0"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "REVERT",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "tag",
									"source": 9,
									"value": "1"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "JUMPDEST",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "ADDRESS",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "0"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "MSTORE",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "PUSH",
									"source": 9,
									"value": "73"
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP2",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "MSTORE8",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP3",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "DUP2",
									"source": 9
								},
								{
									"begin": 680,
									"end": 6528,
									"name": "RETURN",
									"source": 9
								}
							],
							".data": {
								"0": {
									".auxdata": "a2646970667358221220346b39c07cd67ceabeaa2a5dc7b41c2a9c8967e8fcfc0871d1e342e9f3b3808164736f6c63430008040033",
									".code": [
										{
											"begin": 680,
											"end": 6528,
											"name": "PUSHDEPLOYADDRESS",
											"source": 9
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "ADDRESS",
											"source": 9
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "EQ",
											"source": 9
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "PUSH",
											"source": 9,
											"value": "80"
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "PUSH",
											"source": 9,
											"value": "40"
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "MSTORE",
											"source": 9
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "PUSH",
											"source": 9,
											"value": "0"
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "DUP1",
											"source": 9
										},
										{
											"begin": 680,
											"end": 6528,
											"name": "REVERT",
											"source": 9
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"NATIVE_ASSETID\":{\"details\":\"All native assets use the empty address for their asset id      by convention\"}},\"title\":\"LibAsset\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains helpers for dealing with onchain transfers         of assets, including accounting for the native asset `assetId`         conventions and any noncompliant ERC20 transfers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/libs/LibAsset.sol\":\"LibAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95\",\"dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x032807210d1d7d218963d7355d62e021a84bf1b3339f4f50be2f63b53cccaf29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11756f42121f6541a35a8339ea899ee7514cfaa2e6d740625fcc844419296aa6\",\"dweb:/ipfs/QmekMuk6BY4DAjzeXr4MSbKdgoqqsZnA8JPtuyWc6CwXHf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"bridges/errors/GenericErrors.sol\":{\"keccak256\":\"0x428005532c28e5c7ab8caf0683f3df926d36d9e4c4d2d84ada50961bbbafc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6c8c43e7ff4ed53a714221d42c73aebc8b9bb617f83c6fa39cb0f84ee85ed48\",\"dweb:/ipfs/QmRHpwL8iZVmykWEzbqhF6Are4duCKy4fp66JQgtrPnoUT\"]},\"bridges/libs/LibAsset.sol\":{\"keccak256\":\"0x35924399a060d86e97962eee65bc86a7f46a78e6c43d2ab342f9d2d400948666\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e5a16cc175256e3252c326280b96610a21efb16cf1b30599b0979f65277b71bc\",\"dweb:/ipfs/QmQ2WSHaTxfsQRnft5VzY54Zv9nReejXKP7FzKLjaVFBap\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"notice": "This library contains helpers for dealing with onchain transfers         of assets, including accounting for the native asset `assetId`         conventions and any noncompliant ERC20 transfers",
						"version": 1
					}
				}
			},
			"bridges/libs/LibDiamond.sol": {
				"LibDiamond": {
					"abi": [
						{
							"anonymous": false,
							"inputs": [
								{
									"components": [
										{
											"internalType": "address",
											"name": "facetAddress",
											"type": "address"
										},
										{
											"internalType": "enum IDiamondCut.FacetCutAction",
											"name": "action",
											"type": "uint8"
										},
										{
											"internalType": "bytes4[]",
											"name": "functionSelectors",
											"type": "bytes4[]"
										}
									],
									"indexed": false,
									"internalType": "struct IDiamondCut.FacetCut[]",
									"name": "_diamondCut",
									"type": "tuple[]"
								},
								{
									"indexed": false,
									"internalType": "address",
									"name": "_init",
									"type": "address"
								},
								{
									"indexed": false,
									"internalType": "bytes",
									"name": "_calldata",
									"type": "bytes"
								}
							],
							"name": "DiamondCut",
							"type": "event"
						},
						{
							"anonymous": false,
							"inputs": [
								{
									"indexed": true,
									"internalType": "address",
									"name": "previousOwner",
									"type": "address"
								},
								{
									"indexed": true,
									"internalType": "address",
									"name": "newOwner",
									"type": "address"
								}
							],
							"name": "OwnershipTransferred",
							"type": "event"
						}
					],
					"devdoc": {
						"kind": "dev",
						"methods": {},
						"version": 1
					},
					"evm": {
						"assembly": "    /* \"bridges/libs/LibDiamond.sol\":116:12272  library LibDiamond {... */\n  dataSize(sub_0)\n  dataOffset(sub_0)\n  0x0b\n  dup3\n  dup3\n  dup3\n  codecopy\n  dup1\n  mload\n  0x00\n  byte\n  0x73\n  eq\n  tag_1\n  jumpi\n  mstore(0x00, shl(0xe0, 0x4e487b71))\n  mstore(0x04, 0x00)\n  revert(0x00, 0x24)\ntag_1:\n  mstore(0x00, address)\n  0x73\n  dup2\n  mstore8\n  dup3\n  dup2\n  return\nstop\n\nsub_0: assembly {\n        /* \"bridges/libs/LibDiamond.sol\":116:12272  library LibDiamond {... */\n      eq(address, deployTimeAddress())\n      mstore(0x40, 0x80)\n      0x00\n      dup1\n      revert\n\n    auxdata: 0xa26469706673582212203160b4796f410ce9814e815c2473ab3006d07d89d3efea481e555cc31df081ff64736f6c63430008040033\n}\n",
						"bytecode": {
							"generatedSources": [],
							"linkReferences": {},
							"object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203160b4796f410ce9814e815c2473ab3006d07d89d3efea481e555cc31df081ff64736f6c63430008040033",
							"opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE PUSH1 0xB4 PUSH26 0x6F410CE9814E815C2473AB3006D07D89D3EFEA481E555CC31DF0 DUP2 SELFDESTRUCT PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "116:12156:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;116:12156:10;;;;;;;;;;;;;;;;;"
						},
						"deployedBytecode": {
							"generatedSources": [],
							"immutableReferences": {},
							"linkReferences": {},
							"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203160b4796f410ce9814e815c2473ab3006d07d89d3efea481e555cc31df081ff64736f6c63430008040033",
							"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE PUSH1 0xB4 PUSH26 0x6F410CE9814E815C2473AB3006D07D89D3EFEA481E555CC31DF0 DUP2 SELFDESTRUCT PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
							"sourceMap": "116:12156:10:-:0;;;;;;;;"
						},
						"gasEstimates": {
							"creation": {
								"codeDepositCost": "17200",
								"executionCost": "103",
								"totalCost": "17303"
							},
							"internal": {
								"addFacet(struct LibDiamond.DiamondStorage storage pointer,address)": "infinite",
								"addFunction(struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)": "infinite",
								"addFunctions(address,bytes4[] memory)": "infinite",
								"contractOwner()": "infinite",
								"diamondCut(struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)": "infinite",
								"diamondStorage()": "infinite",
								"enforceHasContractCode(address,string memory)": "infinite",
								"enforceIsContractOwner()": "infinite",
								"initializeDiamondCut(address,bytes memory)": "infinite",
								"removeFunction(struct LibDiamond.DiamondStorage storage pointer,address,bytes4)": "infinite",
								"removeFunctions(address,bytes4[] memory)": "infinite",
								"replaceFunctions(address,bytes4[] memory)": "infinite",
								"setContractOwner(address)": "infinite"
							}
						},
						"legacyAssembly": {
							".code": [
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH #[$]",
									"source": 10,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH [$]",
									"source": 10,
									"value": "0000000000000000000000000000000000000000000000000000000000000000"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "B"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP3",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP3",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP3",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "CODECOPY",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP1",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "MLOAD",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "0"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "BYTE",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "73"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "EQ",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH [tag]",
									"source": 10,
									"value": "1"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "JUMPI",
									"source": 10
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "4E487B71"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "PUSH",
									"source": -1,
									"value": "E0"
								},
								{
									"begin": -1,
									"end": -1,
									"name": "SHL",
									"source": -1
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "0"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "MSTORE",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "0"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "4"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "MSTORE",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "24"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "0"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "REVERT",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "tag",
									"source": 10,
									"value": "1"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "JUMPDEST",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "ADDRESS",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "0"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "MSTORE",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "PUSH",
									"source": 10,
									"value": "73"
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP2",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "MSTORE8",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP3",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "DUP2",
									"source": 10
								},
								{
									"begin": 116,
									"end": 12272,
									"name": "RETURN",
									"source": 10
								}
							],
							".data": {
								"0": {
									".auxdata": "a26469706673582212203160b4796f410ce9814e815c2473ab3006d07d89d3efea481e555cc31df081ff64736f6c63430008040033",
									".code": [
										{
											"begin": 116,
											"end": 12272,
											"name": "PUSHDEPLOYADDRESS",
											"source": 10
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "ADDRESS",
											"source": 10
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "EQ",
											"source": 10
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "PUSH",
											"source": 10,
											"value": "80"
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "PUSH",
											"source": 10,
											"value": "40"
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "MSTORE",
											"source": 10
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "PUSH",
											"source": 10,
											"value": "0"
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "DUP1",
											"source": 10
										},
										{
											"begin": 116,
											"end": 12272,
											"name": "REVERT",
											"source": 10
										}
									]
								}
							}
						},
						"methodIdentifiers": {}
					},
					"metadata": "{\"compiler\":{\"version\":\"0.8.4+commit.c7e474f2\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"bridges/libs/LibDiamond.sol\":\"LibDiamond\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"bridges/interfaces/IDiamondCut.sol\":{\"keccak256\":\"0xaf48c483d94cb8dfb055c3d55d353619dbaecad1ccb1244457eac2b6e4ca83fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5fe238728d20ecf3b03d34e113a5e969efee9b8bb11afad85bf7547fa3991556\",\"dweb:/ipfs/QmPWxemtzVure1XRJHzYDWQmJJoFfXwcooKUndVqBAAWgm\"]},\"bridges/libs/LibDiamond.sol\":{\"keccak256\":\"0x6b8a56169bf9dc723e535e6cdfa2e087f84dbbec2b236cf13944053382085b99\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e51855fed0ed21ea2e8a9e36ea0c495a48ec597e3ec99ed97dde952ed855d20\",\"dweb:/ipfs/QmSVWvdWFxaBhw9gQS5f15sJHsB4RmnCJ1iff19VyC5gSo\"]}},\"version\":1}",
					"storageLayout": {
						"storage": [],
						"types": null
					},
					"userdoc": {
						"kind": "user",
						"methods": {},
						"version": 1
					}
				}
			}
		},
		"sources": {
			"@openzeppelin/contracts/token/ERC20/IERC20.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
					"exportedSymbols": {
						"IERC20": [
							77
						]
					},
					"id": 78,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "106:23:0"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 2,
								"nodeType": "StructuredDocumentation",
								"src": "131:70:0",
								"text": " @dev Interface of the ERC20 standard as defined in the EIP."
							},
							"fullyImplemented": false,
							"id": 77,
							"linearizedBaseContracts": [
								77
							],
							"name": "IERC20",
							"nameLocation": "212:6:0",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"anonymous": false,
									"documentation": {
										"id": 3,
										"nodeType": "StructuredDocumentation",
										"src": "225:158:0",
										"text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."
									},
									"id": 11,
									"name": "Transfer",
									"nameLocation": "394:8:0",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 10,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 5,
												"indexed": true,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "419:4:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "403:20:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 4,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "403:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 7,
												"indexed": true,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "441:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "425:18:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 6,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "425:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 9,
												"indexed": false,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "453:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 11,
												"src": "445:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 8,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "445:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "402:57:0"
									},
									"src": "388:72:0"
								},
								{
									"anonymous": false,
									"documentation": {
										"id": 12,
										"nodeType": "StructuredDocumentation",
										"src": "466:148:0",
										"text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."
									},
									"id": 20,
									"name": "Approval",
									"nameLocation": "625:8:0",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 19,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 14,
												"indexed": true,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "650:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "634:21:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 13,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "634:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 16,
												"indexed": true,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "673:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "657:23:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 15,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "657:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 18,
												"indexed": false,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "690:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 20,
												"src": "682:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 17,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "682:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "633:63:0"
									},
									"src": "619:78:0"
								},
								{
									"documentation": {
										"id": 21,
										"nodeType": "StructuredDocumentation",
										"src": "703:66:0",
										"text": " @dev Returns the amount of tokens in existence."
									},
									"functionSelector": "18160ddd",
									"id": 26,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "totalSupply",
									"nameLocation": "783:11:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 22,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "794:2:0"
									},
									"returnParameters": {
										"id": 25,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 24,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 26,
												"src": "820:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 23,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "820:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "819:9:0"
									},
									"scope": 77,
									"src": "774:55:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 27,
										"nodeType": "StructuredDocumentation",
										"src": "835:72:0",
										"text": " @dev Returns the amount of tokens owned by `account`."
									},
									"functionSelector": "70a08231",
									"id": 34,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "balanceOf",
									"nameLocation": "921:9:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 30,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 29,
												"mutability": "mutable",
												"name": "account",
												"nameLocation": "939:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 34,
												"src": "931:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 28,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "931:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "930:17:0"
									},
									"returnParameters": {
										"id": 33,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 32,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 34,
												"src": "971:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 31,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "971:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "970:9:0"
									},
									"scope": 77,
									"src": "912:68:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 35,
										"nodeType": "StructuredDocumentation",
										"src": "986:202:0",
										"text": " @dev Moves `amount` tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
									},
									"functionSelector": "a9059cbb",
									"id": 44,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "transfer",
									"nameLocation": "1202:8:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 40,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 37,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "1219:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1211:10:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 36,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1211:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 39,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1231:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1223:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 38,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1223:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1210:28:0"
									},
									"returnParameters": {
										"id": 43,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 42,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 44,
												"src": "1257:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 41,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1257:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1256:6:0"
									},
									"scope": 77,
									"src": "1193:70:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 45,
										"nodeType": "StructuredDocumentation",
										"src": "1269:264:0",
										"text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."
									},
									"functionSelector": "dd62ed3e",
									"id": 54,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "allowance",
									"nameLocation": "1547:9:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 50,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 47,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1565:5:0",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1557:13:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 46,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1557:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 49,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1580:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1572:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 48,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1572:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1556:32:0"
									},
									"returnParameters": {
										"id": 53,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 52,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 54,
												"src": "1612:7:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 51,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1612:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1611:9:0"
									},
									"scope": 77,
									"src": "1538:83:0",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 55,
										"nodeType": "StructuredDocumentation",
										"src": "1627:642:0",
										"text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."
									},
									"functionSelector": "095ea7b3",
									"id": 64,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "approve",
									"nameLocation": "2283:7:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 60,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 57,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2299:7:0",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2291:15:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 56,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2291:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 59,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2316:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2308:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 58,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2308:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2290:33:0"
									},
									"returnParameters": {
										"id": 63,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 62,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 64,
												"src": "2342:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 61,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "2342:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2341:6:0"
									},
									"scope": 77,
									"src": "2274:74:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 65,
										"nodeType": "StructuredDocumentation",
										"src": "2354:287:0",
										"text": " @dev Moves `amount` tokens from `from` to `to` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."
									},
									"functionSelector": "23b872dd",
									"id": 76,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "transferFrom",
									"nameLocation": "2655:12:0",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 72,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 67,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "2685:4:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2677:12:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 66,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2677:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 69,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "2707:2:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2699:10:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 68,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2699:7:0",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 71,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2727:6:0",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2719:14:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 70,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2719:7:0",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2667:72:0"
									},
									"returnParameters": {
										"id": 75,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 74,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 76,
												"src": "2758:4:0",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 73,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "2758:4:0",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2757:6:0"
									},
									"scope": 77,
									"src": "2646:118:0",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 78,
							"src": "202:2564:0",
							"usedErrors": []
						}
					],
					"src": "106:2661:0"
				},
				"id": 0
			},
			"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
					"exportedSymbols": {
						"IERC20Permit": [
							113
						]
					},
					"id": 114,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 79,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "114:23:1"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"documentation": {
								"id": 80,
								"nodeType": "StructuredDocumentation",
								"src": "139:480:1",
								"text": " @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all."
							},
							"fullyImplemented": false,
							"id": 113,
							"linearizedBaseContracts": [
								113
							],
							"name": "IERC20Permit",
							"nameLocation": "630:12:1",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"documentation": {
										"id": 81,
										"nodeType": "StructuredDocumentation",
										"src": "649:792:1",
										"text": " @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section]."
									},
									"functionSelector": "d505accf",
									"id": 98,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "permit",
									"nameLocation": "1455:6:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 96,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 83,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1479:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1471:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 82,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1471:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 85,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1502:7:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1494:15:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 84,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1494:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 87,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1527:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1519:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 86,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1519:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 89,
												"mutability": "mutable",
												"name": "deadline",
												"nameLocation": "1550:8:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1542:16:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 88,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1542:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 91,
												"mutability": "mutable",
												"name": "v",
												"nameLocation": "1574:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1568:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 90,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "1568:5:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 93,
												"mutability": "mutable",
												"name": "r",
												"nameLocation": "1593:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1585:9:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 92,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "1585:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 95,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "1612:1:1",
												"nodeType": "VariableDeclaration",
												"scope": 98,
												"src": "1604:9:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 94,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "1604:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1461:158:1"
									},
									"returnParameters": {
										"id": 97,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1628:0:1"
									},
									"scope": 113,
									"src": "1446:183:1",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 99,
										"nodeType": "StructuredDocumentation",
										"src": "1635:294:1",
										"text": " @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."
									},
									"functionSelector": "7ecebe00",
									"id": 106,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "nonces",
									"nameLocation": "1943:6:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 102,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 101,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "1958:5:1",
												"nodeType": "VariableDeclaration",
												"scope": 106,
												"src": "1950:13:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 100,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1950:7:1",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1949:15:1"
									},
									"returnParameters": {
										"id": 105,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 104,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 106,
												"src": "1988:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 103,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1988:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1987:9:1"
									},
									"scope": 113,
									"src": "1934:63:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								},
								{
									"documentation": {
										"id": 107,
										"nodeType": "StructuredDocumentation",
										"src": "2003:128:1",
										"text": " @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."
									},
									"functionSelector": "3644e515",
									"id": 112,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "DOMAIN_SEPARATOR",
									"nameLocation": "2198:16:1",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 108,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2214:2:1"
									},
									"returnParameters": {
										"id": 111,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 110,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 112,
												"src": "2240:7:1",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 109,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "2240:7:1",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2239:9:1"
									},
									"scope": 113,
									"src": "2189:60:1",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 114,
							"src": "620:1631:1",
							"usedErrors": []
						}
					],
					"src": "114:2138:1"
				},
				"id": 1
			},
			"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
					"exportedSymbols": {
						"Address": [
							689
						],
						"IERC20": [
							77
						],
						"IERC20Permit": [
							113
						],
						"SafeERC20": [
							394
						]
					},
					"id": 395,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 115,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".0"
							],
							"nodeType": "PragmaDirective",
							"src": "115:23:2"
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "../IERC20.sol",
							"id": 116,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 78,
							"src": "140:23:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol",
							"file": "../extensions/draft-IERC20Permit.sol",
							"id": 117,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 114,
							"src": "164:46:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/utils/Address.sol",
							"file": "../../../utils/Address.sol",
							"id": 118,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 395,
							"sourceUnit": 690,
							"src": "211:36:2",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 119,
								"nodeType": "StructuredDocumentation",
								"src": "249:457:2",
								"text": " @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."
							},
							"fullyImplemented": true,
							"id": 394,
							"linearizedBaseContracts": [
								394
							],
							"name": "SafeERC20",
							"nameLocation": "715:9:2",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"id": 122,
									"libraryName": {
										"id": 120,
										"name": "Address",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 689,
										"src": "737:7:2"
									},
									"nodeType": "UsingForDirective",
									"src": "731:26:2",
									"typeName": {
										"id": 121,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "749:7:2",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									}
								},
								{
									"body": {
										"id": 144,
										"nodeType": "Block",
										"src": "865:103:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 133,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 125,
															"src": "895:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 136,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 125,
																			"src": "925:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 137,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "transfer",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 44,
																		"src": "925:14:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 138,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "925:23:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 139,
																	"name": "to",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 127,
																	"src": "950:2:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 140,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 129,
																	"src": "954:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																],
																"expression": {
																	"id": 134,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "902:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 135,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "902:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 141,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "902:58:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 132,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "875:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 142,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "875:86:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 143,
												"nodeType": "ExpressionStatement",
												"src": "875:86:2"
											}
										]
									},
									"id": 145,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeTransfer",
									"nameLocation": "772:12:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 130,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 125,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "801:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "794:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 124,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 123,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "794:6:2"
													},
													"referencedDeclaration": 77,
													"src": "794:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 127,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "824:2:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "816:10:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 126,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "816:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 129,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "844:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 145,
												"src": "836:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 128,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "836:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "784:71:2"
									},
									"returnParameters": {
										"id": 131,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "865:0:2"
									},
									"scope": 394,
									"src": "763:205:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 170,
										"nodeType": "Block",
										"src": "1102:113:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 158,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 148,
															"src": "1132:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 161,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 148,
																			"src": "1162:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 162,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "transferFrom",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 76,
																		"src": "1162:18:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,address,uint256) external returns (bool)"
																		}
																	},
																	"id": 163,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "1162:27:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 164,
																	"name": "from",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 150,
																	"src": "1191:4:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 165,
																	"name": "to",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 152,
																	"src": "1197:2:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 166,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 154,
																	"src": "1201:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																],
																"expression": {
																	"id": 159,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "1139:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 160,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "1139:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 167,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "1139:68:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 157,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "1112:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 168,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1112:96:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 169,
												"nodeType": "ExpressionStatement",
												"src": "1112:96:2"
											}
										]
									},
									"id": 171,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeTransferFrom",
									"nameLocation": "983:16:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 155,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 148,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1016:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1009:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 147,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 146,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1009:6:2"
													},
													"referencedDeclaration": 77,
													"src": "1009:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 150,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "1039:4:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1031:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 149,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1031:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 152,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "1061:2:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1053:10:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 151,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1053:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 154,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1081:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 171,
												"src": "1073:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 153,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1073:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "999:93:2"
									},
									"returnParameters": {
										"id": 156,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1102:0:2"
									},
									"scope": 394,
									"src": "974:241:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 214,
										"nodeType": "Block",
										"src": "1581:497:2",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															"id": 198,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"components": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 185,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 183,
																			"name": "value",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 179,
																			"src": "1830:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 184,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "1839:1:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "1830:10:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	}
																],
																"id": 186,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "1829:12:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "||",
															"rightExpression": {
																"components": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 196,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"arguments": [
																				{
																					"arguments": [
																						{
																							"id": 191,
																							"name": "this",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 4294967268,
																							"src": "1870:4:2",
																							"typeDescriptions": {
																								"typeIdentifier": "t_contract$_SafeERC20_$394",
																								"typeString": "library SafeERC20"
																							}
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_contract$_SafeERC20_$394",
																								"typeString": "library SafeERC20"
																							}
																						],
																						"id": 190,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"lValueRequested": false,
																						"nodeType": "ElementaryTypeNameExpression",
																						"src": "1862:7:2",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_address_$",
																							"typeString": "type(address)"
																						},
																						"typeName": {
																							"id": 189,
																							"name": "address",
																							"nodeType": "ElementaryTypeName",
																							"src": "1862:7:2",
																							"typeDescriptions": {}
																						}
																					},
																					"id": 192,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "typeConversion",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "1862:13:2",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"id": 193,
																					"name": "spender",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 177,
																					"src": "1877:7:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				],
																				"expression": {
																					"id": 187,
																					"name": "token",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 175,
																					"src": "1846:5:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_contract$_IERC20_$77",
																						"typeString": "contract IERC20"
																					}
																				},
																				"id": 188,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "allowance",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 54,
																				"src": "1846:15:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																					"typeString": "function (address,address) view external returns (uint256)"
																				}
																			},
																			"id": 194,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "1846:39:2",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 195,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "1889:1:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "1846:44:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	}
																],
																"id": 197,
																"isConstant": false,
																"isInlineArray": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "TupleExpression",
																"src": "1845:46:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"src": "1829:62:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365",
															"id": 199,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1905:56:2",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
																"typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
															},
															"value": "SafeERC20: approve from non-zero to non-zero allowance"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_ef945ddb1bfdc0da870feb4560d868b047642b4ac7f2fb7f8b7c51cb4a411e25",
																"typeString": "literal_string \"SafeERC20: approve from non-zero to non-zero allowance\""
															}
														],
														"id": 182,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "1808:7:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 200,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1808:163:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 201,
												"nodeType": "ExpressionStatement",
												"src": "1808:163:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 203,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 175,
															"src": "2001:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 206,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 175,
																			"src": "2031:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 207,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "approve",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 64,
																		"src": "2031:13:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 208,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "2031:22:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 209,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 177,
																	"src": "2055:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 210,
																	"name": "value",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 179,
																	"src": "2064:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																],
																"expression": {
																	"id": 204,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "2008:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 205,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "2008:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 211,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2008:62:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 202,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "1981:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 212,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1981:90:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 213,
												"nodeType": "ExpressionStatement",
												"src": "1981:90:2"
											}
										]
									},
									"documentation": {
										"id": 172,
										"nodeType": "StructuredDocumentation",
										"src": "1221:249:2",
										"text": " @dev Deprecated. This function has issues similar to the ones found in\n {IERC20-approve}, and its usage is discouraged.\n Whenever possible, use {safeIncreaseAllowance} and\n {safeDecreaseAllowance} instead."
									},
									"id": 215,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeApprove",
									"nameLocation": "1484:11:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 180,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 175,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "1512:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1505:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 174,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 173,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "1505:6:2"
													},
													"referencedDeclaration": 77,
													"src": "1505:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 177,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "1535:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1527:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 176,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1527:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 179,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "1560:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 215,
												"src": "1552:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 178,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1552:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1495:76:2"
									},
									"returnParameters": {
										"id": 181,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1581:0:2"
									},
									"scope": 394,
									"src": "1475:603:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 250,
										"nodeType": "Block",
										"src": "2200:194:2",
										"statements": [
											{
												"assignments": [
													226
												],
												"declarations": [
													{
														"constant": false,
														"id": 226,
														"mutability": "mutable",
														"name": "newAllowance",
														"nameLocation": "2218:12:2",
														"nodeType": "VariableDeclaration",
														"scope": 250,
														"src": "2210:20:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 225,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2210:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 237,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 236,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"arguments": [
															{
																"arguments": [
																	{
																		"id": 231,
																		"name": "this",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967268,
																		"src": "2257:4:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_SafeERC20_$394",
																			"typeString": "library SafeERC20"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_SafeERC20_$394",
																			"typeString": "library SafeERC20"
																		}
																	],
																	"id": 230,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "2249:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 229,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "2249:7:2",
																		"typeDescriptions": {}
																	}
																},
																"id": 232,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "2249:13:2",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															{
																"id": 233,
																"name": "spender",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 220,
																"src": "2264:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															],
															"expression": {
																"id": 227,
																"name": "token",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 218,
																"src": "2233:5:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															"id": 228,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "allowance",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 54,
															"src": "2233:15:2",
															"typeDescriptions": {
																"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																"typeString": "function (address,address) view external returns (uint256)"
															}
														},
														"id": 234,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2233:39:2",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "+",
													"rightExpression": {
														"id": 235,
														"name": "value",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 222,
														"src": "2275:5:2",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2233:47:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2210:70:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 239,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 218,
															"src": "2310:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"arguments": [
																{
																	"expression": {
																		"expression": {
																			"id": 242,
																			"name": "token",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 218,
																			"src": "2340:5:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_IERC20_$77",
																				"typeString": "contract IERC20"
																			}
																		},
																		"id": 243,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "approve",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 64,
																		"src": "2340:13:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																			"typeString": "function (address,uint256) external returns (bool)"
																		}
																	},
																	"id": 244,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "selector",
																	"nodeType": "MemberAccess",
																	"src": "2340:22:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																{
																	"id": 245,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 220,
																	"src": "2364:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 246,
																	"name": "newAllowance",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 226,
																	"src": "2373:12:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																],
																"expression": {
																	"id": 240,
																	"name": "abi",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967295,
																	"src": "2317:3:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_abi",
																		"typeString": "abi"
																	}
																},
																"id": 241,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"memberName": "encodeWithSelector",
																"nodeType": "MemberAccess",
																"src": "2317:22:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																	"typeString": "function (bytes4) pure returns (bytes memory)"
																}
															},
															"id": 247,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2317:69:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 238,
														"name": "_callOptionalReturn",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 393,
														"src": "2290:19:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (contract IERC20,bytes memory)"
														}
													},
													"id": 248,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2290:97:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 249,
												"nodeType": "ExpressionStatement",
												"src": "2290:97:2"
											}
										]
									},
									"id": 251,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeIncreaseAllowance",
									"nameLocation": "2093:21:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 223,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 218,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2131:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2124:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 217,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 216,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "2124:6:2"
													},
													"referencedDeclaration": 77,
													"src": "2124:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 220,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2154:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2146:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 219,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2146:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 222,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2179:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 251,
												"src": "2171:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 221,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2171:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2114:76:2"
									},
									"returnParameters": {
										"id": 224,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2200:0:2"
									},
									"scope": 394,
									"src": "2084:310:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 298,
										"nodeType": "Block",
										"src": "2516:370:2",
										"statements": [
											{
												"id": 297,
												"nodeType": "UncheckedBlock",
												"src": "2526:354:2",
												"statements": [
													{
														"assignments": [
															262
														],
														"declarations": [
															{
																"constant": false,
																"id": 262,
																"mutability": "mutable",
																"name": "oldAllowance",
																"nameLocation": "2558:12:2",
																"nodeType": "VariableDeclaration",
																"scope": 297,
																"src": "2550:20:2",
																"stateVariable": false,
																"storageLocation": "default",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"typeName": {
																	"id": 261,
																	"name": "uint256",
																	"nodeType": "ElementaryTypeName",
																	"src": "2550:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"visibility": "internal"
															}
														],
														"id": 271,
														"initialValue": {
															"arguments": [
																{
																	"arguments": [
																		{
																			"id": 267,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "2597:4:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_SafeERC20_$394",
																				"typeString": "library SafeERC20"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_SafeERC20_$394",
																				"typeString": "library SafeERC20"
																			}
																		],
																		"id": 266,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "2589:7:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 265,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "2589:7:2",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 268,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2589:13:2",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																{
																	"id": 269,
																	"name": "spender",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 256,
																	"src": "2604:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"expression": {
																	"id": 263,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 254,
																	"src": "2573:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																},
																"id": 264,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "allowance",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 54,
																"src": "2573:15:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
																	"typeString": "function (address,address) view external returns (uint256)"
																}
															},
															"id": 270,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2573:39:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "VariableDeclarationStatement",
														"src": "2550:62:2"
													},
													{
														"expression": {
															"arguments": [
																{
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 275,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 273,
																		"name": "oldAllowance",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 262,
																		"src": "2634:12:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": ">=",
																	"rightExpression": {
																		"id": 274,
																		"name": "value",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 258,
																		"src": "2650:5:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"src": "2634:21:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																{
																	"hexValue": "5361666545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
																	"id": 276,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "string",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "2657:43:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
																		"typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
																	},
																	"value": "SafeERC20: decreased allowance below zero"
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	},
																	{
																		"typeIdentifier": "t_stringliteral_2c3af60974a758b7e72e108c9bf0943ecc9e4f2e8af4695da5f52fbf57a63d3a",
																		"typeString": "literal_string \"SafeERC20: decreased allowance below zero\""
																	}
																],
																"id": 272,
																"name": "require",
																"nodeType": "Identifier",
																"overloadedDeclarations": [
																	4294967278,
																	4294967278
																],
																"referencedDeclaration": 4294967278,
																"src": "2626:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																	"typeString": "function (bool,string memory) pure"
																}
															},
															"id": 277,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2626:75:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_tuple$__$",
																"typeString": "tuple()"
															}
														},
														"id": 278,
														"nodeType": "ExpressionStatement",
														"src": "2626:75:2"
													},
													{
														"assignments": [
															280
														],
														"declarations": [
															{
																"constant": false,
																"id": 280,
																"mutability": "mutable",
																"name": "newAllowance",
																"nameLocation": "2723:12:2",
																"nodeType": "VariableDeclaration",
																"scope": 297,
																"src": "2715:20:2",
																"stateVariable": false,
																"storageLocation": "default",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"typeName": {
																	"id": 279,
																	"name": "uint256",
																	"nodeType": "ElementaryTypeName",
																	"src": "2715:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"visibility": "internal"
															}
														],
														"id": 284,
														"initialValue": {
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 283,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 281,
																"name": "oldAllowance",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 262,
																"src": "2738:12:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "-",
															"rightExpression": {
																"id": 282,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 258,
																"src": "2753:5:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "2738:20:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"nodeType": "VariableDeclarationStatement",
														"src": "2715:43:2"
													},
													{
														"expression": {
															"arguments": [
																{
																	"id": 286,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 254,
																	"src": "2792:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																},
																{
																	"arguments": [
																		{
																			"expression": {
																				"expression": {
																					"id": 289,
																					"name": "token",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 254,
																					"src": "2822:5:2",
																					"typeDescriptions": {
																						"typeIdentifier": "t_contract$_IERC20_$77",
																						"typeString": "contract IERC20"
																					}
																				},
																				"id": 290,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "approve",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 64,
																				"src": "2822:13:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
																					"typeString": "function (address,uint256) external returns (bool)"
																				}
																			},
																			"id": 291,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "selector",
																			"nodeType": "MemberAccess",
																			"src": "2822:22:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bytes4",
																				"typeString": "bytes4"
																			}
																		},
																		{
																			"id": 292,
																			"name": "spender",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 256,
																			"src": "2846:7:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		{
																			"id": 293,
																			"name": "newAllowance",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 280,
																			"src": "2855:12:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_bytes4",
																				"typeString": "bytes4"
																			},
																			{
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			},
																			{
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		],
																		"expression": {
																			"id": 287,
																			"name": "abi",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967295,
																			"src": "2799:3:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_magic_abi",
																				"typeString": "abi"
																			}
																		},
																		"id": 288,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"memberName": "encodeWithSelector",
																		"nodeType": "MemberAccess",
																		"src": "2799:22:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
																			"typeString": "function (bytes4) pure returns (bytes memory)"
																		}
																	},
																	"id": 294,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2799:69:2",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	},
																	{
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes memory"
																	}
																],
																"id": 285,
																"name": "_callOptionalReturn",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 393,
																"src": "2772:19:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_bytes_memory_ptr_$returns$__$",
																	"typeString": "function (contract IERC20,bytes memory)"
																}
															},
															"id": 295,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2772:97:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_tuple$__$",
																"typeString": "tuple()"
															}
														},
														"id": 296,
														"nodeType": "ExpressionStatement",
														"src": "2772:97:2"
													}
												]
											}
										]
									},
									"id": 299,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safeDecreaseAllowance",
									"nameLocation": "2409:21:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 259,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 254,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2447:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2440:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 253,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 252,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "2440:6:2"
													},
													"referencedDeclaration": 77,
													"src": "2440:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 256,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2470:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2462:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 255,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2462:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 258,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "2495:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 299,
												"src": "2487:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 257,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2487:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2430:76:2"
									},
									"returnParameters": {
										"id": 260,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2516:0:2"
									},
									"scope": 394,
									"src": "2400:486:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 354,
										"nodeType": "Block",
										"src": "3107:257:2",
										"statements": [
											{
												"assignments": [
													320
												],
												"declarations": [
													{
														"constant": false,
														"id": 320,
														"mutability": "mutable",
														"name": "nonceBefore",
														"nameLocation": "3125:11:2",
														"nodeType": "VariableDeclaration",
														"scope": 354,
														"src": "3117:19:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 319,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "3117:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 325,
												"initialValue": {
													"arguments": [
														{
															"id": 323,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3152:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 321,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3139:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 322,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "nonces",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 106,
														"src": "3139:12:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address) view external returns (uint256)"
														}
													},
													"id": 324,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3139:19:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3117:41:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 329,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3181:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 330,
															"name": "spender",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 306,
															"src": "3188:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 331,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 308,
															"src": "3197:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 332,
															"name": "deadline",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 310,
															"src": "3204:8:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"id": 333,
															"name": "v",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 312,
															"src": "3214:1:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint8",
																"typeString": "uint8"
															}
														},
														{
															"id": 334,
															"name": "r",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 314,
															"src": "3217:1:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														{
															"id": 335,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 316,
															"src": "3220:1:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint8",
																"typeString": "uint8"
															},
															{
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															},
															{
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														],
														"expression": {
															"id": 326,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3168:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 328,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "permit",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 98,
														"src": "3168:12:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
															"typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
														}
													},
													"id": 336,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3168:54:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 337,
												"nodeType": "ExpressionStatement",
												"src": "3168:54:2"
											},
											{
												"assignments": [
													339
												],
												"declarations": [
													{
														"constant": false,
														"id": 339,
														"mutability": "mutable",
														"name": "nonceAfter",
														"nameLocation": "3240:10:2",
														"nodeType": "VariableDeclaration",
														"scope": 354,
														"src": "3232:18:2",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 338,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "3232:7:2",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 344,
												"initialValue": {
													"arguments": [
														{
															"id": 342,
															"name": "owner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 304,
															"src": "3266:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 340,
															"name": "token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 302,
															"src": "3253:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20Permit_$113",
																"typeString": "contract IERC20Permit"
															}
														},
														"id": 341,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "nonces",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 106,
														"src": "3253:12:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address) view external returns (uint256)"
														}
													},
													"id": 343,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3253:19:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3232:40:2"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 350,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 346,
																"name": "nonceAfter",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 339,
																"src": "3290:10:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 349,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 347,
																	"name": "nonceBefore",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 320,
																	"src": "3304:11:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "+",
																"rightExpression": {
																	"hexValue": "31",
																	"id": 348,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "3318:1:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "3304:15:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "3290:29:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "5361666545524332303a207065726d697420646964206e6f742073756363656564",
															"id": 351,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3321:35:2",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d",
																"typeString": "literal_string \"SafeERC20: permit did not succeed\""
															},
															"value": "SafeERC20: permit did not succeed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_cde8e927812a7a656f8f04e89ac4f4113d47940dd2125d11fcb8e0bd36bfc59d",
																"typeString": "literal_string \"SafeERC20: permit did not succeed\""
															}
														],
														"id": 345,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3282:7:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 352,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3282:75:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 353,
												"nodeType": "ExpressionStatement",
												"src": "3282:75:2"
											}
										]
									},
									"id": 355,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "safePermit",
									"nameLocation": "2901:10:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 317,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 302,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "2934:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2921:18:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20Permit_$113",
													"typeString": "contract IERC20Permit"
												},
												"typeName": {
													"id": 301,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 300,
														"name": "IERC20Permit",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 113,
														"src": "2921:12:2"
													},
													"referencedDeclaration": 113,
													"src": "2921:12:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20Permit_$113",
														"typeString": "contract IERC20Permit"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 304,
												"mutability": "mutable",
												"name": "owner",
												"nameLocation": "2957:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2949:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 303,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2949:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 306,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2980:7:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2972:15:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 305,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2972:7:2",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 308,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "3005:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "2997:13:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 307,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2997:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 310,
												"mutability": "mutable",
												"name": "deadline",
												"nameLocation": "3028:8:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3020:16:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 309,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3020:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 312,
												"mutability": "mutable",
												"name": "v",
												"nameLocation": "3052:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3046:7:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint8",
													"typeString": "uint8"
												},
												"typeName": {
													"id": 311,
													"name": "uint8",
													"nodeType": "ElementaryTypeName",
													"src": "3046:5:2",
													"typeDescriptions": {
														"typeIdentifier": "t_uint8",
														"typeString": "uint8"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 314,
												"mutability": "mutable",
												"name": "r",
												"nameLocation": "3071:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3063:9:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 313,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3063:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 316,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "3090:1:2",
												"nodeType": "VariableDeclaration",
												"scope": 355,
												"src": "3082:9:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes32",
													"typeString": "bytes32"
												},
												"typeName": {
													"id": 315,
													"name": "bytes32",
													"nodeType": "ElementaryTypeName",
													"src": "3082:7:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2911:186:2"
									},
									"returnParameters": {
										"id": 318,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3107:0:2"
									},
									"scope": 394,
									"src": "2892:472:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 392,
										"nodeType": "Block",
										"src": "3817:636:2",
										"statements": [
											{
												"assignments": [
													365
												],
												"declarations": [
													{
														"constant": false,
														"id": 365,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "4179:10:2",
														"nodeType": "VariableDeclaration",
														"scope": 392,
														"src": "4166:23:2",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 364,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "4166:5:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 374,
												"initialValue": {
													"arguments": [
														{
															"id": 371,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 361,
															"src": "4220:4:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564",
															"id": 372,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4226:34:2",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
																"typeString": "literal_string \"SafeERC20: low-level call failed\""
															},
															"value": "SafeERC20: low-level call failed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_stringliteral_47fb62c2c272651d2f0f342bac006756b8ba07f21cc5cb87e0fbb9d50c0c585b",
																"typeString": "literal_string \"SafeERC20: low-level call failed\""
															}
														],
														"expression": {
															"arguments": [
																{
																	"id": 368,
																	"name": "token",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 359,
																	"src": "4200:5:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_IERC20_$77",
																		"typeString": "contract IERC20"
																	}
																],
																"id": 367,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "4192:7:2",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 366,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "4192:7:2",
																	"typeDescriptions": {}
																}
															},
															"id": 369,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "4192:14:2",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 370,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "functionCall",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 483,
														"src": "4192:27:2",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
															"typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
														}
													},
													"id": 373,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4192:69:2",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4166:95:2"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 378,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 375,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 365,
															"src": "4275:10:2",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														"id": 376,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "4275:17:2",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 377,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "4295:1:2",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "4275:21:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 391,
												"nodeType": "IfStatement",
												"src": "4271:176:2",
												"trueBody": {
													"id": 390,
													"nodeType": "Block",
													"src": "4298:149:2",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"arguments": [
																			{
																				"id": 382,
																				"name": "returndata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 365,
																				"src": "4370:10:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			{
																				"components": [
																					{
																						"id": 384,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": true,
																						"lValueRequested": false,
																						"nodeType": "ElementaryTypeNameExpression",
																						"src": "4383:4:2",
																						"typeDescriptions": {
																							"typeIdentifier": "t_type$_t_bool_$",
																							"typeString": "type(bool)"
																						},
																						"typeName": {
																							"id": 383,
																							"name": "bool",
																							"nodeType": "ElementaryTypeName",
																							"src": "4383:4:2",
																							"typeDescriptions": {}
																						}
																					}
																				],
																				"id": 385,
																				"isConstant": false,
																				"isInlineArray": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "TupleExpression",
																				"src": "4382:6:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_bool_$",
																					"typeString": "type(bool)"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				},
																				{
																					"typeIdentifier": "t_type$_t_bool_$",
																					"typeString": "type(bool)"
																				}
																			],
																			"expression": {
																				"id": 380,
																				"name": "abi",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4294967295,
																				"src": "4359:3:2",
																				"typeDescriptions": {
																					"typeIdentifier": "t_magic_abi",
																					"typeString": "abi"
																				}
																			},
																			"id": 381,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"memberName": "decode",
																			"nodeType": "MemberAccess",
																			"src": "4359:10:2",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
																				"typeString": "function () pure"
																			}
																		},
																		"id": 386,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "4359:30:2",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564",
																		"id": 387,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4391:44:2",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
																			"typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
																		},
																		"value": "SafeERC20: ERC20 operation did not succeed"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_e11ad79d1e4a7f2e5f376964cb99e8e8f7904e3fc16a109f7a7ecb9aa7956dcd",
																			"typeString": "literal_string \"SafeERC20: ERC20 operation did not succeed\""
																		}
																	],
																	"id": 379,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "4351:7:2",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 388,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4351:85:2",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 389,
															"nodeType": "ExpressionStatement",
															"src": "4351:85:2"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 356,
										"nodeType": "StructuredDocumentation",
										"src": "3370:372:2",
										"text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."
									},
									"id": 393,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_callOptionalReturn",
									"nameLocation": "3756:19:2",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 362,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 359,
												"mutability": "mutable",
												"name": "token",
												"nameLocation": "3783:5:2",
												"nodeType": "VariableDeclaration",
												"scope": 393,
												"src": "3776:12:2",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 358,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 357,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "3776:6:2"
													},
													"referencedDeclaration": 77,
													"src": "3776:6:2",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 361,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3803:4:2",
												"nodeType": "VariableDeclaration",
												"scope": 393,
												"src": "3790:17:2",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 360,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3790:5:2",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3775:33:2"
									},
									"returnParameters": {
										"id": 363,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3817:0:2"
									},
									"scope": 394,
									"src": "3747:706:2",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								}
							],
							"scope": 395,
							"src": "707:3748:2",
							"usedErrors": []
						}
					],
					"src": "115:4341:2"
				},
				"id": 2
			},
			"@openzeppelin/contracts/utils/Address.sol": {
				"ast": {
					"absolutePath": "@openzeppelin/contracts/utils/Address.sol",
					"exportedSymbols": {
						"Address": [
							689
						]
					},
					"id": 690,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 396,
							"literals": [
								"solidity",
								"^",
								"0.8",
								".1"
							],
							"nodeType": "PragmaDirective",
							"src": "101:23:3"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 397,
								"nodeType": "StructuredDocumentation",
								"src": "126:67:3",
								"text": " @dev Collection of functions related to the address type"
							},
							"fullyImplemented": true,
							"id": 689,
							"linearizedBaseContracts": [
								689
							],
							"name": "Address",
							"nameLocation": "202:7:3",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"body": {
										"id": 411,
										"nodeType": "Block",
										"src": "1241:254:3",
										"statements": [
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 409,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"expression": {
																"id": 405,
																"name": "account",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 400,
																"src": "1465:7:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 406,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "code",
															"nodeType": "MemberAccess",
															"src": "1465:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														"id": 407,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "1465:19:3",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 408,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "1487:1:3",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "1465:23:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 404,
												"id": 410,
												"nodeType": "Return",
												"src": "1458:30:3"
											}
										]
									},
									"documentation": {
										"id": 398,
										"nodeType": "StructuredDocumentation",
										"src": "216:954:3",
										"text": " @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n  - an externally-owned account\n  - a contract in construction\n  - an address where a contract will be created\n  - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="
									},
									"id": 412,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "isContract",
									"nameLocation": "1184:10:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 401,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 400,
												"mutability": "mutable",
												"name": "account",
												"nameLocation": "1203:7:3",
												"nodeType": "VariableDeclaration",
												"scope": 412,
												"src": "1195:15:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 399,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1195:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1194:17:3"
									},
									"returnParameters": {
										"id": 404,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 403,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 412,
												"src": "1235:4:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 402,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1235:4:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1234:6:3"
									},
									"scope": 689,
									"src": "1175:320:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 445,
										"nodeType": "Block",
										"src": "2483:241:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 427,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 423,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "2509:4:3",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		],
																		"id": 422,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "2501:7:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 421,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "2501:7:3",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 424,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2501:13:3",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"id": 425,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"src": "2501:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"id": 426,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 417,
																"src": "2526:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "2501:31:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20696e73756666696369656e742062616c616e6365",
															"id": 428,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2534:31:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
																"typeString": "literal_string \"Address: insufficient balance\""
															},
															"value": "Address: insufficient balance"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9",
																"typeString": "literal_string \"Address: insufficient balance\""
															}
														],
														"id": 420,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2493:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 429,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2493:73:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 430,
												"nodeType": "ExpressionStatement",
												"src": "2493:73:3"
											},
											{
												"assignments": [
													432,
													null
												],
												"declarations": [
													{
														"constant": false,
														"id": 432,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "2583:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 445,
														"src": "2578:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 431,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "2578:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													null
												],
												"id": 439,
												"initialValue": {
													"arguments": [
														{
															"hexValue": "",
															"id": 437,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2626:2:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																"typeString": "literal_string \"\""
															},
															"value": ""
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																"typeString": "literal_string \"\""
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																	"typeString": "literal_string \"\""
																}
															],
															"expression": {
																"id": 433,
																"name": "recipient",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 415,
																"src": "2596:9:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																}
															},
															"id": 434,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "call",
															"nodeType": "MemberAccess",
															"src": "2596:14:3",
															"typeDescriptions": {
																"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
																"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
															}
														},
														"id": 436,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"names": [
															"value"
														],
														"nodeType": "FunctionCallOptions",
														"options": [
															{
																"id": 435,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 417,
																"src": "2618:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"src": "2596:29:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
															"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
														}
													},
													"id": 438,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2596:33:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2577:52:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 441,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 432,
															"src": "2647:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564",
															"id": 442,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2656:60:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
																"typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
															},
															"value": "Address: unable to send value, recipient may have reverted"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae",
																"typeString": "literal_string \"Address: unable to send value, recipient may have reverted\""
															}
														],
														"id": 440,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2639:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 443,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2639:78:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 444,
												"nodeType": "ExpressionStatement",
												"src": "2639:78:3"
											}
										]
									},
									"documentation": {
										"id": 413,
										"nodeType": "StructuredDocumentation",
										"src": "1501:906:3",
										"text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
									},
									"id": 446,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "sendValue",
									"nameLocation": "2421:9:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 418,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 415,
												"mutability": "mutable",
												"name": "recipient",
												"nameLocation": "2447:9:3",
												"nodeType": "VariableDeclaration",
												"scope": 446,
												"src": "2431:25:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												"typeName": {
													"id": 414,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2431:15:3",
													"stateMutability": "payable",
													"typeDescriptions": {
														"typeIdentifier": "t_address_payable",
														"typeString": "address payable"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 417,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2466:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 446,
												"src": "2458:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 416,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2458:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2430:43:3"
									},
									"returnParameters": {
										"id": 419,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2483:0:3"
									},
									"scope": 689,
									"src": "2412:312:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 462,
										"nodeType": "Block",
										"src": "3555:84:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 457,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 449,
															"src": "3585:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 458,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 451,
															"src": "3593:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564",
															"id": 459,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3599:32:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
																"typeString": "literal_string \"Address: low-level call failed\""
															},
															"value": "Address: low-level call failed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df",
																"typeString": "literal_string \"Address: low-level call failed\""
															}
														],
														"id": 456,
														"name": "functionCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															463,
															483
														],
														"referencedDeclaration": 483,
														"src": "3572:12:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
														}
													},
													"id": 460,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3572:60:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 455,
												"id": 461,
												"nodeType": "Return",
												"src": "3565:67:3"
											}
										]
									},
									"documentation": {
										"id": 447,
										"nodeType": "StructuredDocumentation",
										"src": "2730:731:3",
										"text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"
									},
									"id": 463,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCall",
									"nameLocation": "3475:12:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 452,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 449,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "3496:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3488:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 448,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3488:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 451,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3517:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3504:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 450,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3504:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3487:35:3"
									},
									"returnParameters": {
										"id": 455,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 454,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 463,
												"src": "3541:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 453,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3541:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3540:14:3"
									},
									"scope": 689,
									"src": "3466:173:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 482,
										"nodeType": "Block",
										"src": "4008:76:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 476,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 466,
															"src": "4047:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 477,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 468,
															"src": "4055:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "30",
															"id": 478,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "number",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4061:1:3",
															"typeDescriptions": {
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															"value": "0"
														},
														{
															"id": 479,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 470,
															"src": "4064:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_rational_0_by_1",
																"typeString": "int_const 0"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 475,
														"name": "functionCallWithValue",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															503,
															553
														],
														"referencedDeclaration": 553,
														"src": "4025:21:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
														}
													},
													"id": 480,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4025:52:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 474,
												"id": 481,
												"nodeType": "Return",
												"src": "4018:59:3"
											}
										]
									},
									"documentation": {
										"id": 464,
										"nodeType": "StructuredDocumentation",
										"src": "3645:211:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
									},
									"id": 483,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCall",
									"nameLocation": "3870:12:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 471,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 466,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "3900:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3892:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 465,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3892:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 468,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "3929:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3916:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 467,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3916:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 470,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "3957:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3943:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 469,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "3943:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3882:93:3"
									},
									"returnParameters": {
										"id": 474,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 473,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 483,
												"src": "3994:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 472,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "3994:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3993:14:3"
									},
									"scope": 689,
									"src": "3861:223:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 502,
										"nodeType": "Block",
										"src": "4589:111:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 496,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 486,
															"src": "4628:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 497,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 488,
															"src": "4636:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 498,
															"name": "value",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 490,
															"src": "4642:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564",
															"id": 499,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4649:43:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
																"typeString": "literal_string \"Address: low-level call with value failed\""
															},
															"value": "Address: low-level call with value failed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc",
																"typeString": "literal_string \"Address: low-level call with value failed\""
															}
														],
														"id": 495,
														"name": "functionCallWithValue",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															503,
															553
														],
														"referencedDeclaration": 553,
														"src": "4606:21:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (address,bytes memory,uint256,string memory) returns (bytes memory)"
														}
													},
													"id": 500,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4606:87:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 494,
												"id": 501,
												"nodeType": "Return",
												"src": "4599:94:3"
											}
										]
									},
									"documentation": {
										"id": 484,
										"nodeType": "StructuredDocumentation",
										"src": "4090:351:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"
									},
									"id": 503,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCallWithValue",
									"nameLocation": "4455:21:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 491,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 486,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "4494:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4486:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 485,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4486:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 488,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "4523:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4510:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 487,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "4510:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 490,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "4545:5:3",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4537:13:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 489,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4537:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4476:80:3"
									},
									"returnParameters": {
										"id": 494,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 493,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 503,
												"src": "4575:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 492,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "4575:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4574:14:3"
									},
									"scope": 689,
									"src": "4446:254:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 552,
										"nodeType": "Block",
										"src": "5127:320:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 524,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"arguments": [
																		{
																			"id": 520,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "5153:4:3",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_Address_$689",
																				"typeString": "library Address"
																			}
																		],
																		"id": 519,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "5145:7:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 518,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "5145:7:3",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 521,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "5145:13:3",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"id": 522,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "balance",
																"nodeType": "MemberAccess",
																"src": "5145:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">=",
															"rightExpression": {
																"id": 523,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 510,
																"src": "5170:5:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"src": "5145:30:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c",
															"id": 525,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5177:40:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
																"typeString": "literal_string \"Address: insufficient balance for call\""
															},
															"value": "Address: insufficient balance for call"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c",
																"typeString": "literal_string \"Address: insufficient balance for call\""
															}
														],
														"id": 517,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5137:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 526,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5137:81:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 527,
												"nodeType": "ExpressionStatement",
												"src": "5137:81:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 530,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 506,
																	"src": "5247:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 529,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "5236:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 531,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "5236:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 532,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5256:31:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
																"typeString": "literal_string \"Address: call to non-contract\""
															},
															"value": "Address: call to non-contract"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad",
																"typeString": "literal_string \"Address: call to non-contract\""
															}
														],
														"id": 528,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5228:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 533,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5228:60:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 534,
												"nodeType": "ExpressionStatement",
												"src": "5228:60:3"
											},
											{
												"assignments": [
													536,
													538
												],
												"declarations": [
													{
														"constant": false,
														"id": 536,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "5305:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 552,
														"src": "5300:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 535,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "5300:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 538,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "5327:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 552,
														"src": "5314:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 537,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "5314:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 545,
												"initialValue": {
													"arguments": [
														{
															"id": 543,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 508,
															"src": "5367:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_bytes_memory_ptr",
																	"typeString": "bytes memory"
																}
															],
															"expression": {
																"id": 539,
																"name": "target",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 506,
																"src": "5341:6:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"id": 540,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "call",
															"nodeType": "MemberAccess",
															"src": "5341:11:3",
															"typeDescriptions": {
																"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
																"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
															}
														},
														"id": 542,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"names": [
															"value"
														],
														"nodeType": "FunctionCallOptions",
														"options": [
															{
																"id": 541,
																"name": "value",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 510,
																"src": "5360:5:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"src": "5341:25:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
															"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
														}
													},
													"id": 544,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5341:31:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "5299:73:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 547,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 536,
															"src": "5406:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 548,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 538,
															"src": "5415:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 549,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 512,
															"src": "5427:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 546,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "5389:16:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
														}
													},
													"id": 550,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5389:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 516,
												"id": 551,
												"nodeType": "Return",
												"src": "5382:58:3"
											}
										]
									},
									"documentation": {
										"id": 504,
										"nodeType": "StructuredDocumentation",
										"src": "4706:237:3",
										"text": " @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"
									},
									"id": 553,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionCallWithValue",
									"nameLocation": "4957:21:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 513,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 506,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "4996:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "4988:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 505,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4988:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 508,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "5025:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5012:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 507,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5012:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 510,
												"mutability": "mutable",
												"name": "value",
												"nameLocation": "5047:5:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5039:13:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 509,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5039:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 512,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "5076:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5062:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 511,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "5062:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4978:116:3"
									},
									"returnParameters": {
										"id": 516,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 515,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 553,
												"src": "5113:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 514,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5113:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5112:14:3"
									},
									"scope": 689,
									"src": "4948:499:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 569,
										"nodeType": "Block",
										"src": "5724:97:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 564,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 556,
															"src": "5760:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 565,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 558,
															"src": "5768:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564",
															"id": 566,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5774:39:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
																"typeString": "literal_string \"Address: low-level static call failed\""
															},
															"value": "Address: low-level static call failed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0",
																"typeString": "literal_string \"Address: low-level static call failed\""
															}
														],
														"id": 563,
														"name": "functionStaticCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															570,
															605
														],
														"referencedDeclaration": 605,
														"src": "5741:18:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (address,bytes memory,string memory) view returns (bytes memory)"
														}
													},
													"id": 567,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5741:73:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 562,
												"id": 568,
												"nodeType": "Return",
												"src": "5734:80:3"
											}
										]
									},
									"documentation": {
										"id": 554,
										"nodeType": "StructuredDocumentation",
										"src": "5453:166:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
									},
									"id": 570,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionStaticCall",
									"nameLocation": "5633:18:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 559,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 556,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "5660:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5652:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 555,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5652:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 558,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "5681:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5668:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 557,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5668:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5651:35:3"
									},
									"returnParameters": {
										"id": 562,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 561,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 570,
												"src": "5710:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 560,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "5710:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5709:14:3"
									},
									"scope": 689,
									"src": "5624:197:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 604,
										"nodeType": "Block",
										"src": "6163:228:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 584,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 573,
																	"src": "6192:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 583,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "6181:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 585,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "6181:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a207374617469632063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 586,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6201:38:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
																"typeString": "literal_string \"Address: static call to non-contract\""
															},
															"value": "Address: static call to non-contract"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_c79cc78e4f16ce3933a42b84c73868f93bb4a59c031a0acf576679de98c608a9",
																"typeString": "literal_string \"Address: static call to non-contract\""
															}
														],
														"id": 582,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6173:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 587,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6173:67:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 588,
												"nodeType": "ExpressionStatement",
												"src": "6173:67:3"
											},
											{
												"assignments": [
													590,
													592
												],
												"declarations": [
													{
														"constant": false,
														"id": 590,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "6257:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 604,
														"src": "6252:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 589,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "6252:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 592,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "6279:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 604,
														"src": "6266:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 591,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "6266:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 597,
												"initialValue": {
													"arguments": [
														{
															"id": 595,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 575,
															"src": "6311:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"expression": {
															"id": 593,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 573,
															"src": "6293:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 594,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "staticcall",
														"nodeType": "MemberAccess",
														"src": "6293:17:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
															"typeString": "function (bytes memory) view returns (bool,bytes memory)"
														}
													},
													"id": 596,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6293:23:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "6251:65:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 599,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 590,
															"src": "6350:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 600,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 592,
															"src": "6359:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 601,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 577,
															"src": "6371:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 598,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "6333:16:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
														}
													},
													"id": 602,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6333:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 581,
												"id": 603,
												"nodeType": "Return",
												"src": "6326:58:3"
											}
										]
									},
									"documentation": {
										"id": 571,
										"nodeType": "StructuredDocumentation",
										"src": "5827:173:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"
									},
									"id": 605,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionStaticCall",
									"nameLocation": "6014:18:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 578,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 573,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "6050:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6042:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 572,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6042:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 575,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "6079:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6066:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 574,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6066:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 577,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "6107:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6093:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 576,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "6093:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6032:93:3"
									},
									"returnParameters": {
										"id": 581,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 580,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 605,
												"src": "6149:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 579,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6149:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6148:14:3"
									},
									"scope": 689,
									"src": "6005:386:3",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 621,
										"nodeType": "Block",
										"src": "6667:101:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 616,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 608,
															"src": "6705:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 617,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 610,
															"src": "6713:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"hexValue": "416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564",
															"id": 618,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6719:41:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
																"typeString": "literal_string \"Address: low-level delegate call failed\""
															},
															"value": "Address: low-level delegate call failed"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_stringliteral_9fdcd12e4b726339b32a442b0a448365d5d85c96b2d2cff917b4f66c63110398",
																"typeString": "literal_string \"Address: low-level delegate call failed\""
															}
														],
														"id": 615,
														"name": "functionDelegateCall",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															622,
															657
														],
														"referencedDeclaration": 657,
														"src": "6684:20:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
														}
													},
													"id": 619,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6684:77:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 614,
												"id": 620,
												"nodeType": "Return",
												"src": "6677:84:3"
											}
										]
									},
									"documentation": {
										"id": 606,
										"nodeType": "StructuredDocumentation",
										"src": "6397:168:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
									},
									"id": 622,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionDelegateCall",
									"nameLocation": "6579:20:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 611,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 608,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "6608:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6600:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 607,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6600:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 610,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "6629:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6616:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 609,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6616:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6599:35:3"
									},
									"returnParameters": {
										"id": 614,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 613,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 622,
												"src": "6653:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 612,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "6653:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6652:14:3"
									},
									"scope": 689,
									"src": "6570:198:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 656,
										"nodeType": "Block",
										"src": "7109:232:3",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 636,
																	"name": "target",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 625,
																	"src": "7138:6:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 635,
																"name": "isContract",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 412,
																"src": "7127:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
																	"typeString": "function (address) view returns (bool)"
																}
															},
															"id": 637,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "7127:18:3",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374",
															"id": 638,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "7147:40:3",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
																"typeString": "literal_string \"Address: delegate call to non-contract\""
															},
															"value": "Address: delegate call to non-contract"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_b94ded0918034cf8f896e19fa3cfdef1188cd569c577264a3622e49152f88520",
																"typeString": "literal_string \"Address: delegate call to non-contract\""
															}
														],
														"id": 634,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "7119:7:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 639,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7119:69:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 640,
												"nodeType": "ExpressionStatement",
												"src": "7119:69:3"
											},
											{
												"assignments": [
													642,
													644
												],
												"declarations": [
													{
														"constant": false,
														"id": 642,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "7205:7:3",
														"nodeType": "VariableDeclaration",
														"scope": 656,
														"src": "7200:12:3",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 641,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "7200:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													{
														"constant": false,
														"id": 644,
														"mutability": "mutable",
														"name": "returndata",
														"nameLocation": "7227:10:3",
														"nodeType": "VariableDeclaration",
														"scope": 656,
														"src": "7214:23:3",
														"stateVariable": false,
														"storageLocation": "memory",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_memory_ptr",
															"typeString": "bytes"
														},
														"typeName": {
															"id": 643,
															"name": "bytes",
															"nodeType": "ElementaryTypeName",
															"src": "7214:5:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_storage_ptr",
																"typeString": "bytes"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 649,
												"initialValue": {
													"arguments": [
														{
															"id": 647,
															"name": "data",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 627,
															"src": "7261:4:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"expression": {
															"id": 645,
															"name": "target",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 625,
															"src": "7241:6:3",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 646,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "delegatecall",
														"nodeType": "MemberAccess",
														"src": "7241:19:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
															"typeString": "function (bytes memory) returns (bool,bytes memory)"
														}
													},
													"id": 648,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7241:25:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "7199:67:3"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 651,
															"name": "success",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 642,
															"src": "7300:7:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 652,
															"name": "returndata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 644,
															"src": "7309:10:3",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														},
														{
															"id": 653,
															"name": "errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 629,
															"src": "7321:12:3",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 650,
														"name": "verifyCallResult",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 688,
														"src": "7283:16:3",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
															"typeString": "function (bool,bytes memory,string memory) pure returns (bytes memory)"
														}
													},
													"id": 654,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7283:51:3",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_memory_ptr",
														"typeString": "bytes memory"
													}
												},
												"functionReturnParameters": 633,
												"id": 655,
												"nodeType": "Return",
												"src": "7276:58:3"
											}
										]
									},
									"documentation": {
										"id": 623,
										"nodeType": "StructuredDocumentation",
										"src": "6774:175:3",
										"text": " @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a delegate call.\n _Available since v3.4._"
									},
									"id": 657,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "functionDelegateCall",
									"nameLocation": "6963:20:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 630,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 625,
												"mutability": "mutable",
												"name": "target",
												"nameLocation": "7001:6:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "6993:14:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 624,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6993:7:3",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 627,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "7030:4:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7017:17:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 626,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7017:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 629,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "7058:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7044:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 628,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "7044:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6983:93:3"
									},
									"returnParameters": {
										"id": 633,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 632,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 657,
												"src": "7095:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 631,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7095:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7094:14:3"
									},
									"scope": 689,
									"src": "6954:387:3",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 687,
										"nodeType": "Block",
										"src": "7721:582:3",
										"statements": [
											{
												"condition": {
													"id": 669,
													"name": "success",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 660,
													"src": "7735:7:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 685,
													"nodeType": "Block",
													"src": "7792:505:3",
													"statements": [
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 676,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 673,
																		"name": "returndata",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 662,
																		"src": "7876:10:3",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	},
																	"id": 674,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "length",
																	"nodeType": "MemberAccess",
																	"src": "7876:17:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": ">",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 675,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "7896:1:3",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "7876:21:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"falseBody": {
																"id": 683,
																"nodeType": "Block",
																"src": "8234:53:3",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 680,
																					"name": "errorMessage",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 664,
																					"src": "8259:12:3",
																					"typeDescriptions": {
																						"typeIdentifier": "t_string_memory_ptr",
																						"typeString": "string memory"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_string_memory_ptr",
																						"typeString": "string memory"
																					}
																				],
																				"id": 679,
																				"name": "revert",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [
																					4294967277,
																					4294967277
																				],
																				"referencedDeclaration": 4294967277,
																				"src": "8252:6:3",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																					"typeString": "function (string memory) pure"
																				}
																			},
																			"id": 681,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "8252:20:3",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 682,
																		"nodeType": "ExpressionStatement",
																		"src": "8252:20:3"
																	}
																]
															},
															"id": 684,
															"nodeType": "IfStatement",
															"src": "7872:415:3",
															"trueBody": {
																"id": 678,
																"nodeType": "Block",
																"src": "7899:329:3",
																"statements": [
																	{
																		"AST": {
																			"nodeType": "YulBlock",
																			"src": "8069:145:3",
																			"statements": [
																				{
																					"nodeType": "YulVariableDeclaration",
																					"src": "8091:40:3",
																					"value": {
																						"arguments": [
																							{
																								"name": "returndata",
																								"nodeType": "YulIdentifier",
																								"src": "8120:10:3"
																							}
																						],
																						"functionName": {
																							"name": "mload",
																							"nodeType": "YulIdentifier",
																							"src": "8114:5:3"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "8114:17:3"
																					},
																					"variables": [
																						{
																							"name": "returndata_size",
																							"nodeType": "YulTypedName",
																							"src": "8095:15:3",
																							"type": ""
																						}
																					]
																				},
																				{
																					"expression": {
																						"arguments": [
																							{
																								"arguments": [
																									{
																										"kind": "number",
																										"nodeType": "YulLiteral",
																										"src": "8163:2:3",
																										"type": "",
																										"value": "32"
																									},
																									{
																										"name": "returndata",
																										"nodeType": "YulIdentifier",
																										"src": "8167:10:3"
																									}
																								],
																								"functionName": {
																									"name": "add",
																									"nodeType": "YulIdentifier",
																									"src": "8159:3:3"
																								},
																								"nodeType": "YulFunctionCall",
																								"src": "8159:19:3"
																							},
																							{
																								"name": "returndata_size",
																								"nodeType": "YulIdentifier",
																								"src": "8180:15:3"
																							}
																						],
																						"functionName": {
																							"name": "revert",
																							"nodeType": "YulIdentifier",
																							"src": "8152:6:3"
																						},
																						"nodeType": "YulFunctionCall",
																						"src": "8152:44:3"
																					},
																					"nodeType": "YulExpressionStatement",
																					"src": "8152:44:3"
																				}
																			]
																		},
																		"documentation": "@solidity memory-safe-assembly",
																		"evmVersion": "istanbul",
																		"externalReferences": [
																			{
																				"declaration": 662,
																				"isOffset": false,
																				"isSlot": false,
																				"src": "8120:10:3",
																				"valueSize": 1
																			},
																			{
																				"declaration": 662,
																				"isOffset": false,
																				"isSlot": false,
																				"src": "8167:10:3",
																				"valueSize": 1
																			}
																		],
																		"id": 677,
																		"nodeType": "InlineAssembly",
																		"src": "8060:154:3"
																	}
																]
															}
														}
													]
												},
												"id": 686,
												"nodeType": "IfStatement",
												"src": "7731:566:3",
												"trueBody": {
													"id": 672,
													"nodeType": "Block",
													"src": "7744:42:3",
													"statements": [
														{
															"expression": {
																"id": 670,
																"name": "returndata",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 662,
																"src": "7765:10:3",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes_memory_ptr",
																	"typeString": "bytes memory"
																}
															},
															"functionReturnParameters": 668,
															"id": 671,
															"nodeType": "Return",
															"src": "7758:17:3"
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 658,
										"nodeType": "StructuredDocumentation",
										"src": "7347:209:3",
										"text": " @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason using the provided one.\n _Available since v4.3._"
									},
									"id": 688,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "verifyCallResult",
									"nameLocation": "7570:16:3",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 665,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 660,
												"mutability": "mutable",
												"name": "success",
												"nameLocation": "7601:7:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7596:12:3",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 659,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "7596:4:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 662,
												"mutability": "mutable",
												"name": "returndata",
												"nameLocation": "7631:10:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7618:23:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 661,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7618:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 664,
												"mutability": "mutable",
												"name": "errorMessage",
												"nameLocation": "7665:12:3",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7651:26:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 663,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "7651:6:3",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7586:97:3"
									},
									"returnParameters": {
										"id": 668,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 667,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 688,
												"src": "7707:12:3",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 666,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "7707:5:3",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7706:14:3"
									},
									"scope": 689,
									"src": "7561:742:3",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 690,
							"src": "194:8111:3",
							"usedErrors": []
						}
					],
					"src": "101:8205:3"
				},
				"id": 3
			},
			"bridges/errors/GenericErrors.sol": {
				"ast": {
					"absolutePath": "bridges/errors/GenericErrors.sol",
					"exportedSymbols": {
						"CannotBridgeToSameNetwork": [
							697
						],
						"ContractCallNotAllowed": [
							707
						],
						"InvalidAmount": [
							693
						],
						"InvalidBridgeConfigLength": [
							701
						],
						"InvalidConfig": [
							719
						],
						"InvalidContract": [
							717
						],
						"NativeAssetTransferFailed": [
							715
						],
						"NativeValueWithERC": [
							705
						],
						"NoSwapDataProvided": [
							703
						],
						"NoTransferToNullAddress": [
							713
						],
						"NullAddrIsNotAValidSpender": [
							709
						],
						"NullAddrIsNotAnERC20Token": [
							711
						],
						"TokenAddressIsZero": [
							695
						],
						"ZeroPostSwapBalance": [
							699
						]
					},
					"id": 720,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 691,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "61:22:4"
						},
						{
							"id": 693,
							"name": "InvalidAmount",
							"nameLocation": "91:13:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 692,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "104:2:4"
							},
							"src": "85:22:4"
						},
						{
							"id": 695,
							"name": "TokenAddressIsZero",
							"nameLocation": "114:18:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 694,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "132:2:4"
							},
							"src": "108:27:4"
						},
						{
							"id": 697,
							"name": "CannotBridgeToSameNetwork",
							"nameLocation": "142:25:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 696,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "167:2:4"
							},
							"src": "136:34:4"
						},
						{
							"id": 699,
							"name": "ZeroPostSwapBalance",
							"nameLocation": "177:19:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 698,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "196:2:4"
							},
							"src": "171:28:4"
						},
						{
							"id": 701,
							"name": "InvalidBridgeConfigLength",
							"nameLocation": "206:25:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 700,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "231:2:4"
							},
							"src": "200:34:4"
						},
						{
							"id": 703,
							"name": "NoSwapDataProvided",
							"nameLocation": "241:18:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 702,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "259:2:4"
							},
							"src": "235:27:4"
						},
						{
							"id": 705,
							"name": "NativeValueWithERC",
							"nameLocation": "269:18:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 704,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "287:2:4"
							},
							"src": "263:27:4"
						},
						{
							"id": 707,
							"name": "ContractCallNotAllowed",
							"nameLocation": "297:22:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 706,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "319:2:4"
							},
							"src": "291:31:4"
						},
						{
							"id": 709,
							"name": "NullAddrIsNotAValidSpender",
							"nameLocation": "329:26:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 708,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "355:2:4"
							},
							"src": "323:35:4"
						},
						{
							"id": 711,
							"name": "NullAddrIsNotAnERC20Token",
							"nameLocation": "365:25:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 710,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "390:2:4"
							},
							"src": "359:34:4"
						},
						{
							"id": 713,
							"name": "NoTransferToNullAddress",
							"nameLocation": "400:23:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 712,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "423:2:4"
							},
							"src": "394:32:4"
						},
						{
							"id": 715,
							"name": "NativeAssetTransferFailed",
							"nameLocation": "433:25:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 714,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "458:2:4"
							},
							"src": "427:34:4"
						},
						{
							"id": 717,
							"name": "InvalidContract",
							"nameLocation": "468:15:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 716,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "483:2:4"
							},
							"src": "462:24:4"
						},
						{
							"id": 719,
							"name": "InvalidConfig",
							"nameLocation": "493:13:4",
							"nodeType": "ErrorDefinition",
							"parameters": {
								"id": 718,
								"nodeType": "ParameterList",
								"parameters": [],
								"src": "506:2:4"
							},
							"src": "487:22:4"
						}
					],
					"src": "61:449:4"
				},
				"id": 4
			},
			"bridges/facets/CBridgeFacet.sol": {
				"ast": {
					"absolutePath": "bridges/facets/CBridgeFacet.sol",
					"exportedSymbols": {
						"CBridgeFacet": [
							977
						],
						"CannotBridgeToSameNetwork": [
							697
						],
						"ICBridge": [
							1087
						],
						"IERC20": [
							77
						],
						"InvalidAmount": [
							693
						],
						"InvalidConfig": [
							719
						],
						"LibAsset": [
							1472
						],
						"LibDiamond": [
							2306
						],
						"ReentrancyGuard": [
							1042
						]
					},
					"id": 978,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 721,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "61:22:5"
						},
						{
							"absolutePath": "bridges/libs/LibAsset.sol",
							"file": "../libs/LibAsset.sol",
							"id": 723,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 1473,
							"src": "212:46:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 722,
										"name": "LibAsset",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "220:8:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "bridges/interfaces/ICBridge.sol",
							"file": "../interfaces/ICBridge.sol",
							"id": 725,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 1088,
							"src": "259:52:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 724,
										"name": "ICBridge",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "267:8:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 727,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 78,
							"src": "312:70:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 726,
										"name": "IERC20",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "320:6:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "bridges/helpers/ReentrancyGuard.sol",
							"file": "../helpers/ReentrancyGuard.sol",
							"id": 729,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 1043,
							"src": "383:63:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 728,
										"name": "ReentrancyGuard",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "391:15:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "bridges/errors/GenericErrors.sol",
							"file": "../errors/GenericErrors.sol",
							"id": 733,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 720,
							"src": "447:100:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 730,
										"name": "CannotBridgeToSameNetwork",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "455:25:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 731,
										"name": "InvalidAmount",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "482:13:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 732,
										"name": "InvalidConfig",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "497:13:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "bridges/libs/LibDiamond.sol",
							"file": "../libs/LibDiamond.sol",
							"id": 735,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 978,
							"sourceUnit": 2307,
							"src": "548:50:5",
							"symbolAliases": [
								{
									"foreign": {
										"id": 734,
										"name": "LibDiamond",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "556:10:5",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [
								{
									"baseName": {
										"id": 736,
										"name": "ReentrancyGuard",
										"nodeType": "IdentifierPath",
										"referencedDeclaration": 1042,
										"src": "625:15:5"
									},
									"id": 737,
									"nodeType": "InheritanceSpecifier",
									"src": "625:15:5"
								}
							],
							"contractDependencies": [],
							"contractKind": "contract",
							"fullyImplemented": true,
							"id": 977,
							"linearizedBaseContracts": [
								977,
								1042
							],
							"name": "CBridgeFacet",
							"nameLocation": "609:12:5",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"anonymous": false,
									"id": 743,
									"name": "CBridgeInitialized",
									"nameLocation": "854:18:5",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 742,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 739,
												"indexed": false,
												"mutability": "mutable",
												"name": "cBridge",
												"nameLocation": "881:7:5",
												"nodeType": "VariableDeclaration",
												"scope": 743,
												"src": "873:15:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 738,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "873:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 741,
												"indexed": false,
												"mutability": "mutable",
												"name": "chainId",
												"nameLocation": "898:7:5",
												"nodeType": "VariableDeclaration",
												"scope": 743,
												"src": "890:15:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 740,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "890:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "872:34:5"
									},
									"src": "848:59:5"
								},
								{
									"anonymous": false,
									"id": 757,
									"name": "TransferStarted",
									"nameLocation": "918:15:5",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 756,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 745,
												"indexed": false,
												"mutability": "mutable",
												"name": "bridgeUsed",
												"nameLocation": "950:10:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "943:17:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 744,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "943:6:5",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 747,
												"indexed": false,
												"mutability": "mutable",
												"name": "tokenAddress",
												"nameLocation": "978:12:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "970:20:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 746,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "970:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 749,
												"indexed": false,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "1008:4:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "1000:12:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 748,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1000:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 751,
												"indexed": false,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "1030:2:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "1022:10:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 750,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1022:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 753,
												"indexed": false,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1050:6:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "1042:14:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 752,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1042:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 755,
												"indexed": false,
												"mutability": "mutable",
												"name": "chainIdTo",
												"nameLocation": "1074:9:5",
												"nodeType": "VariableDeclaration",
												"scope": 757,
												"src": "1066:17:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 754,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1066:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "933:156:5"
									},
									"src": "912:178:5"
								},
								{
									"anonymous": false,
									"id": 761,
									"name": "UpdatedCBridgeAddress",
									"nameLocation": "1101:21:5",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 760,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 759,
												"indexed": false,
												"mutability": "mutable",
												"name": "newAddress",
												"nameLocation": "1131:10:5",
												"nodeType": "VariableDeclaration",
												"scope": 761,
												"src": "1123:18:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 758,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1123:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1122:20:5"
									},
									"src": "1095:48:5"
								},
								{
									"constant": true,
									"id": 766,
									"mutability": "constant",
									"name": "NAMESPACE",
									"nameLocation": "1377:9:5",
									"nodeType": "VariableDeclaration",
									"scope": 977,
									"src": "1351:86:5",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 762,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "1351:7:5",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": {
										"arguments": [
											{
												"hexValue": "696f2e657468657273706f742e6661636574732e63627269646765",
												"id": 764,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "1407:29:5",
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a",
													"typeString": "literal_string \"io.etherspot.facets.cbridge\""
												},
												"value": "io.etherspot.facets.cbridge"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_stringliteral_9d7253cc9498e9cc54011bbbe9471a68adbc99d0ac1eef42369f5a452e814c4a",
													"typeString": "literal_string \"io.etherspot.facets.cbridge\""
												}
											],
											"id": 763,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 4294967288,
											"src": "1397:9:5",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 765,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "1397:40:5",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"visibility": "internal"
								},
								{
									"canonicalName": "CBridgeFacet.Storage",
									"id": 771,
									"members": [
										{
											"constant": false,
											"id": 768,
											"mutability": "mutable",
											"name": "cBridge",
											"nameLocation": "1476:7:5",
											"nodeType": "VariableDeclaration",
											"scope": 771,
											"src": "1468:15:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 767,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1468:7:5",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 770,
											"mutability": "mutable",
											"name": "cBridgeChainId",
											"nameLocation": "1501:14:5",
											"nodeType": "VariableDeclaration",
											"scope": 771,
											"src": "1493:22:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 769,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "1493:7:5",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "Storage",
									"nameLocation": "1450:7:5",
									"nodeType": "StructDefinition",
									"scope": 977,
									"src": "1443:79:5",
									"visibility": "public"
								},
								{
									"canonicalName": "CBridgeFacet.CBridgeData",
									"id": 784,
									"members": [
										{
											"constant": false,
											"id": 773,
											"mutability": "mutable",
											"name": "maxSlippage",
											"nameLocation": "1766:11:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1759:18:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint32",
												"typeString": "uint32"
											},
											"typeName": {
												"id": 772,
												"name": "uint32",
												"nodeType": "ElementaryTypeName",
												"src": "1759:6:5",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 775,
											"mutability": "mutable",
											"name": "dstChainId",
											"nameLocation": "1794:10:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1787:17:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint64",
												"typeString": "uint64"
											},
											"typeName": {
												"id": 774,
												"name": "uint64",
												"nodeType": "ElementaryTypeName",
												"src": "1787:6:5",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 777,
											"mutability": "mutable",
											"name": "nonce",
											"nameLocation": "1821:5:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1814:12:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint64",
												"typeString": "uint64"
											},
											"typeName": {
												"id": 776,
												"name": "uint64",
												"nodeType": "ElementaryTypeName",
												"src": "1814:6:5",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 779,
											"mutability": "mutable",
											"name": "amount",
											"nameLocation": "1844:6:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1836:14:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 778,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "1836:7:5",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 781,
											"mutability": "mutable",
											"name": "receiver",
											"nameLocation": "1868:8:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1860:16:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 780,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1860:7:5",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 783,
											"mutability": "mutable",
											"name": "token",
											"nameLocation": "1894:5:5",
											"nodeType": "VariableDeclaration",
											"scope": 784,
											"src": "1886:13:5",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 782,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1886:7:5",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "CBridgeData",
									"nameLocation": "1737:11:5",
									"nodeType": "StructDefinition",
									"scope": 977,
									"src": "1730:176:5",
									"visibility": "public"
								},
								{
									"body": {
										"id": 830,
										"nodeType": "Block",
										"src": "2095:284:5",
										"statements": [
											{
												"expression": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"expression": {
															"id": 790,
															"name": "LibDiamond",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2306,
															"src": "2105:10:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_LibDiamond_$2306_$",
																"typeString": "type(library LibDiamond)"
															}
														},
														"id": 792,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "enforceIsContractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1584,
														"src": "2105:33:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$__$returns$__$",
															"typeString": "function () view"
														}
													},
													"id": 793,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2105:35:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 794,
												"nodeType": "ExpressionStatement",
												"src": "2105:35:5"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 800,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 795,
														"name": "_cBridge",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 787,
														"src": "2154:8:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"arguments": [
															{
																"hexValue": "30",
																"id": 798,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "2174:1:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																}
															],
															"id": 797,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "2166:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_address_$",
																"typeString": "type(address)"
															},
															"typeName": {
																"id": 796,
																"name": "address",
																"nodeType": "ElementaryTypeName",
																"src": "2166:7:5",
																"typeDescriptions": {}
															}
														},
														"id": 799,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2166:10:5",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2154:22:5",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 804,
												"nodeType": "IfStatement",
												"src": "2150:50:5",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 801,
															"name": "InvalidConfig",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 719,
															"src": "2185:13:5",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 802,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2185:15:5",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 803,
													"nodeType": "RevertStatement",
													"src": "2178:22:5"
												}
											},
											{
												"assignments": [
													807
												],
												"declarations": [
													{
														"constant": false,
														"id": 807,
														"mutability": "mutable",
														"name": "s",
														"nameLocation": "2226:1:5",
														"nodeType": "VariableDeclaration",
														"scope": 830,
														"src": "2210:17:5",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
															"typeString": "struct CBridgeFacet.Storage"
														},
														"typeName": {
															"id": 806,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 805,
																"name": "Storage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 771,
																"src": "2210:7:5"
															},
															"referencedDeclaration": 771,
															"src": "2210:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 810,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 808,
														"name": "getStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 976,
														"src": "2230:10:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Storage_$771_storage_ptr_$",
															"typeString": "function () pure returns (struct CBridgeFacet.Storage storage pointer)"
														}
													},
													"id": 809,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2230:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
														"typeString": "struct CBridgeFacet.Storage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2210:32:5"
											},
											{
												"expression": {
													"id": 815,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 811,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 807,
															"src": "2252:1:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage storage pointer"
															}
														},
														"id": 813,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "cBridge",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 768,
														"src": "2252:9:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 814,
														"name": "_cBridge",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 787,
														"src": "2264:8:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2252:20:5",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 816,
												"nodeType": "ExpressionStatement",
												"src": "2252:20:5"
											},
											{
												"expression": {
													"id": 822,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 817,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 807,
															"src": "2282:1:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage storage pointer"
															}
														},
														"id": 819,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "cBridgeChainId",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 770,
														"src": "2282:16:5",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"id": 820,
															"name": "block",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4294967292,
															"src": "2301:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_magic_block",
																"typeString": "block"
															}
														},
														"id": 821,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "chainid",
														"nodeType": "MemberAccess",
														"src": "2301:13:5",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2282:32:5",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 823,
												"nodeType": "ExpressionStatement",
												"src": "2282:32:5"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 825,
															"name": "_cBridge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 787,
															"src": "2348:8:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 826,
																"name": "block",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4294967292,
																"src": "2358:5:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_magic_block",
																	"typeString": "block"
																}
															},
															"id": 827,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "chainid",
															"nodeType": "MemberAccess",
															"src": "2358:13:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 824,
														"name": "CBridgeInitialized",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 743,
														"src": "2329:18:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,uint256)"
														}
													},
													"id": 828,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2329:43:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 829,
												"nodeType": "EmitStatement",
												"src": "2324:48:5"
											}
										]
									},
									"documentation": {
										"id": 785,
										"nodeType": "StructuredDocumentation",
										"src": "1912:124:5",
										"text": "@notice initializes state variables for the cBridge facet\n @param _cBridge address of the CBridge router contract"
									},
									"functionSelector": "1124bcf9",
									"id": 831,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "initializeCBridge",
									"nameLocation": "2050:17:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 788,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 787,
												"mutability": "mutable",
												"name": "_cBridge",
												"nameLocation": "2076:8:5",
												"nodeType": "VariableDeclaration",
												"scope": 831,
												"src": "2068:16:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 786,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2068:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2067:18:5"
									},
									"returnParameters": {
										"id": 789,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2095:0:5"
									},
									"scope": 977,
									"src": "2041:338:5",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 867,
										"nodeType": "Block",
										"src": "2623:340:5",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"expression": {
																"id": 843,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2655:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 844,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "token",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 783,
															"src": "2655:18:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 845,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2675:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 846,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "amount",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 779,
															"src": "2675:19:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"expression": {
															"id": 840,
															"name": "LibAsset",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1472,
															"src": "2633:8:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_LibAsset_$1472_$",
																"typeString": "type(library LibAsset)"
															}
														},
														"id": 842,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "depositAsset",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1415,
														"src": "2633:21:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (address,uint256)"
														}
													},
													"id": 847,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2633:62:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 848,
												"nodeType": "ExpressionStatement",
												"src": "2633:62:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 850,
															"name": "_cBridgeData",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 835,
															"src": "2718:12:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																"typeString": "struct CBridgeFacet.CBridgeData calldata"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																"typeString": "struct CBridgeFacet.CBridgeData calldata"
															}
														],
														"id": 849,
														"name": "_startBridge",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 963,
														"src": "2705:12:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_CBridgeData_$784_memory_ptr_$returns$__$",
															"typeString": "function (struct CBridgeFacet.CBridgeData memory)"
														}
													},
													"id": 851,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2705:26:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 852,
												"nodeType": "ExpressionStatement",
												"src": "2705:26:5"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"hexValue": "63427269646765",
															"id": 854,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2776:9:5",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_5a2d4bf05390b1b2373ebc9b5f99fd7bfffbf71a027b0a5a31b483b547ce5035",
																"typeString": "literal_string \"cBridge\""
															},
															"value": "cBridge"
														},
														{
															"expression": {
																"id": 855,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2799:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 856,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "token",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 783,
															"src": "2799:18:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 857,
																"name": "msg",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 4294967281,
																"src": "2831:3:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_magic_message",
																	"typeString": "msg"
																}
															},
															"id": 858,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "sender",
															"nodeType": "MemberAccess",
															"src": "2831:10:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 859,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2855:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 860,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "receiver",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 781,
															"src": "2855:21:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 861,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2890:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 862,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "amount",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 779,
															"src": "2890:19:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"expression": {
																"id": 863,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 835,
																"src": "2923:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData calldata"
																}
															},
															"id": 864,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "dstChainId",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 775,
															"src": "2923:23:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_stringliteral_5a2d4bf05390b1b2373ebc9b5f99fd7bfffbf71a027b0a5a31b483b547ce5035",
																"typeString": "literal_string \"cBridge\""
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														],
														"id": 853,
														"name": "TransferStarted",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 757,
														"src": "2747:15:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
															"typeString": "function (string memory,address,address,address,uint256,uint256)"
														}
													},
													"id": 865,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2747:209:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 866,
												"nodeType": "EmitStatement",
												"src": "2742:214:5"
											}
										]
									},
									"documentation": {
										"id": 832,
										"nodeType": "StructuredDocumentation",
										"src": "2385:111:5",
										"text": "@notice initiates token bridging\n @param _cBridgeData: provides necessary data for cBridge transfer"
									},
									"functionSelector": "5277cbc7",
									"id": 868,
									"implemented": true,
									"kind": "function",
									"modifiers": [
										{
											"id": 838,
											"kind": "modifierInvocation",
											"modifierName": {
												"id": 837,
												"name": "nonReentrant",
												"nodeType": "IdentifierPath",
												"referencedDeclaration": 1028,
												"src": "2606:12:5"
											},
											"nodeType": "ModifierInvocation",
											"src": "2606:12:5"
										}
									],
									"name": "bridgeTokensCBridge",
									"nameLocation": "2510:19:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 836,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 835,
												"mutability": "mutable",
												"name": "_cBridgeData",
												"nameLocation": "2551:12:5",
												"nodeType": "VariableDeclaration",
												"scope": 868,
												"src": "2530:33:5",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_CBridgeData_$784_calldata_ptr",
													"typeString": "struct CBridgeFacet.CBridgeData"
												},
												"typeName": {
													"id": 834,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 833,
														"name": "CBridgeData",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 784,
														"src": "2530:11:5"
													},
													"referencedDeclaration": 784,
													"src": "2530:11:5",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_CBridgeData_$784_storage_ptr",
														"typeString": "struct CBridgeFacet.CBridgeData"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2529:35:5"
									},
									"returnParameters": {
										"id": 839,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2623:0:5"
									},
									"scope": 977,
									"src": "2501:462:5",
									"stateMutability": "payable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 904,
										"nodeType": "Block",
										"src": "3029:239:5",
										"statements": [
											{
												"expression": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"expression": {
															"id": 873,
															"name": "LibDiamond",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2306,
															"src": "3039:10:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_LibDiamond_$2306_$",
																"typeString": "type(library LibDiamond)"
															}
														},
														"id": 875,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "enforceIsContractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1584,
														"src": "3039:33:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$__$returns$__$",
															"typeString": "function () view"
														}
													},
													"id": 876,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3039:35:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 877,
												"nodeType": "ExpressionStatement",
												"src": "3039:35:5"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 883,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 878,
														"name": "_newAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 870,
														"src": "3088:11:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"arguments": [
															{
																"hexValue": "30",
																"id": 881,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "3111:1:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																}
															],
															"id": 880,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "3103:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_address_$",
																"typeString": "type(address)"
															},
															"typeName": {
																"id": 879,
																"name": "address",
																"nodeType": "ElementaryTypeName",
																"src": "3103:7:5",
																"typeDescriptions": {}
															}
														},
														"id": 882,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3103:10:5",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "3088:25:5",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 887,
												"nodeType": "IfStatement",
												"src": "3084:53:5",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 884,
															"name": "InvalidConfig",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 719,
															"src": "3122:13:5",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 885,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3122:15:5",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 886,
													"nodeType": "RevertStatement",
													"src": "3115:22:5"
												}
											},
											{
												"assignments": [
													890
												],
												"declarations": [
													{
														"constant": false,
														"id": 890,
														"mutability": "mutable",
														"name": "s",
														"nameLocation": "3163:1:5",
														"nodeType": "VariableDeclaration",
														"scope": 904,
														"src": "3147:17:5",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
															"typeString": "struct CBridgeFacet.Storage"
														},
														"typeName": {
															"id": 889,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 888,
																"name": "Storage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 771,
																"src": "3147:7:5"
															},
															"referencedDeclaration": 771,
															"src": "3147:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 893,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 891,
														"name": "getStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 976,
														"src": "3167:10:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Storage_$771_storage_ptr_$",
															"typeString": "function () pure returns (struct CBridgeFacet.Storage storage pointer)"
														}
													},
													"id": 892,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3167:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
														"typeString": "struct CBridgeFacet.Storage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3147:32:5"
											},
											{
												"expression": {
													"id": 898,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 894,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 890,
															"src": "3189:1:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage storage pointer"
															}
														},
														"id": 896,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "cBridge",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 768,
														"src": "3189:9:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 897,
														"name": "_newAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 870,
														"src": "3201:11:5",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "3189:23:5",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 899,
												"nodeType": "ExpressionStatement",
												"src": "3189:23:5"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 901,
															"name": "_newAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 870,
															"src": "3249:11:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 900,
														"name": "UpdatedCBridgeAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 761,
														"src": "3227:21:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
															"typeString": "function (address)"
														}
													},
													"id": 902,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3227:34:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 903,
												"nodeType": "EmitStatement",
												"src": "3222:39:5"
											}
										]
									},
									"functionSelector": "dae03389",
									"id": 905,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "updateCBridgeAddress",
									"nameLocation": "2978:20:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 871,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 870,
												"mutability": "mutable",
												"name": "_newAddress",
												"nameLocation": "3007:11:5",
												"nodeType": "VariableDeclaration",
												"scope": 905,
												"src": "2999:19:5",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 869,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2999:7:5",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2998:21:5"
									},
									"returnParameters": {
										"id": 872,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3029:0:5"
									},
									"scope": 977,
									"src": "2969:299:5",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"body": {
										"id": 962,
										"nodeType": "Block",
										"src": "3611:619:5",
										"statements": [
											{
												"assignments": [
													914
												],
												"declarations": [
													{
														"constant": false,
														"id": 914,
														"mutability": "mutable",
														"name": "s",
														"nameLocation": "3637:1:5",
														"nodeType": "VariableDeclaration",
														"scope": 962,
														"src": "3621:17:5",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
															"typeString": "struct CBridgeFacet.Storage"
														},
														"typeName": {
															"id": 913,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 912,
																"name": "Storage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 771,
																"src": "3621:7:5"
															},
															"referencedDeclaration": 771,
															"src": "3621:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
																"typeString": "struct CBridgeFacet.Storage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 917,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 915,
														"name": "getStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 976,
														"src": "3641:10:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_Storage_$771_storage_ptr_$",
															"typeString": "function () pure returns (struct CBridgeFacet.Storage storage pointer)"
														}
													},
													"id": 916,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3641:12:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
														"typeString": "struct CBridgeFacet.Storage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3621:32:5"
											},
											{
												"assignments": [
													919
												],
												"declarations": [
													{
														"constant": false,
														"id": 919,
														"mutability": "mutable",
														"name": "bridge",
														"nameLocation": "3671:6:5",
														"nodeType": "VariableDeclaration",
														"scope": 962,
														"src": "3663:14:5",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														"typeName": {
															"id": 918,
															"name": "address",
															"nodeType": "ElementaryTypeName",
															"src": "3663:7:5",
															"stateMutability": "nonpayable",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 922,
												"initialValue": {
													"expression": {
														"id": 920,
														"name": "s",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 914,
														"src": "3680:1:5",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
															"typeString": "struct CBridgeFacet.Storage storage pointer"
														}
													},
													"id": 921,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "cBridge",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 768,
													"src": "3680:9:5",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3663:26:5"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 927,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 923,
															"name": "block",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 4294967292,
															"src": "3704:5:5",
															"typeDescriptions": {
																"typeIdentifier": "t_magic_block",
																"typeString": "block"
															}
														},
														"id": 924,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "chainid",
														"nodeType": "MemberAccess",
														"src": "3704:13:5",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"expression": {
															"id": 925,
															"name": "_cBridgeData",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 909,
															"src": "3721:12:5",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																"typeString": "struct CBridgeFacet.CBridgeData memory"
															}
														},
														"id": 926,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "dstChainId",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 775,
														"src": "3721:23:5",
														"typeDescriptions": {
															"typeIdentifier": "t_uint64",
															"typeString": "uint64"
														}
													},
													"src": "3704:40:5",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 931,
												"nodeType": "IfStatement",
												"src": "3700:92:5",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 928,
															"name": "CannotBridgeToSameNetwork",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 697,
															"src": "3765:25:5",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 929,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3765:27:5",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 930,
													"nodeType": "RevertStatement",
													"src": "3758:34:5"
												}
											},
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"expression": {
																		"id": 936,
																		"name": "_cBridgeData",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 909,
																		"src": "3848:12:5",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																			"typeString": "struct CBridgeFacet.CBridgeData memory"
																		}
																	},
																	"id": 937,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "token",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 783,
																	"src": "3848:18:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 935,
																"name": "IERC20",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 77,
																"src": "3841:6:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																	"typeString": "type(contract IERC20)"
																}
															},
															"id": 938,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "3841:26:5",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"id": 939,
															"name": "bridge",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 919,
															"src": "3881:6:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 940,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "3901:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 941,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "amount",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 779,
															"src": "3901:19:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"expression": {
															"id": 932,
															"name": "LibAsset",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1472,
															"src": "3803:8:5",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_LibAsset_$1472_$",
																"typeString": "type(library LibAsset)"
															}
														},
														"id": 934,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "maxApproveERC20",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1262,
														"src": "3803:24:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (contract IERC20,address,uint256)"
														}
													},
													"id": 942,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3803:127:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 943,
												"nodeType": "ExpressionStatement",
												"src": "3803:127:5"
											},
											{
												"expression": {
													"arguments": [
														{
															"expression": {
																"id": 948,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4020:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 949,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "receiver",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 781,
															"src": "4020:21:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 950,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4055:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 951,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "token",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 783,
															"src": "4055:18:5",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"expression": {
																"id": 952,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4087:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 953,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "amount",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 779,
															"src": "4087:19:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"expression": {
																"id": 954,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4120:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 955,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "dstChainId",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 775,
															"src": "4120:23:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														},
														{
															"expression": {
																"id": 956,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4157:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 957,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "nonce",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 777,
															"src": "4157:18:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															}
														},
														{
															"expression": {
																"id": 958,
																"name": "_cBridgeData",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 909,
																"src": "4189:12:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
																	"typeString": "struct CBridgeFacet.CBridgeData memory"
																}
															},
															"id": 959,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "maxSlippage",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 773,
															"src": "4189:24:5",
															"typeDescriptions": {
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															},
															{
																"typeIdentifier": "t_uint64",
																"typeString": "uint64"
															},
															{
																"typeIdentifier": "t_uint32",
																"typeString": "uint32"
															}
														],
														"expression": {
															"arguments": [
																{
																	"id": 945,
																	"name": "bridge",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 919,
																	"src": "3994:6:5",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 944,
																"name": "ICBridge",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1087,
																"src": "3985:8:5",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_ICBridge_$1087_$",
																	"typeString": "type(contract ICBridge)"
																}
															},
															"id": 946,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "3985:16:5",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_ICBridge_$1087",
																"typeString": "contract ICBridge"
															}
														},
														"id": 947,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "send",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1059,
														"src": "3985:21:5",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint64_$_t_uint64_$_t_uint32_$returns$__$",
															"typeString": "function (address,address,uint256,uint64,uint64,uint32) external"
														}
													},
													"id": 960,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3985:238:5",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 961,
												"nodeType": "ExpressionStatement",
												"src": "3985:238:5"
											}
										]
									},
									"documentation": {
										"id": 906,
										"nodeType": "StructuredDocumentation",
										"src": "3476:67:5",
										"text": "@dev approve bridge to spend tokens and send via cBridge router"
									},
									"id": 963,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "_startBridge",
									"nameLocation": "3557:12:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 910,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 909,
												"mutability": "mutable",
												"name": "_cBridgeData",
												"nameLocation": "3589:12:5",
												"nodeType": "VariableDeclaration",
												"scope": 963,
												"src": "3570:31:5",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_CBridgeData_$784_memory_ptr",
													"typeString": "struct CBridgeFacet.CBridgeData"
												},
												"typeName": {
													"id": 908,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 907,
														"name": "CBridgeData",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 784,
														"src": "3570:11:5"
													},
													"referencedDeclaration": 784,
													"src": "3570:11:5",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_CBridgeData_$784_storage_ptr",
														"typeString": "struct CBridgeFacet.CBridgeData"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3569:33:5"
									},
									"returnParameters": {
										"id": 911,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3611:0:5"
									},
									"scope": 977,
									"src": "3548:682:5",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 975,
										"nodeType": "Block",
										"src": "4332:163:5",
										"statements": [
											{
												"assignments": [
													971
												],
												"declarations": [
													{
														"constant": false,
														"id": 971,
														"mutability": "mutable",
														"name": "namespace",
														"nameLocation": "4350:9:5",
														"nodeType": "VariableDeclaration",
														"scope": 975,
														"src": "4342:17:5",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														"typeName": {
															"id": 970,
															"name": "bytes32",
															"nodeType": "ElementaryTypeName",
															"src": "4342:7:5",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 973,
												"initialValue": {
													"id": 972,
													"name": "NAMESPACE",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 766,
													"src": "4362:9:5",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4342:29:5"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "4446:43:5",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "4460:19:5",
															"value": {
																"name": "namespace",
																"nodeType": "YulIdentifier",
																"src": "4470:9:5"
															},
															"variableNames": [
																{
																	"name": "s.slot",
																	"nodeType": "YulIdentifier",
																	"src": "4460:6:5"
																}
															]
														}
													]
												},
												"evmVersion": "istanbul",
												"externalReferences": [
													{
														"declaration": 971,
														"isOffset": false,
														"isSlot": false,
														"src": "4470:9:5",
														"valueSize": 1
													},
													{
														"declaration": 968,
														"isOffset": false,
														"isSlot": true,
														"src": "4460:6:5",
														"suffix": "slot",
														"valueSize": 1
													}
												],
												"id": 974,
												"nodeType": "InlineAssembly",
												"src": "4437:52:5"
											}
										]
									},
									"documentation": {
										"id": 964,
										"nodeType": "StructuredDocumentation",
										"src": "4236:28:5",
										"text": "@dev fetch local storage"
									},
									"id": 976,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "getStorage",
									"nameLocation": "4278:10:5",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 965,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4288:2:5"
									},
									"returnParameters": {
										"id": 969,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 968,
												"mutability": "mutable",
												"name": "s",
												"nameLocation": "4329:1:5",
												"nodeType": "VariableDeclaration",
												"scope": 976,
												"src": "4313:17:5",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
													"typeString": "struct CBridgeFacet.Storage"
												},
												"typeName": {
													"id": 967,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 966,
														"name": "Storage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 771,
														"src": "4313:7:5"
													},
													"referencedDeclaration": 771,
													"src": "4313:7:5",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_Storage_$771_storage_ptr",
														"typeString": "struct CBridgeFacet.Storage"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4312:19:5"
									},
									"scope": 977,
									"src": "4269:226:5",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "private"
								}
							],
							"scope": 978,
							"src": "600:3897:5",
							"usedErrors": [
								693,
								697,
								705,
								709,
								711,
								713,
								719,
								990
							]
						}
					],
					"src": "61:4437:5"
				},
				"id": 5
			},
			"bridges/helpers/ReentrancyGuard.sol": {
				"ast": {
					"absolutePath": "bridges/helpers/ReentrancyGuard.sol",
					"exportedSymbols": {
						"ReentrancyGuard": [
							1042
						]
					},
					"id": 1043,
					"license": "UNLICENSED",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 979,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "39:22:6"
						},
						{
							"abstract": true,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "contract",
							"documentation": {
								"id": 980,
								"nodeType": "StructuredDocumentation",
								"src": "63:133:6",
								"text": "@title Reentrancy Guard\n @author LI.FI (https://li.fi)\n @notice Abstract contract to provide protection against reentrancy"
							},
							"fullyImplemented": true,
							"id": 1042,
							"linearizedBaseContracts": [
								1042
							],
							"name": "ReentrancyGuard",
							"nameLocation": "214:15:6",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"constant": true,
									"documentation": {
										"id": 981,
										"nodeType": "StructuredDocumentation",
										"src": "236:16:6",
										"text": "Storage ///"
									},
									"id": 984,
									"mutability": "constant",
									"name": "NAMESPACE",
									"nameLocation": "282:9:6",
									"nodeType": "VariableDeclaration",
									"scope": 1042,
									"src": "257:114:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 982,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "257:7:6",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": {
										"hexValue": "a65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b",
										"id": 983,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "hexString",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "302:69:6",
										"typeDescriptions": {
											"typeIdentifier": "t_stringliteral_3f630fdab3c4a0750e01c3361d9bfd1a300e0b0c8f708b57a6a04fc7bb514b16",
											"typeString": "literal_string hex\"a65bb2f450488ab0858c00edc14abc5297769bf42adb48cfb77752890e8b697b\""
										}
									},
									"visibility": "private"
								},
								{
									"canonicalName": "ReentrancyGuard.ReentrancyStorage",
									"id": 987,
									"members": [
										{
											"constant": false,
											"id": 986,
											"mutability": "mutable",
											"name": "status",
											"nameLocation": "440:6:6",
											"nodeType": "VariableDeclaration",
											"scope": 987,
											"src": "432:14:6",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 985,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "432:7:6",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "ReentrancyStorage",
									"nameLocation": "404:17:6",
									"nodeType": "StructDefinition",
									"scope": 1042,
									"src": "397:56:6",
									"visibility": "public"
								},
								{
									"documentation": {
										"id": 988,
										"nodeType": "StructuredDocumentation",
										"src": "459:15:6",
										"text": "Errors ///"
									},
									"id": 990,
									"name": "ReentrancyError",
									"nameLocation": "485:15:6",
									"nodeType": "ErrorDefinition",
									"parameters": {
										"id": 989,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "500:2:6"
									},
									"src": "479:24:6"
								},
								{
									"constant": true,
									"documentation": {
										"id": 991,
										"nodeType": "StructuredDocumentation",
										"src": "509:18:6",
										"text": "Constants ///"
									},
									"id": 994,
									"mutability": "constant",
									"name": "_NOT_ENTERED",
									"nameLocation": "557:12:6",
									"nodeType": "VariableDeclaration",
									"scope": 1042,
									"src": "532:41:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 992,
										"name": "uint256",
										"nodeType": "ElementaryTypeName",
										"src": "532:7:6",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": {
										"hexValue": "30",
										"id": 993,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "number",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "572:1:6",
										"typeDescriptions": {
											"typeIdentifier": "t_rational_0_by_1",
											"typeString": "int_const 0"
										},
										"value": "0"
									},
									"visibility": "private"
								},
								{
									"constant": true,
									"id": 997,
									"mutability": "constant",
									"name": "_ENTERED",
									"nameLocation": "604:8:6",
									"nodeType": "VariableDeclaration",
									"scope": 1042,
									"src": "579:37:6",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 995,
										"name": "uint256",
										"nodeType": "ElementaryTypeName",
										"src": "579:7:6",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": {
										"hexValue": "31",
										"id": 996,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "number",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "615:1:6",
										"typeDescriptions": {
											"typeIdentifier": "t_rational_1_by_1",
											"typeString": "int_const 1"
										},
										"value": "1"
									},
									"visibility": "private"
								},
								{
									"body": {
										"id": 1027,
										"nodeType": "Block",
										"src": "670:199:6",
										"statements": [
											{
												"assignments": [
													1002
												],
												"declarations": [
													{
														"constant": false,
														"id": 1002,
														"mutability": "mutable",
														"name": "s",
														"nameLocation": "706:1:6",
														"nodeType": "VariableDeclaration",
														"scope": 1027,
														"src": "680:27:6",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
															"typeString": "struct ReentrancyGuard.ReentrancyStorage"
														},
														"typeName": {
															"id": 1001,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 1000,
																"name": "ReentrancyStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 987,
																"src": "680:17:6"
															},
															"referencedDeclaration": 987,
															"src": "680:17:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
																"typeString": "struct ReentrancyGuard.ReentrancyStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1005,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 1003,
														"name": "reentrancyStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1041,
														"src": "710:17:6",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ReentrancyStorage_$987_storage_ptr_$",
															"typeString": "function () pure returns (struct ReentrancyGuard.ReentrancyStorage storage pointer)"
														}
													},
													"id": 1004,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "710:19:6",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
														"typeString": "struct ReentrancyGuard.ReentrancyStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "680:49:6"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1009,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"id": 1006,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1002,
															"src": "743:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
																"typeString": "struct ReentrancyGuard.ReentrancyStorage storage pointer"
															}
														},
														"id": 1007,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "status",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 986,
														"src": "743:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1008,
														"name": "_ENTERED",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 997,
														"src": "755:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "743:20:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1013,
												"nodeType": "IfStatement",
												"src": "739:50:6",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1010,
															"name": "ReentrancyError",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 990,
															"src": "772:15:6",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1011,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "772:17:6",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1012,
													"nodeType": "RevertStatement",
													"src": "765:24:6"
												}
											},
											{
												"expression": {
													"id": 1018,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 1014,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1002,
															"src": "799:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
																"typeString": "struct ReentrancyGuard.ReentrancyStorage storage pointer"
															}
														},
														"id": 1016,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "status",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 986,
														"src": "799:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 1017,
														"name": "_ENTERED",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 997,
														"src": "810:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "799:19:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 1019,
												"nodeType": "ExpressionStatement",
												"src": "799:19:6"
											},
											{
												"id": 1020,
												"nodeType": "PlaceholderStatement",
												"src": "828:1:6"
											},
											{
												"expression": {
													"id": 1025,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 1021,
															"name": "s",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1002,
															"src": "839:1:6",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
																"typeString": "struct ReentrancyGuard.ReentrancyStorage storage pointer"
															}
														},
														"id": 1023,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "status",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 986,
														"src": "839:8:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 1024,
														"name": "_NOT_ENTERED",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 994,
														"src": "850:12:6",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "839:23:6",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 1026,
												"nodeType": "ExpressionStatement",
												"src": "839:23:6"
											}
										]
									},
									"documentation": {
										"id": 998,
										"nodeType": "StructuredDocumentation",
										"src": "623:18:6",
										"text": "Modifiers ///"
									},
									"id": 1028,
									"name": "nonReentrant",
									"nameLocation": "655:12:6",
									"nodeType": "ModifierDefinition",
									"parameters": {
										"id": 999,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "667:2:6"
									},
									"src": "646:223:6",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1040,
										"nodeType": "Block",
										"src": "1048:164:6",
										"statements": [
											{
												"assignments": [
													1036
												],
												"declarations": [
													{
														"constant": false,
														"id": 1036,
														"mutability": "mutable",
														"name": "position",
														"nameLocation": "1066:8:6",
														"nodeType": "VariableDeclaration",
														"scope": 1040,
														"src": "1058:16:6",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														"typeName": {
															"id": 1035,
															"name": "bytes32",
															"nodeType": "ElementaryTypeName",
															"src": "1058:7:6",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1038,
												"initialValue": {
													"id": 1037,
													"name": "NAMESPACE",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 984,
													"src": "1077:9:6",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1058:28:6"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "1161:45:6",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1175:21:6",
															"value": {
																"name": "position",
																"nodeType": "YulIdentifier",
																"src": "1188:8:6"
															},
															"variableNames": [
																{
																	"name": "data.slot",
																	"nodeType": "YulIdentifier",
																	"src": "1175:9:6"
																}
															]
														}
													]
												},
												"evmVersion": "istanbul",
												"externalReferences": [
													{
														"declaration": 1033,
														"isOffset": false,
														"isSlot": true,
														"src": "1175:9:6",
														"suffix": "slot",
														"valueSize": 1
													},
													{
														"declaration": 1036,
														"isOffset": false,
														"isSlot": false,
														"src": "1188:8:6",
														"valueSize": 1
													}
												],
												"id": 1039,
												"nodeType": "InlineAssembly",
												"src": "1152:54:6"
											}
										]
									},
									"documentation": {
										"id": 1029,
										"nodeType": "StructuredDocumentation",
										"src": "904:28:6",
										"text": "@dev fetch local storage"
									},
									"id": 1041,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "reentrancyStorage",
									"nameLocation": "946:17:6",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1030,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "963:2:6"
									},
									"returnParameters": {
										"id": 1034,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1033,
												"mutability": "mutable",
												"name": "data",
												"nameLocation": "1038:4:6",
												"nodeType": "VariableDeclaration",
												"scope": 1041,
												"src": "1012:30:6",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
													"typeString": "struct ReentrancyGuard.ReentrancyStorage"
												},
												"typeName": {
													"id": 1032,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1031,
														"name": "ReentrancyStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 987,
														"src": "1012:17:6"
													},
													"referencedDeclaration": 987,
													"src": "1012:17:6",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_ReentrancyStorage_$987_storage_ptr",
														"typeString": "struct ReentrancyGuard.ReentrancyStorage"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1011:32:6"
									},
									"scope": 1042,
									"src": "937:275:6",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "private"
								}
							],
							"scope": 1043,
							"src": "196:1018:6",
							"usedErrors": [
								990
							]
						}
					],
					"src": "39:1176:6"
				},
				"id": 6
			},
			"bridges/interfaces/ICBridge.sol": {
				"ast": {
					"absolutePath": "bridges/interfaces/ICBridge.sol",
					"exportedSymbols": {
						"ICBridge": [
							1087
						]
					},
					"id": 1088,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1044,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "61:22:7"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 1087,
							"linearizedBaseContracts": [
								1087
							],
							"name": "ICBridge",
							"nameLocation": "95:8:7",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"functionSelector": "a5977fbb",
									"id": 1059,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "send",
									"nameLocation": "119:4:7",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1057,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1046,
												"mutability": "mutable",
												"name": "_receiver",
												"nameLocation": "141:9:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "133:17:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1045,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "133:7:7",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1048,
												"mutability": "mutable",
												"name": "_token",
												"nameLocation": "168:6:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "160:14:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1047,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "160:7:7",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1050,
												"mutability": "mutable",
												"name": "_amount",
												"nameLocation": "192:7:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "184:15:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1049,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "184:7:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1052,
												"mutability": "mutable",
												"name": "_dstChinId",
												"nameLocation": "216:10:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "209:17:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 1051,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "209:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1054,
												"mutability": "mutable",
												"name": "_nonce",
												"nameLocation": "243:6:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "236:13:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 1053,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "236:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1056,
												"mutability": "mutable",
												"name": "_maxSlippage",
												"nameLocation": "266:12:7",
												"nodeType": "VariableDeclaration",
												"scope": 1059,
												"src": "259:19:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 1055,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "259:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "123:161:7"
									},
									"returnParameters": {
										"id": 1058,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "293:0:7"
									},
									"scope": 1087,
									"src": "110:184:7",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"functionSelector": "3f2e5fc3",
									"id": 1072,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "sendNative",
									"nameLocation": "309:10:7",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1070,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1061,
												"mutability": "mutable",
												"name": "_receiver",
												"nameLocation": "337:9:7",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "329:17:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1060,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "329:7:7",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1063,
												"mutability": "mutable",
												"name": "_amount",
												"nameLocation": "364:7:7",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "356:15:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1062,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "356:7:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1065,
												"mutability": "mutable",
												"name": "_dstChinId",
												"nameLocation": "388:10:7",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "381:17:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 1064,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "381:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1067,
												"mutability": "mutable",
												"name": "_nonce",
												"nameLocation": "415:6:7",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "408:13:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint64",
													"typeString": "uint64"
												},
												"typeName": {
													"id": 1066,
													"name": "uint64",
													"nodeType": "ElementaryTypeName",
													"src": "408:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint64",
														"typeString": "uint64"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1069,
												"mutability": "mutable",
												"name": "_maxSlippage",
												"nameLocation": "438:12:7",
												"nodeType": "VariableDeclaration",
												"scope": 1072,
												"src": "431:19:7",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint32",
													"typeString": "uint32"
												},
												"typeName": {
													"id": 1068,
													"name": "uint32",
													"nodeType": "ElementaryTypeName",
													"src": "431:6:7",
													"typeDescriptions": {
														"typeIdentifier": "t_uint32",
														"typeString": "uint32"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "319:137:7"
									},
									"returnParameters": {
										"id": 1071,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "473:0:7"
									},
									"scope": 1087,
									"src": "300:174:7",
									"stateMutability": "payable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"functionSelector": "cdd1b25d",
									"id": 1086,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "relay",
									"nameLocation": "489:5:7",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1084,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1074,
												"mutability": "mutable",
												"name": "_relayRequest",
												"nameLocation": "519:13:7",
												"nodeType": "VariableDeclaration",
												"scope": 1086,
												"src": "504:28:7",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_calldata_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 1073,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "504:5:7",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1077,
												"mutability": "mutable",
												"name": "_sigs",
												"nameLocation": "559:5:7",
												"nodeType": "VariableDeclaration",
												"scope": 1086,
												"src": "542:22:7",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
													"typeString": "bytes[]"
												},
												"typeName": {
													"baseType": {
														"id": 1075,
														"name": "bytes",
														"nodeType": "ElementaryTypeName",
														"src": "542:5:7",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes_storage_ptr",
															"typeString": "bytes"
														}
													},
													"id": 1076,
													"nodeType": "ArrayTypeName",
													"src": "542:7:7",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
														"typeString": "bytes[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1080,
												"mutability": "mutable",
												"name": "_signers",
												"nameLocation": "593:8:7",
												"nodeType": "VariableDeclaration",
												"scope": 1086,
												"src": "574:27:7",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
													"typeString": "address[]"
												},
												"typeName": {
													"baseType": {
														"id": 1078,
														"name": "address",
														"nodeType": "ElementaryTypeName",
														"src": "574:7:7",
														"stateMutability": "nonpayable",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"id": 1079,
													"nodeType": "ArrayTypeName",
													"src": "574:9:7",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
														"typeString": "address[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1083,
												"mutability": "mutable",
												"name": "_powers",
												"nameLocation": "630:7:7",
												"nodeType": "VariableDeclaration",
												"scope": 1086,
												"src": "611:26:7",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
													"typeString": "uint256[]"
												},
												"typeName": {
													"baseType": {
														"id": 1081,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "611:7:7",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1082,
													"nodeType": "ArrayTypeName",
													"src": "611:9:7",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
														"typeString": "uint256[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "494:149:7"
									},
									"returnParameters": {
										"id": 1085,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "652:0:7"
									},
									"scope": 1087,
									"src": "480:173:7",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								}
							],
							"scope": 1088,
							"src": "85:570:7",
							"usedErrors": []
						}
					],
					"src": "61:595:7"
				},
				"id": 7
			},
			"bridges/interfaces/IDiamondCut.sol": {
				"ast": {
					"absolutePath": "bridges/interfaces/IDiamondCut.sol",
					"exportedSymbols": {
						"IDiamondCut": [
							1125
						]
					},
					"id": 1126,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1089,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "32:22:8"
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "interface",
							"fullyImplemented": false,
							"id": 1125,
							"linearizedBaseContracts": [
								1125
							],
							"name": "IDiamondCut",
							"nameLocation": "66:11:8",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"canonicalName": "IDiamondCut.FacetCutAction",
									"id": 1093,
									"members": [
										{
											"id": 1090,
											"name": "Add",
											"nameLocation": "114:3:8",
											"nodeType": "EnumValue",
											"src": "114:3:8"
										},
										{
											"id": 1091,
											"name": "Replace",
											"nameLocation": "127:7:8",
											"nodeType": "EnumValue",
											"src": "127:7:8"
										},
										{
											"id": 1092,
											"name": "Remove",
											"nameLocation": "144:6:8",
											"nodeType": "EnumValue",
											"src": "144:6:8"
										}
									],
									"name": "FacetCutAction",
									"nameLocation": "89:14:8",
									"nodeType": "EnumDefinition",
									"src": "84:72:8"
								},
								{
									"canonicalName": "IDiamondCut.FacetCut",
									"id": 1102,
									"members": [
										{
											"constant": false,
											"id": 1095,
											"mutability": "mutable",
											"name": "facetAddress",
											"nameLocation": "230:12:8",
											"nodeType": "VariableDeclaration",
											"scope": 1102,
											"src": "222:20:8",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 1094,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "222:7:8",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1098,
											"mutability": "mutable",
											"name": "action",
											"nameLocation": "267:6:8",
											"nodeType": "VariableDeclaration",
											"scope": 1102,
											"src": "252:21:8",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_enum$_FacetCutAction_$1093",
												"typeString": "enum IDiamondCut.FacetCutAction"
											},
											"typeName": {
												"id": 1097,
												"nodeType": "UserDefinedTypeName",
												"pathNode": {
													"id": 1096,
													"name": "FacetCutAction",
													"nodeType": "IdentifierPath",
													"referencedDeclaration": 1093,
													"src": "252:14:8"
												},
												"referencedDeclaration": 1093,
												"src": "252:14:8",
												"typeDescriptions": {
													"typeIdentifier": "t_enum$_FacetCutAction_$1093",
													"typeString": "enum IDiamondCut.FacetCutAction"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1101,
											"mutability": "mutable",
											"name": "functionSelectors",
											"nameLocation": "292:17:8",
											"nodeType": "VariableDeclaration",
											"scope": 1102,
											"src": "283:26:8",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
												"typeString": "bytes4[]"
											},
											"typeName": {
												"baseType": {
													"id": 1099,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "283:6:8",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"id": 1100,
												"nodeType": "ArrayTypeName",
												"src": "283:8:8",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
													"typeString": "bytes4[]"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetCut",
									"nameLocation": "203:8:8",
									"nodeType": "StructDefinition",
									"scope": 1125,
									"src": "196:120:8",
									"visibility": "public"
								},
								{
									"documentation": {
										"id": 1103,
										"nodeType": "StructuredDocumentation",
										"src": "322:438:8",
										"text": "@notice Add/replace/remove any number of functions and optionally execute\n         a function with delegatecall\n @param _diamondCut Contains the facet addresses and function selectors\n @param _init The address of the contract or facet to execute _calldata\n @param _calldata A function call, including function selector and arguments\n                  _calldata is executed with delegatecall on _init"
									},
									"functionSelector": "1f931c1c",
									"id": 1114,
									"implemented": false,
									"kind": "function",
									"modifiers": [],
									"name": "diamondCut",
									"nameLocation": "774:10:8",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1112,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1107,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "814:11:8",
												"nodeType": "VariableDeclaration",
												"scope": 1114,
												"src": "794:31:8",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_calldata_ptr_$dyn_calldata_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 1105,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 1104,
															"name": "FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 1102,
															"src": "794:8:8"
														},
														"referencedDeclaration": 1102,
														"src": "794:8:8",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$1102_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 1106,
													"nodeType": "ArrayTypeName",
													"src": "794:10:8",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1109,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "843:5:8",
												"nodeType": "VariableDeclaration",
												"scope": 1114,
												"src": "835:13:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1108,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "835:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1111,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "873:9:8",
												"nodeType": "VariableDeclaration",
												"scope": 1114,
												"src": "858:24:8",
												"stateVariable": false,
												"storageLocation": "calldata",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_calldata_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 1110,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "858:5:8",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "784:104:8"
									},
									"returnParameters": {
										"id": 1113,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "897:0:8"
									},
									"scope": 1125,
									"src": "765:133:8",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "external"
								},
								{
									"anonymous": false,
									"id": 1124,
									"name": "DiamondCut",
									"nameLocation": "910:10:8",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 1123,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1118,
												"indexed": false,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "932:11:8",
												"nodeType": "VariableDeclaration",
												"scope": 1124,
												"src": "921:22:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 1116,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 1115,
															"name": "FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 1102,
															"src": "921:8:8"
														},
														"referencedDeclaration": 1102,
														"src": "921:8:8",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$1102_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 1117,
													"nodeType": "ArrayTypeName",
													"src": "921:10:8",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1120,
												"indexed": false,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "953:5:8",
												"nodeType": "VariableDeclaration",
												"scope": 1124,
												"src": "945:13:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1119,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "945:7:8",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1122,
												"indexed": false,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "966:9:8",
												"nodeType": "VariableDeclaration",
												"scope": 1124,
												"src": "960:15:8",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 1121,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "960:5:8",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "920:56:8"
									},
									"src": "904:73:8"
								}
							],
							"scope": 1126,
							"src": "56:923:8",
							"usedErrors": []
						}
					],
					"src": "32:948:8"
				},
				"id": 8
			},
			"bridges/libs/LibAsset.sol": {
				"ast": {
					"absolutePath": "bridges/libs/LibAsset.sol",
					"exportedSymbols": {
						"Address": [
							689
						],
						"IERC20": [
							77
						],
						"IERC20Permit": [
							113
						],
						"InvalidAmount": [
							693
						],
						"LibAsset": [
							1472
						],
						"NativeAssetTransferFailed": [
							715
						],
						"NativeValueWithERC": [
							705
						],
						"NoTransferToNullAddress": [
							713
						],
						"NullAddrIsNotAValidSpender": [
							709
						],
						"NullAddrIsNotAnERC20Token": [
							711
						],
						"SafeERC20": [
							394
						]
					},
					"id": 1473,
					"license": "UNLICENSED",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1127,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "68:22:9"
						},
						{
							"absolutePath": "bridges/errors/GenericErrors.sol",
							"file": "../errors/GenericErrors.sol",
							"id": 1134,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 1473,
							"sourceUnit": 720,
							"src": "91:185:9",
							"symbolAliases": [
								{
									"foreign": {
										"id": 1128,
										"name": "NullAddrIsNotAnERC20Token",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "99:25:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 1129,
										"name": "NullAddrIsNotAValidSpender",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "126:26:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 1130,
										"name": "NoTransferToNullAddress",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "154:23:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 1131,
										"name": "InvalidAmount",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "179:13:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 1132,
										"name": "NativeValueWithERC",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "194:18:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								},
								{
									"foreign": {
										"id": 1133,
										"name": "NativeAssetTransferFailed",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "214:25:9",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
							"id": 1135,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 1473,
							"sourceUnit": 395,
							"src": "277:65:9",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
							"id": 1136,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 1473,
							"sourceUnit": 78,
							"src": "343:56:9",
							"symbolAliases": [],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"documentation": {
								"id": 1137,
								"nodeType": "StructuredDocumentation",
								"src": "401:279:9",
								"text": "@title LibAsset\n @author Connext <support@connext.network>\n @notice This library contains helpers for dealing with onchain transfers\n         of assets, including accounting for the native asset `assetId`\n         conventions and any noncompliant ERC20 transfers"
							},
							"fullyImplemented": true,
							"id": 1472,
							"linearizedBaseContracts": [
								1472
							],
							"name": "LibAsset",
							"nameLocation": "688:8:9",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"constant": true,
									"id": 1144,
									"mutability": "constant",
									"name": "MAX_INT",
									"nameLocation": "728:7:9",
									"nodeType": "VariableDeclaration",
									"scope": 1472,
									"src": "703:52:9",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_uint256",
										"typeString": "uint256"
									},
									"typeName": {
										"id": 1138,
										"name": "uint256",
										"nodeType": "ElementaryTypeName",
										"src": "703:7:9",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"value": {
										"expression": {
											"arguments": [
												{
													"id": 1141,
													"isConstant": false,
													"isLValue": false,
													"isPure": true,
													"lValueRequested": false,
													"nodeType": "ElementaryTypeNameExpression",
													"src": "743:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_type$_t_uint256_$",
														"typeString": "type(uint256)"
													},
													"typeName": {
														"id": 1140,
														"name": "uint256",
														"nodeType": "ElementaryTypeName",
														"src": "743:7:9",
														"typeDescriptions": {}
													}
												}
											],
											"expression": {
												"argumentTypes": [
													{
														"typeIdentifier": "t_type$_t_uint256_$",
														"typeString": "type(uint256)"
													}
												],
												"id": 1139,
												"name": "type",
												"nodeType": "Identifier",
												"overloadedDeclarations": [],
												"referencedDeclaration": 4294967269,
												"src": "738:4:9",
												"typeDescriptions": {
													"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
													"typeString": "function () pure"
												}
											},
											"id": 1142,
											"isConstant": false,
											"isLValue": false,
											"isPure": true,
											"kind": "functionCall",
											"lValueRequested": false,
											"names": [],
											"nodeType": "FunctionCall",
											"src": "738:13:9",
											"tryCall": false,
											"typeDescriptions": {
												"typeIdentifier": "t_magic_meta_type_t_uint256",
												"typeString": "type(uint256)"
											}
										},
										"id": 1143,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"lValueRequested": false,
										"memberName": "max",
										"nodeType": "MemberAccess",
										"src": "738:17:9",
										"typeDescriptions": {
											"typeIdentifier": "t_uint256",
											"typeString": "uint256"
										}
									},
									"visibility": "private"
								},
								{
									"constant": true,
									"id": 1147,
									"mutability": "constant",
									"name": "NULL_ADDRESS",
									"nameLocation": "788:12:9",
									"nodeType": "VariableDeclaration",
									"scope": 1472,
									"src": "762:91:9",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 1145,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "762:7:9",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": {
										"hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030303030",
										"id": 1146,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "number",
										"lValueRequested": false,
										"nodeType": "Literal",
										"src": "811:42:9",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										},
										"value": "0x0000000000000000000000000000000000000000"
									},
									"visibility": "internal"
								},
								{
									"constant": true,
									"documentation": {
										"id": 1148,
										"nodeType": "StructuredDocumentation",
										"src": "873:95:9",
										"text": "@dev All native assets use the empty address for their asset id\n      by convention"
									},
									"id": 1151,
									"mutability": "constant",
									"name": "NATIVE_ASSETID",
									"nameLocation": "999:14:9",
									"nodeType": "VariableDeclaration",
									"scope": 1472,
									"src": "973:55:9",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_address",
										"typeString": "address"
									},
									"typeName": {
										"id": 1149,
										"name": "address",
										"nodeType": "ElementaryTypeName",
										"src": "973:7:9",
										"stateMutability": "nonpayable",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"value": {
										"id": 1150,
										"name": "NULL_ADDRESS",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"referencedDeclaration": 1147,
										"src": "1016:12:9",
										"typeDescriptions": {
											"typeIdentifier": "t_address",
											"typeString": "address"
										}
									},
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1178,
										"nodeType": "Block",
										"src": "1327:160:9",
										"statements": [
											{
												"expression": {
													"condition": {
														"commonType": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														"id": 1161,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"leftExpression": {
															"id": 1159,
															"name": "assetId",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1154,
															"src": "1356:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"nodeType": "BinaryOperation",
														"operator": "==",
														"rightExpression": {
															"id": 1160,
															"name": "NATIVE_ASSETID",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1151,
															"src": "1367:14:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"src": "1356:25:9",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"arguments": [
															{
																"arguments": [
																	{
																		"id": 1173,
																		"name": "this",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967268,
																		"src": "1474:4:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_LibAsset_$1472",
																			"typeString": "library LibAsset"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_LibAsset_$1472",
																			"typeString": "library LibAsset"
																		}
																	],
																	"id": 1172,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "1466:7:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 1171,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "1466:7:9",
																		"typeDescriptions": {}
																	}
																},
																"id": 1174,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "1466:13:9",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															],
															"expression": {
																"arguments": [
																	{
																		"id": 1168,
																		"name": "assetId",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1154,
																		"src": "1447:7:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 1167,
																	"name": "IERC20",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 77,
																	"src": "1440:6:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																		"typeString": "type(contract IERC20)"
																	}
																},
																"id": 1169,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "1440:15:9",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															"id": 1170,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "balanceOf",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 34,
															"src": "1440:25:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
																"typeString": "function (address) view external returns (uint256)"
															}
														},
														"id": 1175,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "1440:40:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1176,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "1356:124:9",
													"trueExpression": {
														"expression": {
															"arguments": [
																{
																	"id": 1164,
																	"name": "this",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967268,
																	"src": "1408:4:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_LibAsset_$1472",
																		"typeString": "library LibAsset"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_LibAsset_$1472",
																		"typeString": "library LibAsset"
																	}
																],
																"id": 1163,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "1400:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 1162,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "1400:7:9",
																	"typeDescriptions": {}
																}
															},
															"id": 1165,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "1400:13:9",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"id": 1166,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "balance",
														"nodeType": "MemberAccess",
														"src": "1400:21:9",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"functionReturnParameters": 1158,
												"id": 1177,
												"nodeType": "Return",
												"src": "1337:143:9"
											}
										]
									},
									"documentation": {
										"id": 1152,
										"nodeType": "StructuredDocumentation",
										"src": "1048:202:9",
										"text": "@notice Gets the balance of the inheriting contract for the given asset\n @param assetId The asset identifier to get the balance of\n @return Balance held by contracts using this library"
									},
									"id": 1179,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "getOwnBalance",
									"nameLocation": "1264:13:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1155,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1154,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "1286:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1179,
												"src": "1278:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1153,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1278:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1277:17:9"
									},
									"returnParameters": {
										"id": 1158,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1157,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1179,
												"src": "1318:7:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1156,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1318:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1317:9:9"
									},
									"scope": 1472,
									"src": "1255:232:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1209,
										"nodeType": "Block",
										"src": "1789:259:9",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1189,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1187,
														"name": "recipient",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1182,
														"src": "1803:9:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address_payable",
															"typeString": "address payable"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1188,
														"name": "NULL_ADDRESS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1147,
														"src": "1816:12:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "1803:25:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1193,
												"nodeType": "IfStatement",
												"src": "1799:63:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1190,
															"name": "NoTransferToNullAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 713,
															"src": "1837:23:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1191,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "1837:25:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1192,
													"nodeType": "RevertStatement",
													"src": "1830:32:9"
												}
											},
											{
												"assignments": [
													1195,
													null
												],
												"declarations": [
													{
														"constant": false,
														"id": 1195,
														"mutability": "mutable",
														"name": "success",
														"nameLocation": "1937:7:9",
														"nodeType": "VariableDeclaration",
														"scope": 1209,
														"src": "1932:12:9",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														},
														"typeName": {
															"id": 1194,
															"name": "bool",
															"nodeType": "ElementaryTypeName",
															"src": "1932:4:9",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														"visibility": "internal"
													},
													null
												],
												"id": 1202,
												"initialValue": {
													"arguments": [
														{
															"hexValue": "",
															"id": 1200,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "1980:2:9",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																"typeString": "literal_string \"\""
															},
															"value": ""
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																"typeString": "literal_string \"\""
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
																	"typeString": "literal_string \"\""
																}
															],
															"expression": {
																"id": 1196,
																"name": "recipient",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1182,
																"src": "1950:9:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																}
															},
															"id": 1197,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "call",
															"nodeType": "MemberAccess",
															"src": "1950:14:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
																"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
															}
														},
														"id": 1199,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"names": [
															"value"
														],
														"nodeType": "FunctionCallOptions",
														"options": [
															{
																"id": 1198,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1184,
																"src": "1972:6:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"src": "1950:29:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
															"typeString": "function (bytes memory) payable returns (bool,bytes memory)"
														}
													},
													"id": 1201,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1950:33:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
														"typeString": "tuple(bool,bytes memory)"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1931:52:9"
											},
											{
												"condition": {
													"id": 1204,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "UnaryOperation",
													"operator": "!",
													"prefix": true,
													"src": "1997:8:9",
													"subExpression": {
														"id": 1203,
														"name": "success",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1195,
														"src": "1998:7:9",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1208,
												"nodeType": "IfStatement",
												"src": "1993:48:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1205,
															"name": "NativeAssetTransferFailed",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 715,
															"src": "2014:25:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1206,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2014:27:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1207,
													"nodeType": "RevertStatement",
													"src": "2007:34:9"
												}
											}
										]
									},
									"documentation": {
										"id": 1180,
										"nodeType": "StructuredDocumentation",
										"src": "1493:199:9",
										"text": "@notice Transfers ether from the inheriting contract to a given\n         recipient\n @param recipient Address to send ether to\n @param amount Amount to send to given recipient"
									},
									"id": 1210,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "transferNativeAsset",
									"nameLocation": "1706:19:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1185,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1182,
												"mutability": "mutable",
												"name": "recipient",
												"nameLocation": "1742:9:9",
												"nodeType": "VariableDeclaration",
												"scope": 1210,
												"src": "1726:25:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												"typeName": {
													"id": 1181,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1726:15:9",
													"stateMutability": "payable",
													"typeDescriptions": {
														"typeIdentifier": "t_address_payable",
														"typeString": "address payable"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1184,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "1761:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1210,
												"src": "1753:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1183,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "1753:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1725:43:9"
									},
									"returnParameters": {
										"id": 1186,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1789:0:9"
									},
									"scope": 1472,
									"src": "1697:351:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 1261,
										"nodeType": "Block",
										"src": "2397:310:9",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1226,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"arguments": [
															{
																"id": 1223,
																"name": "assetId",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1214,
																"src": "2419:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															],
															"id": 1222,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "2411:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_address_$",
																"typeString": "type(address)"
															},
															"typeName": {
																"id": 1221,
																"name": "address",
																"nodeType": "ElementaryTypeName",
																"src": "2411:7:9",
																"typeDescriptions": {}
															}
														},
														"id": 1224,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2411:16:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1225,
														"name": "NATIVE_ASSETID",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1151,
														"src": "2431:14:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2411:34:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1228,
												"nodeType": "IfStatement",
												"src": "2407:47:9",
												"trueBody": {
													"functionReturnParameters": 1220,
													"id": 1227,
													"nodeType": "Return",
													"src": "2447:7:9"
												}
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1231,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1229,
														"name": "spender",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1216,
														"src": "2467:7:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1230,
														"name": "NULL_ADDRESS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1147,
														"src": "2478:12:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2467:23:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1235,
												"nodeType": "IfStatement",
												"src": "2463:64:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1232,
															"name": "NullAddrIsNotAValidSpender",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 709,
															"src": "2499:26:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1233,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2499:28:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1234,
													"nodeType": "RevertStatement",
													"src": "2492:35:9"
												}
											},
											{
												"assignments": [
													1237
												],
												"declarations": [
													{
														"constant": false,
														"id": 1237,
														"mutability": "mutable",
														"name": "allowance",
														"nameLocation": "2545:9:9",
														"nodeType": "VariableDeclaration",
														"scope": 1261,
														"src": "2537:17:9",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 1236,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "2537:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1246,
												"initialValue": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 1242,
																	"name": "this",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967268,
																	"src": "2583:4:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_contract$_LibAsset_$1472",
																		"typeString": "library LibAsset"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_contract$_LibAsset_$1472",
																		"typeString": "library LibAsset"
																	}
																],
																"id": 1241,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"lValueRequested": false,
																"nodeType": "ElementaryTypeNameExpression",
																"src": "2575:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_address_$",
																	"typeString": "type(address)"
																},
																"typeName": {
																	"id": 1240,
																	"name": "address",
																	"nodeType": "ElementaryTypeName",
																	"src": "2575:7:9",
																	"typeDescriptions": {}
																}
															},
															"id": 1243,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2575:13:9",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1244,
															"name": "spender",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1216,
															"src": "2590:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"id": 1238,
															"name": "assetId",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1214,
															"src": "2557:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														"id": 1239,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "allowance",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 54,
														"src": "2557:17:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
															"typeString": "function (address,address) view external returns (uint256)"
														}
													},
													"id": 1245,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2557:41:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "2537:61:9"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1249,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1247,
														"name": "allowance",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1237,
														"src": "2612:9:9",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"id": 1248,
														"name": "amount",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1218,
														"src": "2624:6:9",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2612:18:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1260,
												"nodeType": "IfStatement",
												"src": "2608:92:9",
												"trueBody": {
													"expression": {
														"arguments": [
															{
																"arguments": [
																	{
																		"id": 1254,
																		"name": "assetId",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1214,
																		"src": "2673:7:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_IERC20_$77",
																			"typeString": "contract IERC20"
																		}
																	],
																	"id": 1253,
																	"name": "IERC20",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 77,
																	"src": "2666:6:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																		"typeString": "type(contract IERC20)"
																	}
																},
																"id": 1255,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "2666:15:9",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																}
															},
															{
																"id": 1256,
																"name": "spender",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1216,
																"src": "2683:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															{
																"id": 1257,
																"name": "MAX_INT",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1144,
																"src": "2692:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_contract$_IERC20_$77",
																	"typeString": "contract IERC20"
																},
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"expression": {
																"id": 1250,
																"name": "SafeERC20",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 394,
																"src": "2644:9:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_SafeERC20_$394_$",
																	"typeString": "type(library SafeERC20)"
																}
															},
															"id": 1252,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "safeApprove",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 215,
															"src": "2644:21:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$",
																"typeString": "function (contract IERC20,address,uint256)"
															}
														},
														"id": 1258,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "2644:56:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1259,
													"nodeType": "ExpressionStatement",
													"src": "2644:56:9"
												}
											}
										]
									},
									"documentation": {
										"id": 1211,
										"nodeType": "StructuredDocumentation",
										"src": "2054:225:9",
										"text": "@notice Gives MAX approval for another address to spend tokens\n @param assetId Token address to transfer\n @param spender Address to give spend approval to\n @param amount Amount to approve for spending"
									},
									"id": 1262,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "maxApproveERC20",
									"nameLocation": "2293:15:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1219,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1214,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "2325:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1262,
												"src": "2318:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_contract$_IERC20_$77",
													"typeString": "contract IERC20"
												},
												"typeName": {
													"id": 1213,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1212,
														"name": "IERC20",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 77,
														"src": "2318:6:9"
													},
													"referencedDeclaration": 77,
													"src": "2318:6:9",
													"typeDescriptions": {
														"typeIdentifier": "t_contract$_IERC20_$77",
														"typeString": "contract IERC20"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1216,
												"mutability": "mutable",
												"name": "spender",
												"nameLocation": "2350:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1262,
												"src": "2342:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1215,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2342:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1218,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "2375:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1262,
												"src": "2367:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1217,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "2367:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2308:79:9"
									},
									"returnParameters": {
										"id": 1220,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2397:0:9"
									},
									"scope": 1472,
									"src": "2284:423:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1289,
										"nodeType": "Block",
										"src": "3080:147:9",
										"statements": [
											{
												"condition": {
													"arguments": [
														{
															"id": 1273,
															"name": "assetId",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1265,
															"src": "3108:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 1272,
														"name": "isNativeAsset",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1428,
														"src": "3094:13:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
															"typeString": "function (address) pure returns (bool)"
														}
													},
													"id": 1274,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3094:22:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1278,
												"nodeType": "IfStatement",
												"src": "3090:62:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1275,
															"name": "NullAddrIsNotAnERC20Token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 711,
															"src": "3125:25:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1276,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3125:27:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1277,
													"nodeType": "RevertStatement",
													"src": "3118:34:9"
												}
											},
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 1283,
																	"name": "assetId",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1265,
																	"src": "3192:7:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 1282,
																"name": "IERC20",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 77,
																"src": "3185:6:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																	"typeString": "type(contract IERC20)"
																}
															},
															"id": 1284,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "3185:15:9",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"id": 1285,
															"name": "recipient",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1267,
															"src": "3202:9:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1286,
															"name": "amount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1269,
															"src": "3213:6:9",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"expression": {
															"id": 1279,
															"name": "SafeERC20",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 394,
															"src": "3162:9:9",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_SafeERC20_$394_$",
																"typeString": "type(library SafeERC20)"
															}
														},
														"id": 1281,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "safeTransfer",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 145,
														"src": "3162:22:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (contract IERC20,address,uint256)"
														}
													},
													"id": 1287,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3162:58:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1288,
												"nodeType": "ExpressionStatement",
												"src": "3162:58:9"
											}
										]
									},
									"documentation": {
										"id": 1263,
										"nodeType": "StructuredDocumentation",
										"src": "2713:249:9",
										"text": "@notice Transfers tokens from the inheriting contract to a given\n         recipient\n @param assetId Token address to transfer\n @param recipient Address to send token to\n @param amount Amount to send to given recipient"
									},
									"id": 1290,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "transferERC20",
									"nameLocation": "2976:13:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1270,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1265,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "3007:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1290,
												"src": "2999:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1264,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2999:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1267,
												"mutability": "mutable",
												"name": "recipient",
												"nameLocation": "3032:9:9",
												"nodeType": "VariableDeclaration",
												"scope": 1290,
												"src": "3024:17:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1266,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3024:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1269,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "3059:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1290,
												"src": "3051:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1268,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3051:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2989:82:9"
									},
									"returnParameters": {
										"id": 1271,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3080:0:9"
									},
									"scope": 1472,
									"src": "2967:260:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "private"
								},
								{
									"body": {
										"id": 1327,
										"nodeType": "Block",
										"src": "3637:219:9",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1304,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1302,
														"name": "assetId",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1293,
														"src": "3651:7:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1303,
														"name": "NATIVE_ASSETID",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1151,
														"src": "3662:14:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "3651:25:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1308,
												"nodeType": "IfStatement",
												"src": "3647:65:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1305,
															"name": "NullAddrIsNotAnERC20Token",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 711,
															"src": "3685:25:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1306,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3685:27:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1307,
													"nodeType": "RevertStatement",
													"src": "3678:34:9"
												}
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1311,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1309,
														"name": "to",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1297,
														"src": "3726:2:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1310,
														"name": "NULL_ADDRESS",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1147,
														"src": "3732:12:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "3726:18:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1315,
												"nodeType": "IfStatement",
												"src": "3722:56:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1312,
															"name": "NoTransferToNullAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 713,
															"src": "3753:23:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1313,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "3753:25:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1314,
													"nodeType": "RevertStatement",
													"src": "3746:32:9"
												}
											},
											{
												"expression": {
													"arguments": [
														{
															"arguments": [
																{
																	"id": 1320,
																	"name": "assetId",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1293,
																	"src": "3822:7:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																}
															],
															"expression": {
																"argumentTypes": [
																	{
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																],
																"id": 1319,
																"name": "IERC20",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 77,
																"src": "3815:6:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_type$_t_contract$_IERC20_$77_$",
																	"typeString": "type(contract IERC20)"
																}
															},
															"id": 1321,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "typeConversion",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "3815:15:9",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															}
														},
														{
															"id": 1322,
															"name": "from",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1295,
															"src": "3832:4:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1323,
															"name": "to",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1297,
															"src": "3838:2:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1324,
															"name": "amount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1299,
															"src": "3842:6:9",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_contract$_IERC20_$77",
																"typeString": "contract IERC20"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"expression": {
															"id": 1316,
															"name": "SafeERC20",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 394,
															"src": "3788:9:9",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_contract$_SafeERC20_$394_$",
																"typeString": "type(library SafeERC20)"
															}
														},
														"id": 1318,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "safeTransferFrom",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 171,
														"src": "3788:26:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$77_$_t_address_$_t_address_$_t_uint256_$returns$__$",
															"typeString": "function (contract IERC20,address,address,uint256)"
														}
													},
													"id": 1325,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3788:61:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1326,
												"nodeType": "ExpressionStatement",
												"src": "3788:61:9"
											}
										]
									},
									"documentation": {
										"id": 1291,
										"nodeType": "StructuredDocumentation",
										"src": "3233:266:9",
										"text": "@notice Transfers tokens from a sender to a given recipient\n @param assetId Token address to transfer\n @param from Address of sender/owner\n @param to Address of recipient/spender\n @param amount Amount to transfer from owner to spender"
									},
									"id": 1328,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "transferFromERC20",
									"nameLocation": "3513:17:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1300,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1293,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "3548:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1328,
												"src": "3540:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1292,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3540:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1295,
												"mutability": "mutable",
												"name": "from",
												"nameLocation": "3573:4:9",
												"nodeType": "VariableDeclaration",
												"scope": 1328,
												"src": "3565:12:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1294,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3565:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1297,
												"mutability": "mutable",
												"name": "to",
												"nameLocation": "3595:2:9",
												"nodeType": "VariableDeclaration",
												"scope": 1328,
												"src": "3587:10:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1296,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3587:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1299,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "3615:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1328,
												"src": "3607:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1298,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "3607:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3530:97:9"
									},
									"returnParameters": {
										"id": 1301,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3637:0:9"
									},
									"scope": 1472,
									"src": "3504:352:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1397,
										"nodeType": "Block",
										"src": "4211:583:9",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1340,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1338,
														"name": "amount",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1333,
														"src": "4225:6:9",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 1339,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "4235:1:9",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "4225:11:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1344,
												"nodeType": "IfStatement",
												"src": "4221:39:9",
												"trueBody": {
													"errorCall": {
														"arguments": [],
														"expression": {
															"argumentTypes": [],
															"id": 1341,
															"name": "InvalidAmount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 693,
															"src": "4245:13:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_error_pure$__$returns$__$",
																"typeString": "function () pure"
															}
														},
														"id": 1342,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "4245:15:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1343,
													"nodeType": "RevertStatement",
													"src": "4238:22:9"
												}
											},
											{
												"condition": {
													"id": 1345,
													"name": "isNative",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 1335,
													"src": "4274:8:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 1395,
													"nodeType": "Block",
													"src": "4362:426:9",
													"statements": [
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 1358,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 1355,
																		"name": "msg",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967281,
																		"src": "4380:3:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_message",
																			"typeString": "msg"
																		}
																	},
																	"id": 1356,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "value",
																	"nodeType": "MemberAccess",
																	"src": "4380:9:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"hexValue": "30",
																	"id": 1357,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "4393:1:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_0_by_1",
																		"typeString": "int_const 0"
																	},
																	"value": "0"
																},
																"src": "4380:14:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 1362,
															"nodeType": "IfStatement",
															"src": "4376:47:9",
															"trueBody": {
																"errorCall": {
																	"arguments": [],
																	"expression": {
																		"argumentTypes": [],
																		"id": 1359,
																		"name": "NativeValueWithERC",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 705,
																		"src": "4403:18:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_error_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1360,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "4403:20:9",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_tuple$__$",
																		"typeString": "tuple()"
																	}
																},
																"id": 1361,
																"nodeType": "RevertStatement",
																"src": "4396:27:9"
															}
														},
														{
															"assignments": [
																1364
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1364,
																	"mutability": "mutable",
																	"name": "_fromTokenBalance",
																	"nameLocation": "4445:17:9",
																	"nodeType": "VariableDeclaration",
																	"scope": 1395,
																	"src": "4437:25:9",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 1363,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "4437:7:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1369,
															"initialValue": {
																"arguments": [
																	{
																		"id": 1367,
																		"name": "tokenId",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1331,
																		"src": "4488:7:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"expression": {
																		"id": 1365,
																		"name": "LibAsset",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1472,
																		"src": "4465:8:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_contract$_LibAsset_$1472_$",
																			"typeString": "type(library LibAsset)"
																		}
																	},
																	"id": 1366,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "getOwnBalance",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1179,
																	"src": "4465:22:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
																		"typeString": "function (address) view returns (uint256)"
																	}
																},
																"id": 1368,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4465:31:9",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "4437:59:9"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1373,
																		"name": "tokenId",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1331,
																		"src": "4554:7:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"expression": {
																			"id": 1374,
																			"name": "msg",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967281,
																			"src": "4579:3:9",
																			"typeDescriptions": {
																				"typeIdentifier": "t_magic_message",
																				"typeString": "msg"
																			}
																		},
																		"id": 1375,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "sender",
																		"nodeType": "MemberAccess",
																		"src": "4579:10:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"arguments": [
																			{
																				"id": 1378,
																				"name": "this",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 4294967268,
																				"src": "4615:4:9",
																				"typeDescriptions": {
																					"typeIdentifier": "t_contract$_LibAsset_$1472",
																					"typeString": "library LibAsset"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_contract$_LibAsset_$1472",
																					"typeString": "library LibAsset"
																				}
																			],
																			"id": 1377,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"nodeType": "ElementaryTypeNameExpression",
																			"src": "4607:7:9",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_address_$",
																				"typeString": "type(address)"
																			},
																			"typeName": {
																				"id": 1376,
																				"name": "address",
																				"nodeType": "ElementaryTypeName",
																				"src": "4607:7:9",
																				"typeDescriptions": {}
																			}
																		},
																		"id": 1379,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "typeConversion",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "4607:13:9",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 1380,
																		"name": "amount",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1333,
																		"src": "4638:6:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	],
																	"expression": {
																		"id": 1370,
																		"name": "LibAsset",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1472,
																		"src": "4510:8:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_contract$_LibAsset_$1472_$",
																			"typeString": "type(library LibAsset)"
																		}
																	},
																	"id": 1372,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "transferFromERC20",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1328,
																	"src": "4510:26:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
																		"typeString": "function (address,address,address,uint256)"
																	}
																},
																"id": 1381,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4510:148:9",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1382,
															"nodeType": "ExpressionStatement",
															"src": "4510:148:9"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 1390,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"commonType": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"id": 1388,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"arguments": [
																			{
																				"id": 1385,
																				"name": "tokenId",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 1331,
																				"src": "4699:7:9",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			}
																		],
																		"expression": {
																			"argumentTypes": [
																				{
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			],
																			"expression": {
																				"id": 1383,
																				"name": "LibAsset",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 1472,
																				"src": "4676:8:9",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_contract$_LibAsset_$1472_$",
																					"typeString": "type(library LibAsset)"
																				}
																			},
																			"id": 1384,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "getOwnBalance",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1179,
																			"src": "4676:22:9",
																			"typeDescriptions": {
																				"typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
																				"typeString": "function (address) view returns (uint256)"
																			}
																		},
																		"id": 1386,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"kind": "functionCall",
																		"lValueRequested": false,
																		"names": [],
																		"nodeType": "FunctionCall",
																		"src": "4676:31:9",
																		"tryCall": false,
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "-",
																	"rightExpression": {
																		"id": 1387,
																		"name": "_fromTokenBalance",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1364,
																		"src": "4710:17:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"src": "4676:51:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"id": 1389,
																	"name": "amount",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1333,
																	"src": "4731:6:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "4676:61:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 1394,
															"nodeType": "IfStatement",
															"src": "4672:105:9",
															"trueBody": {
																"errorCall": {
																	"arguments": [],
																	"expression": {
																		"argumentTypes": [],
																		"id": 1391,
																		"name": "InvalidAmount",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 693,
																		"src": "4762:13:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_error_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1392,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "4762:15:9",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_tuple$__$",
																		"typeString": "tuple()"
																	}
																},
																"id": 1393,
																"nodeType": "RevertStatement",
																"src": "4755:22:9"
															}
														}
													]
												},
												"id": 1396,
												"nodeType": "IfStatement",
												"src": "4270:518:9",
												"trueBody": {
													"id": 1354,
													"nodeType": "Block",
													"src": "4284:72:9",
													"statements": [
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 1349,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"id": 1346,
																		"name": "msg",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967281,
																		"src": "4302:3:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_magic_message",
																			"typeString": "msg"
																		}
																	},
																	"id": 1347,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "value",
																	"nodeType": "MemberAccess",
																	"src": "4302:9:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"id": 1348,
																	"name": "amount",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1333,
																	"src": "4315:6:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "4302:19:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 1353,
															"nodeType": "IfStatement",
															"src": "4298:47:9",
															"trueBody": {
																"errorCall": {
																	"arguments": [],
																	"expression": {
																		"argumentTypes": [],
																		"id": 1350,
																		"name": "InvalidAmount",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 693,
																		"src": "4330:13:9",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_error_pure$__$returns$__$",
																			"typeString": "function () pure"
																		}
																	},
																	"id": 1351,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "4330:15:9",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_tuple$__$",
																		"typeString": "tuple()"
																	}
																},
																"id": 1352,
																"nodeType": "RevertStatement",
																"src": "4323:22:9"
															}
														}
													]
												}
											}
										]
									},
									"documentation": {
										"id": 1329,
										"nodeType": "StructuredDocumentation",
										"src": "3862:235:9",
										"text": "@notice Deposits an asset into the contract and performs checks to avoid NativeValueWithERC\n @param tokenId Token to deposit\n @param amount Amount to deposit\n @param isNative Wether the token is native or ERC20"
									},
									"id": 1398,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "depositAsset",
									"nameLocation": "4111:12:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1336,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1331,
												"mutability": "mutable",
												"name": "tokenId",
												"nameLocation": "4141:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1398,
												"src": "4133:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1330,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4133:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1333,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "4166:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1398,
												"src": "4158:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1332,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "4158:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1335,
												"mutability": "mutable",
												"name": "isNative",
												"nameLocation": "4187:8:9",
												"nodeType": "VariableDeclaration",
												"scope": 1398,
												"src": "4182:13:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 1334,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "4182:4:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4123:78:9"
									},
									"returnParameters": {
										"id": 1337,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "4211:0:9"
									},
									"scope": 1472,
									"src": "4102:692:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1414,
										"nodeType": "Block",
										"src": "5034:80:9",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 1407,
															"name": "tokenId",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1401,
															"src": "5064:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1408,
															"name": "amount",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1403,
															"src": "5073:6:9",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 1411,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1409,
																"name": "tokenId",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1401,
																"src": "5081:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"id": 1410,
																"name": "NATIVE_ASSETID",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1151,
																"src": "5092:14:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "5081:25:9",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														],
														"id": 1406,
														"name": "depositAsset",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															1398,
															1415
														],
														"referencedDeclaration": 1398,
														"src": "5051:12:9",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$",
															"typeString": "function (address,uint256,bool)"
														}
													},
													"id": 1412,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5051:56:9",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"functionReturnParameters": 1405,
												"id": 1413,
												"nodeType": "Return",
												"src": "5044:63:9"
											}
										]
									},
									"documentation": {
										"id": 1399,
										"nodeType": "StructuredDocumentation",
										"src": "4800:165:9",
										"text": "@notice Overload for depositAsset(address tokenId, uint256 amount, bool isNative)\n @param tokenId Token to deposit\n @param amount Amount to deposit"
									},
									"id": 1415,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "depositAsset",
									"nameLocation": "4979:12:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1404,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1401,
												"mutability": "mutable",
												"name": "tokenId",
												"nameLocation": "5000:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1415,
												"src": "4992:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1400,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "4992:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1403,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "5017:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1415,
												"src": "5009:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1402,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "5009:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "4991:33:9"
									},
									"returnParameters": {
										"id": 1405,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5034:0:9"
									},
									"scope": 1472,
									"src": "4970:144:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1427,
										"nodeType": "Block",
										"src": "5386:49:9",
										"statements": [
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 1425,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1423,
														"name": "assetId",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1418,
														"src": "5403:7:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"id": 1424,
														"name": "NATIVE_ASSETID",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1151,
														"src": "5414:14:9",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "5403:25:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 1422,
												"id": 1426,
												"nodeType": "Return",
												"src": "5396:32:9"
											}
										]
									},
									"documentation": {
										"id": 1416,
										"nodeType": "StructuredDocumentation",
										"src": "5120:192:9",
										"text": "@notice Determines whether the given assetId is the native asset\n @param assetId The asset identifier to evaluate\n @return Boolean indicating if the asset is the native asset"
									},
									"id": 1428,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "isNativeAsset",
									"nameLocation": "5326:13:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1419,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1418,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "5348:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1428,
												"src": "5340:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1417,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5340:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5339:17:9"
									},
									"returnParameters": {
										"id": 1422,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1421,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1428,
												"src": "5380:4:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 1420,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "5380:4:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5379:6:9"
									},
									"scope": 1472,
									"src": "5317:118:9",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1453,
										"nodeType": "Block",
										"src": "6031:153:9",
										"statements": [
											{
												"expression": {
													"condition": {
														"components": [
															{
																"commonType": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																"id": 1440,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1438,
																	"name": "assetId",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1431,
																	"src": "6042:7:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "==",
																"rightExpression": {
																	"id": 1439,
																	"name": "NATIVE_ASSETID",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1151,
																	"src": "6053:14:9",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"src": "6042:25:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															}
														],
														"id": 1441,
														"isConstant": false,
														"isInlineArray": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "TupleExpression",
														"src": "6041:27:9",
														"typeDescriptions": {
															"typeIdentifier": "t_bool",
															"typeString": "bool"
														}
													},
													"falseExpression": {
														"arguments": [
															{
																"id": 1447,
																"name": "assetId",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1431,
																"src": "6150:7:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															{
																"id": 1448,
																"name": "recipient",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1433,
																"src": "6159:9:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																}
															},
															{
																"id": 1449,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1435,
																"src": "6170:6:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																{
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																},
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 1446,
															"name": "transferERC20",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1290,
															"src": "6136:13:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
																"typeString": "function (address,address,uint256)"
															}
														},
														"id": 1450,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "6136:41:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"id": 1451,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "Conditional",
													"src": "6041:136:9",
													"trueExpression": {
														"arguments": [
															{
																"id": 1443,
																"name": "recipient",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1433,
																"src": "6103:9:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																}
															},
															{
																"id": 1444,
																"name": "amount",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1435,
																"src": "6114:6:9",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_address_payable",
																	"typeString": "address payable"
																},
																{
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															],
															"id": 1442,
															"name": "transferNativeAsset",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1210,
															"src": "6083:19:9",
															"typeDescriptions": {
																"typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$",
																"typeString": "function (address payable,uint256)"
															}
														},
														"id": 1445,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"kind": "functionCall",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "6083:38:9",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_tuple$__$",
															"typeString": "tuple()"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1452,
												"nodeType": "ExpressionStatement",
												"src": "6041:136:9"
											}
										]
									},
									"documentation": {
										"id": 1429,
										"nodeType": "StructuredDocumentation",
										"src": "5441:463:9",
										"text": "@notice Wrapper function to transfer a given asset (native or erc20) to\n         some recipient. Should handle all non-compliant return value\n         tokens as well by using the SafeERC20 contract by open zeppelin.\n @param assetId Asset id for transfer (address(0) for native asset,\n                token address for erc20s)\n @param recipient Address to send asset to\n @param amount Amount to send to given recipient"
									},
									"id": 1454,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "transferAsset",
									"nameLocation": "5918:13:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1436,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1431,
												"mutability": "mutable",
												"name": "assetId",
												"nameLocation": "5949:7:9",
												"nodeType": "VariableDeclaration",
												"scope": 1454,
												"src": "5941:15:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1430,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5941:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1433,
												"mutability": "mutable",
												"name": "recipient",
												"nameLocation": "5982:9:9",
												"nodeType": "VariableDeclaration",
												"scope": 1454,
												"src": "5966:25:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address_payable",
													"typeString": "address payable"
												},
												"typeName": {
													"id": 1432,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5966:15:9",
													"stateMutability": "payable",
													"typeDescriptions": {
														"typeIdentifier": "t_address_payable",
														"typeString": "address payable"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1435,
												"mutability": "mutable",
												"name": "amount",
												"nameLocation": "6009:6:9",
												"nodeType": "VariableDeclaration",
												"scope": 1454,
												"src": "6001:14:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												},
												"typeName": {
													"id": 1434,
													"name": "uint256",
													"nodeType": "ElementaryTypeName",
													"src": "6001:7:9",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5931:90:9"
									},
									"returnParameters": {
										"id": 1437,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6031:0:9"
									},
									"scope": 1472,
									"src": "5909:275:9",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1470,
										"nodeType": "Block",
										"src": "6340:186:9",
										"statements": [
											{
												"assignments": [
													1463
												],
												"declarations": [
													{
														"constant": false,
														"id": 1463,
														"mutability": "mutable",
														"name": "size",
														"nameLocation": "6358:4:9",
														"nodeType": "VariableDeclaration",
														"scope": 1470,
														"src": "6350:12:9",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 1462,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "6350:7:9",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1464,
												"nodeType": "VariableDeclarationStatement",
												"src": "6350:12:9"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "6437:58:9",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "6451:34:9",
															"value": {
																"arguments": [
																	{
																		"name": "_contractAddr",
																		"nodeType": "YulIdentifier",
																		"src": "6471:13:9"
																	}
																],
																"functionName": {
																	"name": "extcodesize",
																	"nodeType": "YulIdentifier",
																	"src": "6459:11:9"
																},
																"nodeType": "YulFunctionCall",
																"src": "6459:26:9"
															},
															"variableNames": [
																{
																	"name": "size",
																	"nodeType": "YulIdentifier",
																	"src": "6451:4:9"
																}
															]
														}
													]
												},
												"evmVersion": "istanbul",
												"externalReferences": [
													{
														"declaration": 1457,
														"isOffset": false,
														"isSlot": false,
														"src": "6471:13:9",
														"valueSize": 1
													},
													{
														"declaration": 1463,
														"isOffset": false,
														"isSlot": false,
														"src": "6451:4:9",
														"valueSize": 1
													}
												],
												"id": 1465,
												"nodeType": "InlineAssembly",
												"src": "6428:67:9"
											},
											{
												"expression": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1468,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1466,
														"name": "size",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1463,
														"src": "6511:4:9",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": ">",
													"rightExpression": {
														"hexValue": "30",
														"id": 1467,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "6518:1:9",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "6511:8:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"functionReturnParameters": 1461,
												"id": 1469,
												"nodeType": "Return",
												"src": "6504:15:9"
											}
										]
									},
									"documentation": {
										"id": 1455,
										"nodeType": "StructuredDocumentation",
										"src": "6190:73:9",
										"text": "@dev Checks whether the given address is a contract and contains code"
									},
									"id": 1471,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "isContract",
									"nameLocation": "6277:10:9",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1458,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1457,
												"mutability": "mutable",
												"name": "_contractAddr",
												"nameLocation": "6296:13:9",
												"nodeType": "VariableDeclaration",
												"scope": 1471,
												"src": "6288:21:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1456,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6288:7:9",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6287:23:9"
									},
									"returnParameters": {
										"id": 1461,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1460,
												"mutability": "mutable",
												"name": "",
												"nameLocation": "-1:-1:-1",
												"nodeType": "VariableDeclaration",
												"scope": 1471,
												"src": "6334:4:9",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bool",
													"typeString": "bool"
												},
												"typeName": {
													"id": 1459,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "6334:4:9",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6333:6:9"
									},
									"scope": 1472,
									"src": "6268:258:9",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 1473,
							"src": "680:5848:9",
							"usedErrors": []
						}
					],
					"src": "68:6461:9"
				},
				"id": 9
			},
			"bridges/libs/LibDiamond.sol": {
				"ast": {
					"absolutePath": "bridges/libs/LibDiamond.sol",
					"exportedSymbols": {
						"IDiamondCut": [
							1125
						],
						"LibDiamond": [
							2306
						]
					},
					"id": 2307,
					"license": "MIT",
					"nodeType": "SourceUnit",
					"nodes": [
						{
							"id": 1474,
							"literals": [
								"solidity",
								"0.8",
								".4"
							],
							"nodeType": "PragmaDirective",
							"src": "32:22:10"
						},
						{
							"absolutePath": "bridges/interfaces/IDiamondCut.sol",
							"file": "../interfaces/IDiamondCut.sol",
							"id": 1476,
							"nameLocation": "-1:-1:-1",
							"nodeType": "ImportDirective",
							"scope": 2307,
							"sourceUnit": 1126,
							"src": "56:58:10",
							"symbolAliases": [
								{
									"foreign": {
										"id": 1475,
										"name": "IDiamondCut",
										"nodeType": "Identifier",
										"overloadedDeclarations": [],
										"src": "64:11:10",
										"typeDescriptions": {}
									},
									"nameLocation": "-1:-1:-1"
								}
							],
							"unitAlias": ""
						},
						{
							"abstract": false,
							"baseContracts": [],
							"contractDependencies": [],
							"contractKind": "library",
							"fullyImplemented": true,
							"id": 2306,
							"linearizedBaseContracts": [
								2306
							],
							"name": "LibDiamond",
							"nameLocation": "124:10:10",
							"nodeType": "ContractDefinition",
							"nodes": [
								{
									"constant": true,
									"id": 1481,
									"mutability": "constant",
									"name": "DIAMOND_STORAGE_POSITION",
									"nameLocation": "167:24:10",
									"nodeType": "VariableDeclaration",
									"scope": 2306,
									"src": "141:106:10",
									"stateVariable": true,
									"storageLocation": "default",
									"typeDescriptions": {
										"typeIdentifier": "t_bytes32",
										"typeString": "bytes32"
									},
									"typeName": {
										"id": 1477,
										"name": "bytes32",
										"nodeType": "ElementaryTypeName",
										"src": "141:7:10",
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"value": {
										"arguments": [
											{
												"hexValue": "6469616d6f6e642e7374616e646172642e6469616d6f6e642e73746f72616765",
												"id": 1479,
												"isConstant": false,
												"isLValue": false,
												"isPure": true,
												"kind": "string",
												"lValueRequested": false,
												"nodeType": "Literal",
												"src": "212:34:10",
												"typeDescriptions": {
													"typeIdentifier": "t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c",
													"typeString": "literal_string \"diamond.standard.diamond.storage\""
												},
												"value": "diamond.standard.diamond.storage"
											}
										],
										"expression": {
											"argumentTypes": [
												{
													"typeIdentifier": "t_stringliteral_c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c",
													"typeString": "literal_string \"diamond.standard.diamond.storage\""
												}
											],
											"id": 1478,
											"name": "keccak256",
											"nodeType": "Identifier",
											"overloadedDeclarations": [],
											"referencedDeclaration": 4294967288,
											"src": "202:9:10",
											"typeDescriptions": {
												"typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
												"typeString": "function (bytes memory) pure returns (bytes32)"
											}
										},
										"id": 1480,
										"isConstant": false,
										"isLValue": false,
										"isPure": true,
										"kind": "functionCall",
										"lValueRequested": false,
										"names": [],
										"nodeType": "FunctionCall",
										"src": "202:45:10",
										"tryCall": false,
										"typeDescriptions": {
											"typeIdentifier": "t_bytes32",
											"typeString": "bytes32"
										}
									},
									"visibility": "internal"
								},
								{
									"canonicalName": "LibDiamond.FacetAddressAndPosition",
									"id": 1486,
									"members": [
										{
											"constant": false,
											"id": 1483,
											"mutability": "mutable",
											"name": "facetAddress",
											"nameLocation": "303:12:10",
											"nodeType": "VariableDeclaration",
											"scope": 1486,
											"src": "295:20:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 1482,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "295:7:10",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1485,
											"mutability": "mutable",
											"name": "functionSelectorPosition",
											"nameLocation": "332:24:10",
											"nodeType": "VariableDeclaration",
											"scope": 1486,
											"src": "325:31:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint96",
												"typeString": "uint96"
											},
											"typeName": {
												"id": 1484,
												"name": "uint96",
												"nodeType": "ElementaryTypeName",
												"src": "325:6:10",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetAddressAndPosition",
									"nameLocation": "261:23:10",
									"nodeType": "StructDefinition",
									"scope": 2306,
									"src": "254:171:10",
									"visibility": "public"
								},
								{
									"canonicalName": "LibDiamond.FacetFunctionSelectors",
									"id": 1492,
									"members": [
										{
											"constant": false,
											"id": 1489,
											"mutability": "mutable",
											"name": "functionSelectors",
											"nameLocation": "480:17:10",
											"nodeType": "VariableDeclaration",
											"scope": 1492,
											"src": "471:26:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
												"typeString": "bytes4[]"
											},
											"typeName": {
												"baseType": {
													"id": 1487,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "471:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"id": 1488,
												"nodeType": "ArrayTypeName",
												"src": "471:8:10",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
													"typeString": "bytes4[]"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1491,
											"mutability": "mutable",
											"name": "facetAddressPosition",
											"nameLocation": "515:20:10",
											"nodeType": "VariableDeclaration",
											"scope": 1492,
											"src": "507:28:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_uint256",
												"typeString": "uint256"
											},
											"typeName": {
												"id": 1490,
												"name": "uint256",
												"nodeType": "ElementaryTypeName",
												"src": "507:7:10",
												"typeDescriptions": {
													"typeIdentifier": "t_uint256",
													"typeString": "uint256"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "FacetFunctionSelectors",
									"nameLocation": "438:22:10",
									"nodeType": "StructDefinition",
									"scope": 2306,
									"src": "431:163:10",
									"visibility": "public"
								},
								{
									"canonicalName": "LibDiamond.DiamondStorage",
									"id": 1512,
									"members": [
										{
											"constant": false,
											"id": 1497,
											"mutability": "mutable",
											"name": "selectorToFacetAndPosition",
											"nameLocation": "820:26:10",
											"nodeType": "VariableDeclaration",
											"scope": 1512,
											"src": "777:69:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
												"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"
											},
											"typeName": {
												"id": 1496,
												"keyType": {
													"id": 1493,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "785:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"nodeType": "Mapping",
												"src": "777:42:10",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
													"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition)"
												},
												"valueType": {
													"id": 1495,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1494,
														"name": "FacetAddressAndPosition",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1486,
														"src": "795:23:10"
													},
													"referencedDeclaration": 1486,
													"src": "795:23:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage_ptr",
														"typeString": "struct LibDiamond.FacetAddressAndPosition"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1502,
											"mutability": "mutable",
											"name": "facetFunctionSelectors",
											"nameLocation": "953:22:10",
											"nodeType": "VariableDeclaration",
											"scope": 1512,
											"src": "910:65:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
												"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors)"
											},
											"typeName": {
												"id": 1501,
												"keyType": {
													"id": 1498,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "918:7:10",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "Mapping",
												"src": "910:42:10",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
													"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors)"
												},
												"valueType": {
													"id": 1500,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1499,
														"name": "FacetFunctionSelectors",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1492,
														"src": "929:22:10"
													},
													"referencedDeclaration": 1492,
													"src": "929:22:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage_ptr",
														"typeString": "struct LibDiamond.FacetFunctionSelectors"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1505,
											"mutability": "mutable",
											"name": "facetAddresses",
											"nameLocation": "1022:14:10",
											"nodeType": "VariableDeclaration",
											"scope": 1512,
											"src": "1012:24:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
												"typeString": "address[]"
											},
											"typeName": {
												"baseType": {
													"id": 1503,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1012:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 1504,
												"nodeType": "ArrayTypeName",
												"src": "1012:9:10",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
													"typeString": "address[]"
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1509,
											"mutability": "mutable",
											"name": "supportedInterfaces",
											"nameLocation": "1172:19:10",
											"nodeType": "VariableDeclaration",
											"scope": 1512,
											"src": "1148:43:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
												"typeString": "mapping(bytes4 => bool)"
											},
											"typeName": {
												"id": 1508,
												"keyType": {
													"id": 1506,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "1156:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"nodeType": "Mapping",
												"src": "1148:23:10",
												"typeDescriptions": {
													"typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
													"typeString": "mapping(bytes4 => bool)"
												},
												"valueType": {
													"id": 1507,
													"name": "bool",
													"nodeType": "ElementaryTypeName",
													"src": "1166:4:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												}
											},
											"visibility": "internal"
										},
										{
											"constant": false,
											"id": 1511,
											"mutability": "mutable",
											"name": "contractOwner",
											"nameLocation": "1242:13:10",
											"nodeType": "VariableDeclaration",
											"scope": 1512,
											"src": "1234:21:10",
											"stateVariable": false,
											"storageLocation": "default",
											"typeDescriptions": {
												"typeIdentifier": "t_address",
												"typeString": "address"
											},
											"typeName": {
												"id": 1510,
												"name": "address",
												"nodeType": "ElementaryTypeName",
												"src": "1234:7:10",
												"stateMutability": "nonpayable",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												}
											},
											"visibility": "internal"
										}
									],
									"name": "DiamondStorage",
									"nameLocation": "607:14:10",
									"nodeType": "StructDefinition",
									"scope": 2306,
									"src": "600:662:10",
									"visibility": "public"
								},
								{
									"body": {
										"id": 1523,
										"nodeType": "Block",
										"src": "1372:177:10",
										"statements": [
											{
												"assignments": [
													1519
												],
												"declarations": [
													{
														"constant": false,
														"id": 1519,
														"mutability": "mutable",
														"name": "position",
														"nameLocation": "1390:8:10",
														"nodeType": "VariableDeclaration",
														"scope": 1523,
														"src": "1382:16:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes32",
															"typeString": "bytes32"
														},
														"typeName": {
															"id": 1518,
															"name": "bytes32",
															"nodeType": "ElementaryTypeName",
															"src": "1382:7:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes32",
																"typeString": "bytes32"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1521,
												"initialValue": {
													"id": 1520,
													"name": "DIAMOND_STORAGE_POSITION",
													"nodeType": "Identifier",
													"overloadedDeclarations": [],
													"referencedDeclaration": 1481,
													"src": "1401:24:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes32",
														"typeString": "bytes32"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1382:43:10"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "1500:43:10",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "1514:19:10",
															"value": {
																"name": "position",
																"nodeType": "YulIdentifier",
																"src": "1525:8:10"
															},
															"variableNames": [
																{
																	"name": "ds.slot",
																	"nodeType": "YulIdentifier",
																	"src": "1514:7:10"
																}
															]
														}
													]
												},
												"evmVersion": "istanbul",
												"externalReferences": [
													{
														"declaration": 1516,
														"isOffset": false,
														"isSlot": true,
														"src": "1514:7:10",
														"suffix": "slot",
														"valueSize": 1
													},
													{
														"declaration": 1519,
														"isOffset": false,
														"isSlot": false,
														"src": "1525:8:10",
														"valueSize": 1
													}
												],
												"id": 1522,
												"nodeType": "InlineAssembly",
												"src": "1491:52:10"
											}
										]
									},
									"id": 1524,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "diamondStorage",
									"nameLocation": "1277:14:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1513,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1291:2:10"
									},
									"returnParameters": {
										"id": 1517,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1516,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "1364:2:10",
												"nodeType": "VariableDeclaration",
												"scope": 1524,
												"src": "1341:25:10",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 1515,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1514,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1512,
														"src": "1341:14:10"
													},
													"referencedDeclaration": 1512,
													"src": "1341:14:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1340:27:10"
									},
									"scope": 2306,
									"src": "1268:281:10",
									"stateMutability": "pure",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"anonymous": false,
									"id": 1530,
									"name": "OwnershipTransferred",
									"nameLocation": "1561:20:10",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 1529,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1526,
												"indexed": true,
												"mutability": "mutable",
												"name": "previousOwner",
												"nameLocation": "1607:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 1530,
												"src": "1591:29:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1525,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1591:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1528,
												"indexed": true,
												"mutability": "mutable",
												"name": "newOwner",
												"nameLocation": "1646:8:10",
												"nodeType": "VariableDeclaration",
												"scope": 1530,
												"src": "1630:24:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1527,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1630:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1581:79:10"
									},
									"src": "1555:106:10"
								},
								{
									"body": {
										"id": 1557,
										"nodeType": "Block",
										"src": "1721:210:10",
										"statements": [
											{
												"assignments": [
													1537
												],
												"declarations": [
													{
														"constant": false,
														"id": 1537,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "1754:2:10",
														"nodeType": "VariableDeclaration",
														"scope": 1557,
														"src": "1731:25:10",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 1536,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 1535,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 1512,
																"src": "1731:14:10"
															},
															"referencedDeclaration": 1512,
															"src": "1731:14:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1540,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 1538,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1524,
														"src": "1759:14:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 1539,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1759:16:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1731:44:10"
											},
											{
												"assignments": [
													1542
												],
												"declarations": [
													{
														"constant": false,
														"id": 1542,
														"mutability": "mutable",
														"name": "previousOwner",
														"nameLocation": "1793:13:10",
														"nodeType": "VariableDeclaration",
														"scope": 1557,
														"src": "1785:21:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														},
														"typeName": {
															"id": 1541,
															"name": "address",
															"nodeType": "ElementaryTypeName",
															"src": "1785:7:10",
															"stateMutability": "nonpayable",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1545,
												"initialValue": {
													"expression": {
														"id": 1543,
														"name": "ds",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1537,
														"src": "1809:2:10",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage storage pointer"
														}
													},
													"id": 1544,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "contractOwner",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 1511,
													"src": "1809:16:10",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "1785:40:10"
											},
											{
												"expression": {
													"id": 1550,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"id": 1546,
															"name": "ds",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1537,
															"src": "1835:2:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage storage pointer"
															}
														},
														"id": 1548,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "contractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1511,
														"src": "1835:16:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 1549,
														"name": "_newOwner",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1532,
														"src": "1854:9:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "1835:28:10",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 1551,
												"nodeType": "ExpressionStatement",
												"src": "1835:28:10"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 1553,
															"name": "previousOwner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1542,
															"src": "1899:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1554,
															"name": "_newOwner",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1532,
															"src": "1914:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"id": 1552,
														"name": "OwnershipTransferred",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1530,
														"src": "1878:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
															"typeString": "function (address,address)"
														}
													},
													"id": 1555,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "1878:46:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1556,
												"nodeType": "EmitStatement",
												"src": "1873:51:10"
											}
										]
									},
									"id": 1558,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "setContractOwner",
									"nameLocation": "1676:16:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1533,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1532,
												"mutability": "mutable",
												"name": "_newOwner",
												"nameLocation": "1701:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 1558,
												"src": "1693:17:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1531,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1693:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1692:19:10"
									},
									"returnParameters": {
										"id": 1534,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1721:0:10"
									},
									"scope": 2306,
									"src": "1667:264:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1569,
										"nodeType": "Block",
										"src": "2009:64:10",
										"statements": [
											{
												"expression": {
													"id": 1567,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"id": 1563,
														"name": "contractOwner_",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1561,
														"src": "2019:14:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"arguments": [],
															"expression": {
																"argumentTypes": [],
																"id": 1564,
																"name": "diamondStorage",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1524,
																"src": "2036:14:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
																	"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
																}
															},
															"id": 1565,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"kind": "functionCall",
															"lValueRequested": false,
															"names": [],
															"nodeType": "FunctionCall",
															"src": "2036:16:10",
															"tryCall": false,
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage storage pointer"
															}
														},
														"id": 1566,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "contractOwner",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1511,
														"src": "2036:30:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "2019:47:10",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 1568,
												"nodeType": "ExpressionStatement",
												"src": "2019:47:10"
											}
										]
									},
									"id": 1570,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "contractOwner",
									"nameLocation": "1946:13:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1559,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "1959:2:10"
									},
									"returnParameters": {
										"id": 1562,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1561,
												"mutability": "mutable",
												"name": "contractOwner_",
												"nameLocation": "1993:14:10",
												"nodeType": "VariableDeclaration",
												"scope": 1570,
												"src": "1985:22:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1560,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "1985:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "1984:24:10"
									},
									"scope": 2306,
									"src": "1937:136:10",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1583,
										"nodeType": "Block",
										"src": "2127:142:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 1579,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 1574,
																	"name": "msg",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 4294967281,
																	"src": "2158:3:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_magic_message",
																		"typeString": "msg"
																	}
																},
																"id": 1575,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "sender",
																"nodeType": "MemberAccess",
																"src": "2158:10:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"expression": {
																	"arguments": [],
																	"expression": {
																		"argumentTypes": [],
																		"id": 1576,
																		"name": "diamondStorage",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1524,
																		"src": "2172:14:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
																			"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
																		}
																	},
																	"id": 1577,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "functionCall",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "2172:16:10",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 1578,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "contractOwner",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1511,
																"src": "2172:30:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "2158:44:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e6572",
															"id": 1580,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "2216:36:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac",
																"typeString": "literal_string \"LibDiamond: Must be contract owner\""
															},
															"value": "LibDiamond: Must be contract owner"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_0d4ae41009c51fd276653a54d7793c24f266ddc8c56ce21f8be5e2c6595ab3ac",
																"typeString": "literal_string \"LibDiamond: Must be contract owner\""
															}
														],
														"id": 1573,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "2137:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1581,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "2137:125:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1582,
												"nodeType": "ExpressionStatement",
												"src": "2137:125:10"
											}
										]
									},
									"id": 1584,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "enforceIsContractOwner",
									"nameLocation": "2088:22:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1571,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2110:2:10"
									},
									"returnParameters": {
										"id": 1572,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2127:0:10"
									},
									"scope": 2306,
									"src": "2079:190:10",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"anonymous": false,
									"id": 1594,
									"name": "DiamondCut",
									"nameLocation": "2281:10:10",
									"nodeType": "EventDefinition",
									"parameters": {
										"id": 1593,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1588,
												"indexed": false,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "2324:11:10",
												"nodeType": "VariableDeclaration",
												"scope": 1594,
												"src": "2301:34:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 1586,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 1585,
															"name": "IDiamondCut.FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 1102,
															"src": "2301:20:10"
														},
														"referencedDeclaration": 1102,
														"src": "2301:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$1102_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 1587,
													"nodeType": "ArrayTypeName",
													"src": "2301:22:10",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1590,
												"indexed": false,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "2353:5:10",
												"nodeType": "VariableDeclaration",
												"scope": 1594,
												"src": "2345:13:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1589,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2345:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1592,
												"indexed": false,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "2374:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 1594,
												"src": "2368:15:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 1591,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "2368:5:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2291:98:10"
									},
									"src": "2275:115:10"
								},
								{
									"body": {
										"id": 1697,
										"nodeType": "Block",
										"src": "2584:1146:10",
										"statements": [
											{
												"body": {
													"id": 1684,
													"nodeType": "Block",
													"src": "2712:908:10",
													"statements": [
														{
															"assignments": [
																1619
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1619,
																	"mutability": "mutable",
																	"name": "action",
																	"nameLocation": "2753:6:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1684,
																	"src": "2726:33:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	},
																	"typeName": {
																		"id": 1618,
																		"nodeType": "UserDefinedTypeName",
																		"pathNode": {
																			"id": 1617,
																			"name": "IDiamondCut.FacetCutAction",
																			"nodeType": "IdentifierPath",
																			"referencedDeclaration": 1093,
																			"src": "2726:26:10"
																		},
																		"referencedDeclaration": 1093,
																		"src": "2726:26:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1624,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"id": 1620,
																		"name": "_diamondCut",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1598,
																		"src": "2762:11:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																			"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																		}
																	},
																	"id": 1622,
																	"indexExpression": {
																		"id": 1621,
																		"name": "facetIndex",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1606,
																		"src": "2774:10:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "2762:23:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																		"typeString": "struct IDiamondCut.FacetCut memory"
																	}
																},
																"id": 1623,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "action",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1098,
																"src": "2762:30:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																	"typeString": "enum IDiamondCut.FacetCutAction"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "2726:66:10"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																	"typeString": "enum IDiamondCut.FacetCutAction"
																},
																"id": 1629,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 1625,
																	"name": "action",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1619,
																	"src": "2810:6:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "==",
																"rightExpression": {
																	"expression": {
																		"expression": {
																			"id": 1626,
																			"name": "IDiamondCut",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1125,
																			"src": "2820:11:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$1125_$",
																				"typeString": "type(contract IDiamondCut)"
																			}
																		},
																		"id": 1627,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "FacetCutAction",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1093,
																		"src": "2820:26:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$1093_$",
																			"typeString": "type(enum IDiamondCut.FacetCutAction)"
																		}
																	},
																	"id": 1628,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"memberName": "Add",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1090,
																	"src": "2820:30:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	}
																},
																"src": "2810:40:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"falseBody": {
																"condition": {
																	"commonType": {
																		"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																		"typeString": "enum IDiamondCut.FacetCutAction"
																	},
																	"id": 1646,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"leftExpression": {
																		"id": 1642,
																		"name": "action",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1619,
																		"src": "3046:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"nodeType": "BinaryOperation",
																	"operator": "==",
																	"rightExpression": {
																		"expression": {
																			"expression": {
																				"id": 1643,
																				"name": "IDiamondCut",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 1125,
																				"src": "3056:11:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$1125_$",
																					"typeString": "type(contract IDiamondCut)"
																				}
																			},
																			"id": 1644,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "FacetCutAction",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1093,
																			"src": "3056:26:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$1093_$",
																				"typeString": "type(enum IDiamondCut.FacetCutAction)"
																			}
																		},
																		"id": 1645,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"memberName": "Replace",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1091,
																		"src": "3056:34:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		}
																	},
																	"src": "3046:44:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"falseBody": {
																	"condition": {
																		"commonType": {
																			"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																			"typeString": "enum IDiamondCut.FacetCutAction"
																		},
																		"id": 1663,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 1659,
																			"name": "action",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1619,
																			"src": "3290:6:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																				"typeString": "enum IDiamondCut.FacetCutAction"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"expression": {
																				"expression": {
																					"id": 1660,
																					"name": "IDiamondCut",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 1125,
																					"src": "3300:11:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_type$_t_contract$_IDiamondCut_$1125_$",
																						"typeString": "type(contract IDiamondCut)"
																					}
																				},
																				"id": 1661,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "FacetCutAction",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 1093,
																				"src": "3300:26:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_enum$_FacetCutAction_$1093_$",
																					"typeString": "type(enum IDiamondCut.FacetCutAction)"
																				}
																			},
																			"id": 1662,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"lValueRequested": false,
																			"memberName": "Remove",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1092,
																			"src": "3300:33:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_enum$_FacetCutAction_$1093",
																				"typeString": "enum IDiamondCut.FacetCutAction"
																			}
																		},
																		"src": "3290:43:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	"falseBody": {
																		"id": 1680,
																		"nodeType": "Block",
																		"src": "3528:82:10",
																		"statements": [
																			{
																				"expression": {
																					"arguments": [
																						{
																							"hexValue": "4c69624469616d6f6e644375743a20496e636f7272656374204661636574437574416374696f6e",
																							"id": 1677,
																							"isConstant": false,
																							"isLValue": false,
																							"isPure": true,
																							"kind": "string",
																							"lValueRequested": false,
																							"nodeType": "Literal",
																							"src": "3553:41:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54",
																								"typeString": "literal_string \"LibDiamondCut: Incorrect FacetCutAction\""
																							},
																							"value": "LibDiamondCut: Incorrect FacetCutAction"
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_stringliteral_48267d8daf5ea9c6bbad1fe9c53dc4c04a2a01b2b85bad432956cf42f45b2f54",
																								"typeString": "literal_string \"LibDiamondCut: Incorrect FacetCutAction\""
																							}
																						],
																						"id": 1676,
																						"name": "revert",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [
																							4294967277,
																							4294967277
																						],
																						"referencedDeclaration": 4294967277,
																						"src": "3546:6:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																							"typeString": "function (string memory) pure"
																						}
																					},
																					"id": 1678,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "functionCall",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "3546:49:10",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_tuple$__$",
																						"typeString": "tuple()"
																					}
																				},
																				"id": 1679,
																				"nodeType": "ExpressionStatement",
																				"src": "3546:49:10"
																			}
																		]
																	},
																	"id": 1681,
																	"nodeType": "IfStatement",
																	"src": "3286:324:10",
																	"trueBody": {
																		"id": 1675,
																		"nodeType": "Block",
																		"src": "3335:187:10",
																		"statements": [
																			{
																				"expression": {
																					"arguments": [
																						{
																							"expression": {
																								"baseExpression": {
																									"id": 1665,
																									"name": "_diamondCut",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 1598,
																									"src": "3390:11:10",
																									"typeDescriptions": {
																										"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																										"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																									}
																								},
																								"id": 1667,
																								"indexExpression": {
																									"id": 1666,
																									"name": "facetIndex",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 1606,
																									"src": "3402:10:10",
																									"typeDescriptions": {
																										"typeIdentifier": "t_uint256",
																										"typeString": "uint256"
																									}
																								},
																								"isConstant": false,
																								"isLValue": true,
																								"isPure": false,
																								"lValueRequested": false,
																								"nodeType": "IndexAccess",
																								"src": "3390:23:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory"
																								}
																							},
																							"id": 1668,
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"memberName": "facetAddress",
																							"nodeType": "MemberAccess",
																							"referencedDeclaration": 1095,
																							"src": "3390:36:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_address",
																								"typeString": "address"
																							}
																						},
																						{
																							"expression": {
																								"baseExpression": {
																									"id": 1669,
																									"name": "_diamondCut",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 1598,
																									"src": "3448:11:10",
																									"typeDescriptions": {
																										"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																										"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																									}
																								},
																								"id": 1671,
																								"indexExpression": {
																									"id": 1670,
																									"name": "facetIndex",
																									"nodeType": "Identifier",
																									"overloadedDeclarations": [],
																									"referencedDeclaration": 1606,
																									"src": "3460:10:10",
																									"typeDescriptions": {
																										"typeIdentifier": "t_uint256",
																										"typeString": "uint256"
																									}
																								},
																								"isConstant": false,
																								"isLValue": true,
																								"isPure": false,
																								"lValueRequested": false,
																								"nodeType": "IndexAccess",
																								"src": "3448:23:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory"
																								}
																							},
																							"id": 1672,
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"memberName": "functionSelectors",
																							"nodeType": "MemberAccess",
																							"referencedDeclaration": 1101,
																							"src": "3448:41:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																								"typeString": "bytes4[] memory"
																							}
																						}
																					],
																					"expression": {
																						"argumentTypes": [
																							{
																								"typeIdentifier": "t_address",
																								"typeString": "address"
																							},
																							{
																								"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																								"typeString": "bytes4[] memory"
																							}
																						],
																						"id": 1664,
																						"name": "removeFunctions",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 1968,
																						"src": "3353:15:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																							"typeString": "function (address,bytes4[] memory)"
																						}
																					},
																					"id": 1673,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": false,
																					"kind": "functionCall",
																					"lValueRequested": false,
																					"names": [],
																					"nodeType": "FunctionCall",
																					"src": "3353:154:10",
																					"tryCall": false,
																					"typeDescriptions": {
																						"typeIdentifier": "t_tuple$__$",
																						"typeString": "tuple()"
																					}
																				},
																				"id": 1674,
																				"nodeType": "ExpressionStatement",
																				"src": "3353:154:10"
																			}
																		]
																	}
																},
																"id": 1682,
																"nodeType": "IfStatement",
																"src": "3042:568:10",
																"trueBody": {
																	"id": 1658,
																	"nodeType": "Block",
																	"src": "3092:188:10",
																	"statements": [
																		{
																			"expression": {
																				"arguments": [
																					{
																						"expression": {
																							"baseExpression": {
																								"id": 1648,
																								"name": "_diamondCut",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 1598,
																								"src": "3148:11:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																								}
																							},
																							"id": 1650,
																							"indexExpression": {
																								"id": 1649,
																								"name": "facetIndex",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 1606,
																								"src": "3160:10:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_uint256",
																									"typeString": "uint256"
																								}
																							},
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"nodeType": "IndexAccess",
																							"src": "3148:23:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory"
																							}
																						},
																						"id": 1651,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "facetAddress",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 1095,
																						"src": "3148:36:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					{
																						"expression": {
																							"baseExpression": {
																								"id": 1652,
																								"name": "_diamondCut",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 1598,
																								"src": "3206:11:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																									"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																								}
																							},
																							"id": 1654,
																							"indexExpression": {
																								"id": 1653,
																								"name": "facetIndex",
																								"nodeType": "Identifier",
																								"overloadedDeclarations": [],
																								"referencedDeclaration": 1606,
																								"src": "3218:10:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_uint256",
																									"typeString": "uint256"
																								}
																							},
																							"isConstant": false,
																							"isLValue": true,
																							"isPure": false,
																							"lValueRequested": false,
																							"nodeType": "IndexAccess",
																							"src": "3206:23:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory"
																							}
																						},
																						"id": 1655,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "functionSelectors",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 1101,
																						"src": "3206:41:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																							"typeString": "bytes4[] memory"
																						}
																					}
																				],
																				"expression": {
																					"argumentTypes": [
																						{
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						},
																						{
																							"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																							"typeString": "bytes4[] memory"
																						}
																					],
																					"id": 1647,
																					"name": "replaceFunctions",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 1903,
																					"src": "3110:16:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																						"typeString": "function (address,bytes4[] memory)"
																					}
																				},
																				"id": 1656,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"kind": "functionCall",
																				"lValueRequested": false,
																				"names": [],
																				"nodeType": "FunctionCall",
																				"src": "3110:155:10",
																				"tryCall": false,
																				"typeDescriptions": {
																					"typeIdentifier": "t_tuple$__$",
																					"typeString": "tuple()"
																				}
																			},
																			"id": 1657,
																			"nodeType": "ExpressionStatement",
																			"src": "3110:155:10"
																		}
																	]
																}
															},
															"id": 1683,
															"nodeType": "IfStatement",
															"src": "2806:804:10",
															"trueBody": {
																"id": 1641,
																"nodeType": "Block",
																"src": "2852:184:10",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"expression": {
																						"baseExpression": {
																							"id": 1631,
																							"name": "_diamondCut",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 1598,
																							"src": "2904:11:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																							}
																						},
																						"id": 1633,
																						"indexExpression": {
																							"id": 1632,
																							"name": "facetIndex",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 1606,
																							"src": "2916:10:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_uint256",
																								"typeString": "uint256"
																							}
																						},
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"nodeType": "IndexAccess",
																						"src": "2904:23:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																							"typeString": "struct IDiamondCut.FacetCut memory"
																						}
																					},
																					"id": 1634,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "facetAddress",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 1095,
																					"src": "2904:36:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"expression": {
																						"baseExpression": {
																							"id": 1635,
																							"name": "_diamondCut",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 1598,
																							"src": "2962:11:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																								"typeString": "struct IDiamondCut.FacetCut memory[] memory"
																							}
																						},
																						"id": 1637,
																						"indexExpression": {
																							"id": 1636,
																							"name": "facetIndex",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 1606,
																							"src": "2974:10:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_uint256",
																								"typeString": "uint256"
																							}
																						},
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"nodeType": "IndexAccess",
																						"src": "2962:23:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_FacetCut_$1102_memory_ptr",
																							"typeString": "struct IDiamondCut.FacetCut memory"
																						}
																					},
																					"id": 1638,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "functionSelectors",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 1101,
																					"src": "2962:41:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																						"typeString": "bytes4[] memory"
																					}
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																						"typeString": "bytes4[] memory"
																					}
																				],
																				"id": 1630,
																				"name": "addFunctions",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 1799,
																				"src": "2870:12:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_bytes4_$dyn_memory_ptr_$returns$__$",
																					"typeString": "function (address,bytes4[] memory)"
																				}
																			},
																			"id": 1639,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "2870:151:10",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 1640,
																		"nodeType": "ExpressionStatement",
																		"src": "2870:151:10"
																	}
																]
															}
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1611,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1608,
														"name": "facetIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1606,
														"src": "2644:10:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 1609,
															"name": "_diamondCut",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1598,
															"src": "2657:11:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															}
														},
														"id": 1610,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "2657:18:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "2644:31:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1685,
												"initializationExpression": {
													"assignments": [
														1606
													],
													"declarations": [
														{
															"constant": false,
															"id": 1606,
															"mutability": "mutable",
															"name": "facetIndex",
															"nameLocation": "2620:10:10",
															"nodeType": "VariableDeclaration",
															"scope": 1685,
															"src": "2612:18:10",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 1605,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "2612:7:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 1607,
													"nodeType": "VariableDeclarationStatement",
													"src": "2612:18:10"
												},
												"loopExpression": {
													"expression": {
														"id": 1613,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "2689:12:10",
														"subExpression": {
															"id": 1612,
															"name": "facetIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1606,
															"src": "2689:10:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1614,
													"nodeType": "ExpressionStatement",
													"src": "2689:12:10"
												},
												"nodeType": "ForStatement",
												"src": "2594:1026:10"
											},
											{
												"eventCall": {
													"arguments": [
														{
															"id": 1687,
															"name": "_diamondCut",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1598,
															"src": "3645:11:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															}
														},
														{
															"id": 1688,
															"name": "_init",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1600,
															"src": "3658:5:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1689,
															"name": "_calldata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1602,
															"src": "3665:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
																"typeString": "struct IDiamondCut.FacetCut memory[] memory"
															},
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 1686,
														"name": "DiamondCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1594,
														"src": "3634:10:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_event_nonpayable$_t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (struct IDiamondCut.FacetCut memory[] memory,address,bytes memory)"
														}
													},
													"id": 1690,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3634:41:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1691,
												"nodeType": "EmitStatement",
												"src": "3629:46:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1693,
															"name": "_init",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1600,
															"src": "3706:5:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"id": 1694,
															"name": "_calldata",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1602,
															"src": "3713:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_bytes_memory_ptr",
																"typeString": "bytes memory"
															}
														],
														"id": 1692,
														"name": "initializeDiamondCut",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2286,
														"src": "3685:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
															"typeString": "function (address,bytes memory)"
														}
													},
													"id": 1695,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3685:38:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1696,
												"nodeType": "ExpressionStatement",
												"src": "3685:38:10"
											}
										]
									},
									"id": 1698,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "diamondCut",
									"nameLocation": "2452:10:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1603,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1598,
												"mutability": "mutable",
												"name": "_diamondCut",
												"nameLocation": "2502:11:10",
												"nodeType": "VariableDeclaration",
												"scope": 1698,
												"src": "2472:41:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_memory_ptr_$dyn_memory_ptr",
													"typeString": "struct IDiamondCut.FacetCut[]"
												},
												"typeName": {
													"baseType": {
														"id": 1596,
														"nodeType": "UserDefinedTypeName",
														"pathNode": {
															"id": 1595,
															"name": "IDiamondCut.FacetCut",
															"nodeType": "IdentifierPath",
															"referencedDeclaration": 1102,
															"src": "2472:20:10"
														},
														"referencedDeclaration": 1102,
														"src": "2472:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetCut_$1102_storage_ptr",
															"typeString": "struct IDiamondCut.FacetCut"
														}
													},
													"id": 1597,
													"nodeType": "ArrayTypeName",
													"src": "2472:22:10",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_struct$_FacetCut_$1102_storage_$dyn_storage_ptr",
														"typeString": "struct IDiamondCut.FacetCut[]"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1600,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "2531:5:10",
												"nodeType": "VariableDeclaration",
												"scope": 1698,
												"src": "2523:13:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1599,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "2523:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1602,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "2559:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 1698,
												"src": "2546:22:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 1601,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "2546:5:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "2462:112:10"
									},
									"returnParameters": {
										"id": 1604,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "2584:0:10"
									},
									"scope": 2306,
									"src": "2443:1287:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1798,
										"nodeType": "Block",
										"src": "3848:1195:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1710,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 1707,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1703,
																	"src": "3879:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1708,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "3879:25:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 1709,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "3907:1:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "3879:29:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 1711,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "3922:45:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 1706,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "3858:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1712,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "3858:119:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1713,
												"nodeType": "ExpressionStatement",
												"src": "3858:119:10"
											},
											{
												"assignments": [
													1716
												],
												"declarations": [
													{
														"constant": false,
														"id": 1716,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "4010:2:10",
														"nodeType": "VariableDeclaration",
														"scope": 1798,
														"src": "3987:25:10",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 1715,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 1714,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 1512,
																"src": "3987:14:10"
															},
															"referencedDeclaration": 1512,
															"src": "3987:14:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1719,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 1717,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1524,
														"src": "4015:14:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 1718,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4015:16:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "3987:44:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 1726,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1721,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1700,
																"src": "4062:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 1724,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4087:1:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 1723,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "4079:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 1722,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "4079:7:10",
																		"typeDescriptions": {}
																	}
																},
																"id": 1725,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4079:10:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "4062:27:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029",
															"id": 1727,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "4103:46:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															},
															"value": "LibDiamondCut: Add facet can't be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															}
														],
														"id": 1720,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "4041:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1728,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4041:118:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1729,
												"nodeType": "ExpressionStatement",
												"src": "4041:118:10"
											},
											{
												"assignments": [
													1731
												],
												"declarations": [
													{
														"constant": false,
														"id": 1731,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "4176:16:10",
														"nodeType": "VariableDeclaration",
														"scope": 1798,
														"src": "4169:23:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														},
														"typeName": {
															"id": 1730,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "4169:6:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint96",
																"typeString": "uint96"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1741,
												"initialValue": {
													"arguments": [
														{
															"expression": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 1734,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1716,
																			"src": "4215:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 1735,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1502,
																		"src": "4215:25:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 1737,
																	"indexExpression": {
																		"id": 1736,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1700,
																		"src": "4241:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "4215:40:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 1738,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "functionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1489,
																"src": "4215:58:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																	"typeString": "bytes4[] storage ref"
																}
															},
															"id": 1739,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "length",
															"nodeType": "MemberAccess",
															"src": "4215:65:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1733,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "4195:6:10",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint96_$",
															"typeString": "type(uint96)"
														},
														"typeName": {
															"id": 1732,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "4195:6:10",
															"typeDescriptions": {}
														}
													},
													"id": 1740,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "4195:95:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "4169:121:10"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													},
													"id": 1744,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1742,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1731,
														"src": "4358:16:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 1743,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "4378:1:10",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "4358:21:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1751,
												"nodeType": "IfStatement",
												"src": "4354:79:10",
												"trueBody": {
													"id": 1750,
													"nodeType": "Block",
													"src": "4381:52:10",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1746,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1716,
																		"src": "4404:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1747,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1700,
																		"src": "4408:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 1745,
																	"name": "addFacet",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2001,
																	"src": "4395:8:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address)"
																	}
																},
																"id": 1748,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4395:27:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1749,
															"nodeType": "ExpressionStatement",
															"src": "4395:27:10"
														}
													]
												}
											},
											{
												"body": {
													"id": 1796,
													"nodeType": "Block",
													"src": "4576:461:10",
													"statements": [
														{
															"assignments": [
																1763
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1763,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "4597:8:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1796,
																	"src": "4590:15:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 1762,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "4590:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1767,
															"initialValue": {
																"baseExpression": {
																	"id": 1764,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1703,
																	"src": "4608:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1766,
																"indexExpression": {
																	"id": 1765,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1753,
																	"src": "4627:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "4608:33:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "4590:51:10"
														},
														{
															"assignments": [
																1769
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1769,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "4663:15:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1796,
																	"src": "4655:23:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 1768,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "4655:7:10",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1775,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 1770,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1716,
																			"src": "4681:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 1771,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1497,
																		"src": "4681:46:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 1773,
																	"indexExpression": {
																		"id": 1772,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1763,
																		"src": "4728:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "4681:56:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 1774,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1483,
																"src": "4681:86:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "4655:112:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		"id": 1782,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 1777,
																			"name": "oldFacetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1769,
																			"src": "4806:15:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"arguments": [
																				{
																					"hexValue": "30",
																					"id": 1780,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "number",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "4833:1:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_rational_0_by_1",
																						"typeString": "int_const 0"
																					},
																					"value": "0"
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_rational_0_by_1",
																						"typeString": "int_const 0"
																					}
																				],
																				"id": 1779,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"lValueRequested": false,
																				"nodeType": "ElementaryTypeNameExpression",
																				"src": "4825:7:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_type$_t_address_$",
																					"typeString": "type(address)"
																				},
																				"typeName": {
																					"id": 1778,
																					"name": "address",
																					"nodeType": "ElementaryTypeName",
																					"src": "4825:7:10",
																					"typeDescriptions": {}
																				}
																			},
																			"id": 1781,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "typeConversion",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "4825:10:10",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"src": "4806:29:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6e207468617420616c726561647920657869737473",
																		"id": 1783,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "4853:55:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700",
																			"typeString": "literal_string \"LibDiamondCut: Can't add function that already exists\""
																		},
																		"value": "LibDiamondCut: Can't add function that already exists"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_99a7418ee014d613f46da44561258cdbb58064508097483a319062b99fa37700",
																			"typeString": "literal_string \"LibDiamondCut: Can't add function that already exists\""
																		}
																	],
																	"id": 1776,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "4781:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 1784,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4781:141:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1785,
															"nodeType": "ExpressionStatement",
															"src": "4781:141:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1787,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1716,
																		"src": "4948:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1788,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1763,
																		"src": "4952:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	{
																		"id": 1789,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1731,
																		"src": "4962:16:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		}
																	},
																	{
																		"id": 1790,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1700,
																		"src": "4980:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		},
																		{
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 1786,
																	"name": "addFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2042,
																	"src": "4936:11:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"
																	}
																},
																"id": 1791,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "4936:58:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1792,
															"nodeType": "ExpressionStatement",
															"src": "4936:58:10"
														},
														{
															"expression": {
																"id": 1794,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "++",
																"prefix": false,
																"src": "5008:18:10",
																"subExpression": {
																	"id": 1793,
																	"name": "selectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1731,
																	"src": "5008:16:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 1795,
															"nodeType": "ExpressionStatement",
															"src": "5008:18:10"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1758,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1755,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1753,
														"src": "4495:13:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 1756,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1703,
															"src": "4511:18:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 1757,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "4511:25:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "4495:41:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1797,
												"initializationExpression": {
													"assignments": [
														1753
													],
													"declarations": [
														{
															"constant": false,
															"id": 1753,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "4468:13:10",
															"nodeType": "VariableDeclaration",
															"scope": 1797,
															"src": "4460:21:10",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 1752,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "4460:7:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 1754,
													"nodeType": "VariableDeclarationStatement",
													"src": "4460:21:10"
												},
												"loopExpression": {
													"expression": {
														"id": 1760,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "4550:15:10",
														"subExpression": {
															"id": 1759,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1753,
															"src": "4550:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1761,
													"nodeType": "ExpressionStatement",
													"src": "4550:15:10"
												},
												"nodeType": "ForStatement",
												"src": "4442:595:10"
											}
										]
									},
									"id": 1799,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFunctions",
									"nameLocation": "3745:12:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1704,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1700,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "3775:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 1799,
												"src": "3767:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1699,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "3767:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1703,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "3814:18:10",
												"nodeType": "VariableDeclaration",
												"scope": 1799,
												"src": "3798:34:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 1701,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "3798:6:10",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 1702,
													"nodeType": "ArrayTypeName",
													"src": "3798:8:10",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "3757:81:10"
									},
									"returnParameters": {
										"id": 1705,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "3848:0:10"
									},
									"scope": 2306,
									"src": "3736:1307:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1902,
										"nodeType": "Block",
										"src": "5165:1260:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1811,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 1808,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1804,
																	"src": "5196:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1809,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "5196:25:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 1810,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "5224:1:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "5196:29:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 1812,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5239:45:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 1807,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5175:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1813,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5175:119:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1814,
												"nodeType": "ExpressionStatement",
												"src": "5175:119:10"
											},
											{
												"assignments": [
													1817
												],
												"declarations": [
													{
														"constant": false,
														"id": 1817,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "5327:2:10",
														"nodeType": "VariableDeclaration",
														"scope": 1902,
														"src": "5304:25:10",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 1816,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 1815,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 1512,
																"src": "5304:14:10"
															},
															"referencedDeclaration": 1512,
															"src": "5304:14:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1820,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 1818,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1524,
														"src": "5332:14:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 1819,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5332:16:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "5304:44:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 1827,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1822,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1801,
																"src": "5379:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 1825,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "5404:1:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 1824,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "5396:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 1823,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5396:7:10",
																		"typeDescriptions": {}
																	}
																},
																"id": 1826,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5396:10:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "5379:27:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204164642066616365742063616e27742062652061646472657373283029",
															"id": 1828,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "5420:46:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															},
															"value": "LibDiamondCut: Add facet can't be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_64609d8b93c93a06b98d7db7a87b04044cd4a52c5661d603bb9b90ad8b914a3a",
																"typeString": "literal_string \"LibDiamondCut: Add facet can't be address(0)\""
															}
														],
														"id": 1821,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "5358:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1829,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5358:118:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1830,
												"nodeType": "ExpressionStatement",
												"src": "5358:118:10"
											},
											{
												"assignments": [
													1832
												],
												"declarations": [
													{
														"constant": false,
														"id": 1832,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "5493:16:10",
														"nodeType": "VariableDeclaration",
														"scope": 1902,
														"src": "5486:23:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														},
														"typeName": {
															"id": 1831,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "5486:6:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint96",
																"typeString": "uint96"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1842,
												"initialValue": {
													"arguments": [
														{
															"expression": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 1835,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1817,
																			"src": "5532:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 1836,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1502,
																		"src": "5532:25:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 1838,
																	"indexExpression": {
																		"id": 1837,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1801,
																		"src": "5558:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "5532:40:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 1839,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "functionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1489,
																"src": "5532:58:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																	"typeString": "bytes4[] storage ref"
																}
															},
															"id": 1840,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "length",
															"nodeType": "MemberAccess",
															"src": "5532:65:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														],
														"id": 1834,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"lValueRequested": false,
														"nodeType": "ElementaryTypeNameExpression",
														"src": "5512:6:10",
														"typeDescriptions": {
															"typeIdentifier": "t_type$_t_uint96_$",
															"typeString": "type(uint96)"
														},
														"typeName": {
															"id": 1833,
															"name": "uint96",
															"nodeType": "ElementaryTypeName",
															"src": "5512:6:10",
															"typeDescriptions": {}
														}
													},
													"id": 1841,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "typeConversion",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "5512:95:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "5486:121:10"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													},
													"id": 1845,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1843,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1832,
														"src": "5675:16:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 1844,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "5695:1:10",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "5675:21:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1852,
												"nodeType": "IfStatement",
												"src": "5671:79:10",
												"trueBody": {
													"id": 1851,
													"nodeType": "Block",
													"src": "5698:52:10",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1847,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1817,
																		"src": "5721:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1848,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1801,
																		"src": "5725:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 1846,
																	"name": "addFacet",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2001,
																	"src": "5712:8:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address)"
																	}
																},
																"id": 1849,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "5712:27:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1850,
															"nodeType": "ExpressionStatement",
															"src": "5712:27:10"
														}
													]
												}
											},
											{
												"body": {
													"id": 1900,
													"nodeType": "Block",
													"src": "5893:526:10",
													"statements": [
														{
															"assignments": [
																1864
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1864,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "5914:8:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1900,
																	"src": "5907:15:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 1863,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "5907:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1868,
															"initialValue": {
																"baseExpression": {
																	"id": 1865,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1804,
																	"src": "5925:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1867,
																"indexExpression": {
																	"id": 1866,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1854,
																	"src": "5944:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "5925:33:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "5907:51:10"
														},
														{
															"assignments": [
																1870
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1870,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "5980:15:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1900,
																	"src": "5972:23:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 1869,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "5972:7:10",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1876,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 1871,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1817,
																			"src": "5998:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 1872,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1497,
																		"src": "5998:46:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 1874,
																	"indexExpression": {
																		"id": 1873,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1864,
																		"src": "6045:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "5998:56:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 1875,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1483,
																"src": "5998:86:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "5972:112:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		"id": 1880,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"id": 1878,
																			"name": "oldFacetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1870,
																			"src": "6123:15:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "!=",
																		"rightExpression": {
																			"id": 1879,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1801,
																			"src": "6142:13:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"src": "6123:32:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e6374696f6e20776974682073616d652066756e6374696f6e",
																		"id": 1881,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "6173:58:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078",
																			"typeString": "literal_string \"LibDiamondCut: Can't replace function with same function\""
																		},
																		"value": "LibDiamondCut: Can't replace function with same function"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_b5a7112edf707196456f338fdcc19cd849be6cb8c0d166bcd035f4cfb00e7078",
																			"typeString": "literal_string \"LibDiamondCut: Can't replace function with same function\""
																		}
																	],
																	"id": 1877,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "6098:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 1882,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6098:147:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1883,
															"nodeType": "ExpressionStatement",
															"src": "6098:147:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1885,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1817,
																		"src": "6274:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1886,
																		"name": "oldFacetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1870,
																		"src": "6278:15:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 1887,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1864,
																		"src": "6295:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	],
																	"id": 1884,
																	"name": "removeFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2209,
																	"src": "6259:14:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_address_$_t_bytes4_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"
																	}
																},
																"id": 1888,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6259:45:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1889,
															"nodeType": "ExpressionStatement",
															"src": "6259:45:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1891,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1817,
																		"src": "6330:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1892,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1864,
																		"src": "6334:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	{
																		"id": 1893,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1832,
																		"src": "6344:16:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		}
																	},
																	{
																		"id": 1894,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1801,
																		"src": "6362:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		},
																		{
																			"typeIdentifier": "t_uint96",
																			"typeString": "uint96"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	],
																	"id": 1890,
																	"name": "addFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2042,
																	"src": "6318:11:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_bytes4_$_t_uint96_$_t_address_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,bytes4,uint96,address)"
																	}
																},
																"id": 1895,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6318:58:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1896,
															"nodeType": "ExpressionStatement",
															"src": "6318:58:10"
														},
														{
															"expression": {
																"id": 1898,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "++",
																"prefix": false,
																"src": "6390:18:10",
																"subExpression": {
																	"id": 1897,
																	"name": "selectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1832,
																	"src": "6390:16:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 1899,
															"nodeType": "ExpressionStatement",
															"src": "6390:18:10"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1859,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1856,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1854,
														"src": "5812:13:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 1857,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1804,
															"src": "5828:18:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 1858,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "5828:25:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "5812:41:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1901,
												"initializationExpression": {
													"assignments": [
														1854
													],
													"declarations": [
														{
															"constant": false,
															"id": 1854,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "5785:13:10",
															"nodeType": "VariableDeclaration",
															"scope": 1901,
															"src": "5777:21:10",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 1853,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "5777:7:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 1855,
													"nodeType": "VariableDeclarationStatement",
													"src": "5777:21:10"
												},
												"loopExpression": {
													"expression": {
														"id": 1861,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "5867:15:10",
														"subExpression": {
															"id": 1860,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1854,
															"src": "5867:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1862,
													"nodeType": "ExpressionStatement",
													"src": "5867:15:10"
												},
												"nodeType": "ForStatement",
												"src": "5759:660:10"
											}
										]
									},
									"id": 1903,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "replaceFunctions",
									"nameLocation": "5058:16:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1805,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1801,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "5092:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 1903,
												"src": "5084:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1800,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "5084:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1804,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "5131:18:10",
												"nodeType": "VariableDeclaration",
												"scope": 1903,
												"src": "5115:34:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 1802,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "5115:6:10",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 1803,
													"nodeType": "ArrayTypeName",
													"src": "5115:8:10",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "5074:81:10"
									},
									"returnParameters": {
										"id": 1806,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "5165:0:10"
									},
									"scope": 2306,
									"src": "5049:1376:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 1967,
										"nodeType": "Block",
										"src": "6546:797:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 1915,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"expression": {
																	"id": 1912,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1908,
																	"src": "6577:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1913,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "length",
																"nodeType": "MemberAccess",
																"src": "6577:25:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 1914,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "6605:1:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "6577:29:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20666163657420746f20637574",
															"id": 1916,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6620:45:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															},
															"value": "LibDiamondCut: No selectors in facet to cut"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_1ffc682bcfedefd5e93ba9ed0c2d1bc0b18319886e3b4bd28a03a3d3729f85c0",
																"typeString": "literal_string \"LibDiamondCut: No selectors in facet to cut\""
															}
														],
														"id": 1911,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6556:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1917,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6556:119:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1918,
												"nodeType": "ExpressionStatement",
												"src": "6556:119:10"
											},
											{
												"assignments": [
													1921
												],
												"declarations": [
													{
														"constant": false,
														"id": 1921,
														"mutability": "mutable",
														"name": "ds",
														"nameLocation": "6708:2:10",
														"nodeType": "VariableDeclaration",
														"scope": 1967,
														"src": "6685:25:10",
														"stateVariable": false,
														"storageLocation": "storage",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
															"typeString": "struct LibDiamond.DiamondStorage"
														},
														"typeName": {
															"id": 1920,
															"nodeType": "UserDefinedTypeName",
															"pathNode": {
																"id": 1919,
																"name": "DiamondStorage",
																"nodeType": "IdentifierPath",
																"referencedDeclaration": 1512,
																"src": "6685:14:10"
															},
															"referencedDeclaration": 1512,
															"src": "6685:14:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																"typeString": "struct LibDiamond.DiamondStorage"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 1924,
												"initialValue": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"id": 1922,
														"name": "diamondStorage",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1524,
														"src": "6713:14:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_DiamondStorage_$1512_storage_ptr_$",
															"typeString": "function () pure returns (struct LibDiamond.DiamondStorage storage pointer)"
														}
													},
													"id": 1923,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6713:16:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage storage pointer"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "6685:44:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 1931,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 1926,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1905,
																"src": "6825:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "==",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 1929,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "6850:1:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 1928,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "6842:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 1927,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "6842:7:10",
																		"typeDescriptions": {}
																	}
																},
																"id": 1930,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "6842:10:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "6825:27:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472657373206d7573742062652061646472657373283029",
															"id": 1932,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "6866:56:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4",
																"typeString": "literal_string \"LibDiamondCut: Remove facet address must be address(0)\""
															},
															"value": "LibDiamondCut: Remove facet address must be address(0)"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_b739aae768f79b96e91d9f66398733516895e39eb09ee54a795b49dcc77504d4",
																"typeString": "literal_string \"LibDiamondCut: Remove facet address must be address(0)\""
															}
														],
														"id": 1925,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "6804:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 1933,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "6804:128:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1934,
												"nodeType": "ExpressionStatement",
												"src": "6804:128:10"
											},
											{
												"body": {
													"id": 1965,
													"nodeType": "Block",
													"src": "7076:261:10",
													"statements": [
														{
															"assignments": [
																1946
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1946,
																	"mutability": "mutable",
																	"name": "selector",
																	"nameLocation": "7097:8:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1965,
																	"src": "7090:15:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 1945,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "7090:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1950,
															"initialValue": {
																"baseExpression": {
																	"id": 1947,
																	"name": "_functionSelectors",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1908,
																	"src": "7108:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																		"typeString": "bytes4[] memory"
																	}
																},
																"id": 1949,
																"indexExpression": {
																	"id": 1948,
																	"name": "selectorIndex",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1936,
																	"src": "7127:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "7108:33:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "7090:51:10"
														},
														{
															"assignments": [
																1952
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 1952,
																	"mutability": "mutable",
																	"name": "oldFacetAddress",
																	"nameLocation": "7163:15:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 1965,
																	"src": "7155:23:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	},
																	"typeName": {
																		"id": 1951,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "7155:7:10",
																		"stateMutability": "nonpayable",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 1958,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 1953,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 1921,
																			"src": "7181:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 1954,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "selectorToFacetAndPosition",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1497,
																		"src": "7181:46:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																			"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																		}
																	},
																	"id": 1956,
																	"indexExpression": {
																		"id": 1955,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1946,
																		"src": "7228:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "7181:56:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																		"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																	}
																},
																"id": 1957,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddress",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1483,
																"src": "7181:86:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "7155:112:10"
														},
														{
															"expression": {
																"arguments": [
																	{
																		"id": 1960,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1921,
																		"src": "7296:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	{
																		"id": 1961,
																		"name": "oldFacetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1952,
																		"src": "7300:15:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	{
																		"id": 1962,
																		"name": "selector",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 1946,
																		"src": "7317:8:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		},
																		{
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		},
																		{
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	],
																	"id": 1959,
																	"name": "removeFunction",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2209,
																	"src": "7281:14:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_internal_nonpayable$_t_struct$_DiamondStorage_$1512_storage_ptr_$_t_address_$_t_bytes4_$returns$__$",
																		"typeString": "function (struct LibDiamond.DiamondStorage storage pointer,address,bytes4)"
																	}
																},
																"id": 1963,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "7281:45:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 1964,
															"nodeType": "ExpressionStatement",
															"src": "7281:45:10"
														}
													]
												},
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 1941,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 1938,
														"name": "selectorIndex",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 1936,
														"src": "6995:13:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "<",
													"rightExpression": {
														"expression": {
															"id": 1939,
															"name": "_functionSelectors",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1908,
															"src": "7011:18:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
																"typeString": "bytes4[] memory"
															}
														},
														"id": 1940,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "7011:25:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "6995:41:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 1966,
												"initializationExpression": {
													"assignments": [
														1936
													],
													"declarations": [
														{
															"constant": false,
															"id": 1936,
															"mutability": "mutable",
															"name": "selectorIndex",
															"nameLocation": "6968:13:10",
															"nodeType": "VariableDeclaration",
															"scope": 1966,
															"src": "6960:21:10",
															"stateVariable": false,
															"storageLocation": "default",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"typeName": {
																"id": 1935,
																"name": "uint256",
																"nodeType": "ElementaryTypeName",
																"src": "6960:7:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"visibility": "internal"
														}
													],
													"id": 1937,
													"nodeType": "VariableDeclarationStatement",
													"src": "6960:21:10"
												},
												"loopExpression": {
													"expression": {
														"id": 1943,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "UnaryOperation",
														"operator": "++",
														"prefix": false,
														"src": "7050:15:10",
														"subExpression": {
															"id": 1942,
															"name": "selectorIndex",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1936,
															"src": "7050:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"id": 1944,
													"nodeType": "ExpressionStatement",
													"src": "7050:15:10"
												},
												"nodeType": "ForStatement",
												"src": "6942:395:10"
											}
										]
									},
									"id": 1968,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "removeFunctions",
									"nameLocation": "6440:15:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1909,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1905,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "6473:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 1968,
												"src": "6465:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1904,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "6465:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1908,
												"mutability": "mutable",
												"name": "_functionSelectors",
												"nameLocation": "6512:18:10",
												"nodeType": "VariableDeclaration",
												"scope": 1968,
												"src": "6496:34:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_array$_t_bytes4_$dyn_memory_ptr",
													"typeString": "bytes4[]"
												},
												"typeName": {
													"baseType": {
														"id": 1906,
														"name": "bytes4",
														"nodeType": "ElementaryTypeName",
														"src": "6496:6:10",
														"typeDescriptions": {
															"typeIdentifier": "t_bytes4",
															"typeString": "bytes4"
														}
													},
													"id": 1907,
													"nodeType": "ArrayTypeName",
													"src": "6496:8:10",
													"typeDescriptions": {
														"typeIdentifier": "t_array$_t_bytes4_$dyn_storage_ptr",
														"typeString": "bytes4[]"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "6455:81:10"
									},
									"returnParameters": {
										"id": 1910,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "6546:0:10"
									},
									"scope": 2306,
									"src": "6431:912:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2000,
										"nodeType": "Block",
										"src": "7438:299:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"id": 1977,
															"name": "_facetAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1973,
															"src": "7484:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465",
															"id": 1978,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "7511:38:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b",
																"typeString": "literal_string \"LibDiamondCut: New facet has no code\""
															},
															"value": "LibDiamondCut: New facet has no code"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															{
																"typeIdentifier": "t_stringliteral_846ccbeb9c32d4d40d2c1bf991251db6ab65744a2f52b273947cee088a65504b",
																"typeString": "literal_string \"LibDiamondCut: New facet has no code\""
															}
														],
														"id": 1976,
														"name": "enforceHasContractCode",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2305,
														"src": "7448:22:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (address,string memory) view"
														}
													},
													"id": 1979,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7448:111:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1980,
												"nodeType": "ExpressionStatement",
												"src": "7448:111:10"
											},
											{
												"expression": {
													"id": 1990,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 1981,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 1971,
																	"src": "7569:2:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 1984,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetFunctionSelectors",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1502,
																"src": "7569:25:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																	"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																}
															},
															"id": 1985,
															"indexExpression": {
																"id": 1983,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1973,
																"src": "7595:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "7569:40:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
															}
														},
														"id": 1986,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "facetAddressPosition",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1491,
														"src": "7569:61:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"expression": {
															"expression": {
																"id": 1987,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1971,
																"src": "7633:2:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 1988,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "facetAddresses",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1505,
															"src": "7633:30:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 1989,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "7633:50:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "7569:114:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"id": 1991,
												"nodeType": "ExpressionStatement",
												"src": "7569:114:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 1997,
															"name": "_facetAddress",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 1973,
															"src": "7716:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_address",
																"typeString": "address"
															}
														],
														"expression": {
															"expression": {
																"id": 1992,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 1971,
																"src": "7693:2:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 1995,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "facetAddresses",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1505,
															"src": "7693:17:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_address_$dyn_storage",
																"typeString": "address[] storage ref"
															}
														},
														"id": 1996,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "push",
														"nodeType": "MemberAccess",
														"src": "7693:22:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
															"typeString": "function (address[] storage pointer,address)"
														}
													},
													"id": 1998,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "7693:37:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 1999,
												"nodeType": "ExpressionStatement",
												"src": "7693:37:10"
											}
										]
									},
									"id": 2001,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFacet",
									"nameLocation": "7358:8:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 1974,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 1971,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "7390:2:10",
												"nodeType": "VariableDeclaration",
												"scope": 2001,
												"src": "7367:25:10",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 1970,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 1969,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1512,
														"src": "7367:14:10"
													},
													"referencedDeclaration": 1512,
													"src": "7367:14:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 1973,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "7402:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 2001,
												"src": "7394:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 1972,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "7394:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7366:50:10"
									},
									"returnParameters": {
										"id": 1975,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "7438:0:10"
									},
									"scope": 2306,
									"src": "7349:388:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2041,
										"nodeType": "Block",
										"src": "7905:313:10",
										"statements": [
											{
												"expression": {
													"id": 2020,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 2013,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2004,
																	"src": "7915:2:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 2016,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "selectorToFacetAndPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1497,
																"src": "7915:42:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																	"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																}
															},
															"id": 2017,
															"indexExpression": {
																"id": 2015,
																"name": "_selector",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2006,
																"src": "7958:9:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "7915:53:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
															}
														},
														"id": 2018,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "functionSelectorPosition",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1485,
														"src": "7915:91:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2019,
														"name": "_selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2008,
														"src": "8009:17:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint96",
															"typeString": "uint96"
														}
													},
													"src": "7915:111:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"id": 2021,
												"nodeType": "ExpressionStatement",
												"src": "7915:111:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"id": 2029,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2006,
															"src": "8113:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														],
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 2022,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2004,
																		"src": "8036:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 2025,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1502,
																	"src": "8036:25:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 2026,
																"indexExpression": {
																	"id": 2024,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2010,
																	"src": "8062:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "8036:40:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 2027,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1489,
															"src": "8036:58:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 2028,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "push",
														"nodeType": "MemberAccess",
														"src": "8036:63:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$_t_bytes4_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$",
															"typeString": "function (bytes4[] storage pointer,bytes4)"
														}
													},
													"id": 2030,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8036:96:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2031,
												"nodeType": "ExpressionStatement",
												"src": "8036:96:10"
											},
											{
												"expression": {
													"id": 2039,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftHandSide": {
														"expression": {
															"baseExpression": {
																"expression": {
																	"id": 2032,
																	"name": "ds",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2004,
																	"src": "8142:2:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																		"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																	}
																},
																"id": 2035,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "selectorToFacetAndPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1497,
																"src": "8142:29:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																	"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																}
															},
															"id": 2036,
															"indexExpression": {
																"id": 2034,
																"name": "_selector",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2006,
																"src": "8172:9:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"nodeType": "IndexAccess",
															"src": "8142:40:10",
															"typeDescriptions": {
																"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
															}
														},
														"id": 2037,
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"memberName": "facetAddress",
														"nodeType": "MemberAccess",
														"referencedDeclaration": 1483,
														"src": "8142:53:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "Assignment",
													"operator": "=",
													"rightHandSide": {
														"id": 2038,
														"name": "_facetAddress",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2010,
														"src": "8198:13:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "8142:69:10",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"id": 2040,
												"nodeType": "ExpressionStatement",
												"src": "8142:69:10"
											}
										]
									},
									"id": 2042,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "addFunction",
									"nameLocation": "7752:11:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2011,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2004,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "7796:2:10",
												"nodeType": "VariableDeclaration",
												"scope": 2042,
												"src": "7773:25:10",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 2003,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2002,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1512,
														"src": "7773:14:10"
													},
													"referencedDeclaration": 1512,
													"src": "7773:14:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2006,
												"mutability": "mutable",
												"name": "_selector",
												"nameLocation": "7815:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 2042,
												"src": "7808:16:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes4",
													"typeString": "bytes4"
												},
												"typeName": {
													"id": 2005,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "7808:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2008,
												"mutability": "mutable",
												"name": "_selectorPosition",
												"nameLocation": "7841:17:10",
												"nodeType": "VariableDeclaration",
												"scope": 2042,
												"src": "7834:24:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_uint96",
													"typeString": "uint96"
												},
												"typeName": {
													"id": 2007,
													"name": "uint96",
													"nodeType": "ElementaryTypeName",
													"src": "7834:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2010,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "7876:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 2042,
												"src": "7868:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2009,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "7868:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "7763:132:10"
									},
									"returnParameters": {
										"id": 2012,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "7905:0:10"
									},
									"scope": 2306,
									"src": "7743:475:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2208,
										"nodeType": "Block",
										"src": "8355:2468:10",
										"statements": [
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2058,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2053,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2047,
																"src": "8386:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"hexValue": "30",
																		"id": 2056,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "number",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "8411:1:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		},
																		"value": "0"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_rational_0_by_1",
																			"typeString": "int_const 0"
																		}
																	],
																	"id": 2055,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "8403:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2054,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "8403:7:10",
																		"typeDescriptions": {}
																	}
																},
																"id": 2057,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8403:10:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "8386:27:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6374696f6e207468617420646f65736e2774206578697374",
															"id": 2059,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "8427:57:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71",
																"typeString": "literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""
															},
															"value": "LibDiamondCut: Can't remove function that doesn't exist"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_2c590e498c4d56c984a7092fd5e89a68b9f4541ce9f97252fb74e44a00ffbb71",
																"typeString": "literal_string \"LibDiamondCut: Can't remove function that doesn't exist\""
															}
														],
														"id": 2052,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "8365:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2060,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8365:129:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2061,
												"nodeType": "ExpressionStatement",
												"src": "8365:129:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_address",
																"typeString": "address"
															},
															"id": 2068,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2063,
																"name": "_facetAddress",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2047,
																"src": "8602:13:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": "!=",
															"rightExpression": {
																"arguments": [
																	{
																		"id": 2066,
																		"name": "this",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 4294967268,
																		"src": "8627:4:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_contract$_LibDiamond_$2306",
																			"typeString": "library LibDiamond"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_contract$_LibDiamond_$2306",
																			"typeString": "library LibDiamond"
																		}
																	],
																	"id": 2065,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"lValueRequested": false,
																	"nodeType": "ElementaryTypeNameExpression",
																	"src": "8619:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_type$_t_address_$",
																		"typeString": "type(address)"
																	},
																	"typeName": {
																		"id": 2064,
																		"name": "address",
																		"nodeType": "ElementaryTypeName",
																		"src": "8619:7:10",
																		"typeDescriptions": {}
																	}
																},
																"id": 2067,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "typeConversion",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "8619:13:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																}
															},
															"src": "8602:30:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"hexValue": "4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d757461626c652066756e6374696f6e",
															"id": 2069,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"kind": "string",
															"lValueRequested": false,
															"nodeType": "Literal",
															"src": "8646:48:10",
															"typeDescriptions": {
																"typeIdentifier": "t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21",
																"typeString": "literal_string \"LibDiamondCut: Can't remove immutable function\""
															},
															"value": "LibDiamondCut: Can't remove immutable function"
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_stringliteral_8ba063dfaa4be2d2cbe73dbb1364728b0f7031ac048441d5fad19e9541992b21",
																"typeString": "literal_string \"LibDiamondCut: Can't remove immutable function\""
															}
														],
														"id": 2062,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "8581:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2070,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "8581:123:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2071,
												"nodeType": "ExpressionStatement",
												"src": "8581:123:10"
											},
											{
												"assignments": [
													2073
												],
												"declarations": [
													{
														"constant": false,
														"id": 2073,
														"mutability": "mutable",
														"name": "selectorPosition",
														"nameLocation": "8796:16:10",
														"nodeType": "VariableDeclaration",
														"scope": 2208,
														"src": "8788:24:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2072,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "8788:7:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2079,
												"initialValue": {
													"expression": {
														"baseExpression": {
															"expression": {
																"id": 2074,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2045,
																"src": "8815:2:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 2075,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "selectorToFacetAndPosition",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1497,
															"src": "8815:42:10",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
															}
														},
														"id": 2077,
														"indexExpression": {
															"id": 2076,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2049,
															"src": "8858:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": false,
														"nodeType": "IndexAccess",
														"src": "8815:53:10",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
															"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
														}
													},
													"id": 2078,
													"isConstant": false,
													"isLValue": true,
													"isPure": false,
													"lValueRequested": false,
													"memberName": "functionSelectorPosition",
													"nodeType": "MemberAccess",
													"referencedDeclaration": 1485,
													"src": "8815:91:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint96",
														"typeString": "uint96"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8788:118:10"
											},
											{
												"assignments": [
													2081
												],
												"declarations": [
													{
														"constant": false,
														"id": 2081,
														"mutability": "mutable",
														"name": "lastSelectorPosition",
														"nameLocation": "8924:20:10",
														"nodeType": "VariableDeclaration",
														"scope": 2208,
														"src": "8916:28:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2080,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "8916:7:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2090,
												"initialValue": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 2089,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 2082,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2045,
																		"src": "8947:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 2083,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1502,
																	"src": "8947:38:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 2085,
																"indexExpression": {
																	"id": 2084,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2047,
																	"src": "8986:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "8947:53:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 2086,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1489,
															"src": "8947:84:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 2087,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "length",
														"nodeType": "MemberAccess",
														"src": "8947:104:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "-",
													"rightExpression": {
														"hexValue": "31",
														"id": 2088,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "9054:1:10",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_1_by_1",
															"typeString": "int_const 1"
														},
														"value": "1"
													},
													"src": "8947:108:10",
													"typeDescriptions": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													}
												},
												"nodeType": "VariableDeclarationStatement",
												"src": "8916:139:10"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 2093,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 2091,
														"name": "selectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2073,
														"src": "9137:16:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "!=",
													"rightExpression": {
														"id": 2092,
														"name": "lastSelectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2081,
														"src": "9157:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"src": "9137:40:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 2128,
												"nodeType": "IfStatement",
												"src": "9133:493:10",
												"trueBody": {
													"id": 2127,
													"nodeType": "Block",
													"src": "9179:447:10",
													"statements": [
														{
															"assignments": [
																2095
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2095,
																	"mutability": "mutable",
																	"name": "lastSelector",
																	"nameLocation": "9200:12:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 2127,
																	"src": "9193:19:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	},
																	"typeName": {
																		"id": 2094,
																		"name": "bytes4",
																		"nodeType": "ElementaryTypeName",
																		"src": "9193:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes4",
																			"typeString": "bytes4"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2103,
															"initialValue": {
																"baseExpression": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 2096,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2045,
																				"src": "9215:2:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 2097,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "facetFunctionSelectors",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1502,
																			"src": "9215:42:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																				"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																			}
																		},
																		"id": 2099,
																		"indexExpression": {
																			"id": 2098,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2047,
																			"src": "9258:13:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "9215:57:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																			"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																		}
																	},
																	"id": 2100,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "functionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1489,
																	"src": "9215:92:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																		"typeString": "bytes4[] storage ref"
																	}
																},
																"id": 2102,
																"indexExpression": {
																	"id": 2101,
																	"name": "lastSelectorPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2081,
																	"src": "9308:20:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "9215:114:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "9193:136:10"
														},
														{
															"expression": {
																"id": 2113,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"baseExpression": {
																		"expression": {
																			"baseExpression": {
																				"expression": {
																					"id": 2104,
																					"name": "ds",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 2045,
																					"src": "9343:2:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																						"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																					}
																				},
																				"id": 2107,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "facetFunctionSelectors",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 1502,
																				"src": "9343:25:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																					"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																				}
																			},
																			"id": 2108,
																			"indexExpression": {
																				"id": 2106,
																				"name": "_facetAddress",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2047,
																				"src": "9369:13:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "9343:40:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																				"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																			}
																		},
																		"id": 2109,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "functionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1489,
																		"src": "9343:58:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																			"typeString": "bytes4[] storage ref"
																		}
																	},
																	"id": 2111,
																	"indexExpression": {
																		"id": 2110,
																		"name": "selectorPosition",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2073,
																		"src": "9423:16:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"nodeType": "IndexAccess",
																	"src": "9343:114:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"id": 2112,
																	"name": "lastSelector",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2095,
																	"src": "9460:12:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes4",
																		"typeString": "bytes4"
																	}
																},
																"src": "9343:129:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bytes4",
																	"typeString": "bytes4"
																}
															},
															"id": 2114,
															"nodeType": "ExpressionStatement",
															"src": "9343:129:10"
														},
														{
															"expression": {
																"id": 2125,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftHandSide": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 2115,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2045,
																				"src": "9486:2:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 2118,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "selectorToFacetAndPosition",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1497,
																			"src": "9486:46:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																				"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
																			}
																		},
																		"id": 2119,
																		"indexExpression": {
																			"id": 2117,
																			"name": "lastSelector",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2095,
																			"src": "9533:12:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bytes4",
																				"typeString": "bytes4"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "9486:60:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
																			"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
																		}
																	},
																	"id": 2120,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"memberName": "functionSelectorPosition",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1485,
																	"src": "9486:102:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"nodeType": "Assignment",
																"operator": "=",
																"rightHandSide": {
																	"arguments": [
																		{
																			"id": 2123,
																			"name": "selectorPosition",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2073,
																			"src": "9598:16:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		],
																		"id": 2122,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "9591:6:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_uint96_$",
																			"typeString": "type(uint96)"
																		},
																		"typeName": {
																			"id": 2121,
																			"name": "uint96",
																			"nodeType": "ElementaryTypeName",
																			"src": "9591:6:10",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 2124,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "9591:24:10",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint96",
																		"typeString": "uint96"
																	}
																},
																"src": "9486:129:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint96",
																	"typeString": "uint96"
																}
															},
															"id": 2126,
															"nodeType": "ExpressionStatement",
															"src": "9486:129:10"
														}
													]
												}
											},
											{
												"expression": {
													"arguments": [],
													"expression": {
														"argumentTypes": [],
														"expression": {
															"expression": {
																"baseExpression": {
																	"expression": {
																		"id": 2129,
																		"name": "ds",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2045,
																		"src": "9671:2:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																			"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																		}
																	},
																	"id": 2132,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "facetFunctionSelectors",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1502,
																	"src": "9671:25:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																		"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																	}
																},
																"id": 2133,
																"indexExpression": {
																	"id": 2131,
																	"name": "_facetAddress",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2047,
																	"src": "9697:13:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "IndexAccess",
																"src": "9671:40:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																	"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																}
															},
															"id": 2134,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "functionSelectors",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1489,
															"src": "9671:58:10",
															"typeDescriptions": {
																"typeIdentifier": "t_array$_t_bytes4_$dyn_storage",
																"typeString": "bytes4[] storage ref"
															}
														},
														"id": 2135,
														"isConstant": false,
														"isLValue": false,
														"isPure": false,
														"lValueRequested": false,
														"memberName": "pop",
														"nodeType": "MemberAccess",
														"src": "9671:62:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_bytes4_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_bytes4_$dyn_storage_ptr_$",
															"typeString": "function (bytes4[] storage pointer)"
														}
													},
													"id": 2136,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "9671:64:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2137,
												"nodeType": "ExpressionStatement",
												"src": "9671:64:10"
											},
											{
												"expression": {
													"id": 2142,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"nodeType": "UnaryOperation",
													"operator": "delete",
													"prefix": true,
													"src": "9745:47:10",
													"subExpression": {
														"baseExpression": {
															"expression": {
																"id": 2138,
																"name": "ds",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2045,
																"src": "9752:2:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																	"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																}
															},
															"id": 2139,
															"isConstant": false,
															"isLValue": true,
															"isPure": false,
															"lValueRequested": false,
															"memberName": "selectorToFacetAndPosition",
															"nodeType": "MemberAccess",
															"referencedDeclaration": 1497,
															"src": "9752:29:10",
															"typeDescriptions": {
																"typeIdentifier": "t_mapping$_t_bytes4_$_t_struct$_FacetAddressAndPosition_$1486_storage_$",
																"typeString": "mapping(bytes4 => struct LibDiamond.FacetAddressAndPosition storage ref)"
															}
														},
														"id": 2141,
														"indexExpression": {
															"id": 2140,
															"name": "_selector",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2049,
															"src": "9782:9:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bytes4",
																"typeString": "bytes4"
															}
														},
														"isConstant": false,
														"isLValue": true,
														"isPure": false,
														"lValueRequested": true,
														"nodeType": "IndexAccess",
														"src": "9752:40:10",
														"typeDescriptions": {
															"typeIdentifier": "t_struct$_FacetAddressAndPosition_$1486_storage",
															"typeString": "struct LibDiamond.FacetAddressAndPosition storage ref"
														}
													},
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2143,
												"nodeType": "ExpressionStatement",
												"src": "9745:47:10"
											},
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_uint256",
														"typeString": "uint256"
													},
													"id": 2146,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 2144,
														"name": "lastSelectorPosition",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2081,
														"src": "9887:20:10",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"hexValue": "30",
														"id": 2145,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "number",
														"lValueRequested": false,
														"nodeType": "Literal",
														"src": "9911:1:10",
														"typeDescriptions": {
															"typeIdentifier": "t_rational_0_by_1",
															"typeString": "int_const 0"
														},
														"value": "0"
													},
													"src": "9887:25:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"id": 2207,
												"nodeType": "IfStatement",
												"src": "9883:934:10",
												"trueBody": {
													"id": 2206,
													"nodeType": "Block",
													"src": "9914:903:10",
													"statements": [
														{
															"assignments": [
																2148
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2148,
																	"mutability": "mutable",
																	"name": "lastFacetAddressPosition",
																	"nameLocation": "10027:24:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 2206,
																	"src": "10019:32:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 2147,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "10019:7:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2154,
															"initialValue": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 2153,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"expression": {
																		"expression": {
																			"id": 2149,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2045,
																			"src": "10054:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 2150,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetAddresses",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1505,
																		"src": "10054:17:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 2151,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "length",
																	"nodeType": "MemberAccess",
																	"src": "10054:24:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "-",
																"rightExpression": {
																	"hexValue": "31",
																	"id": 2152,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": true,
																	"kind": "number",
																	"lValueRequested": false,
																	"nodeType": "Literal",
																	"src": "10081:1:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_rational_1_by_1",
																		"typeString": "int_const 1"
																	},
																	"value": "1"
																},
																"src": "10054:28:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "10019:63:10"
														},
														{
															"assignments": [
																2156
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2156,
																	"mutability": "mutable",
																	"name": "facetAddressPosition",
																	"nameLocation": "10104:20:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 2206,
																	"src": "10096:28:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	},
																	"typeName": {
																		"id": 2155,
																		"name": "uint256",
																		"nodeType": "ElementaryTypeName",
																		"src": "10096:7:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2162,
															"initialValue": {
																"expression": {
																	"baseExpression": {
																		"expression": {
																			"id": 2157,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2045,
																			"src": "10127:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 2158,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetFunctionSelectors",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1502,
																		"src": "10127:42:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																			"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																		}
																	},
																	"id": 2160,
																	"indexExpression": {
																		"id": 2159,
																		"name": "_facetAddress",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2047,
																		"src": "10170:13:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": false,
																	"nodeType": "IndexAccess",
																	"src": "10127:57:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																		"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																	}
																},
																"id": 2161,
																"isConstant": false,
																"isLValue": true,
																"isPure": false,
																"lValueRequested": false,
																"memberName": "facetAddressPosition",
																"nodeType": "MemberAccess",
																"referencedDeclaration": 1491,
																"src": "10127:95:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "10096:126:10"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																},
																"id": 2165,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2163,
																	"name": "facetAddressPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2156,
																	"src": "10240:20:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"id": 2164,
																	"name": "lastFacetAddressPosition",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2148,
																	"src": "10264:24:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"src": "10240:48:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 2191,
															"nodeType": "IfStatement",
															"src": "10236:418:10",
															"trueBody": {
																"id": 2190,
																"nodeType": "Block",
																"src": "10290:364:10",
																"statements": [
																	{
																		"assignments": [
																			2167
																		],
																		"declarations": [
																			{
																				"constant": false,
																				"id": 2167,
																				"mutability": "mutable",
																				"name": "lastFacetAddress",
																				"nameLocation": "10316:16:10",
																				"nodeType": "VariableDeclaration",
																				"scope": 2190,
																				"src": "10308:24:10",
																				"stateVariable": false,
																				"storageLocation": "default",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				},
																				"typeName": {
																					"id": 2166,
																					"name": "address",
																					"nodeType": "ElementaryTypeName",
																					"src": "10308:7:10",
																					"stateMutability": "nonpayable",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				"visibility": "internal"
																			}
																		],
																		"id": 2172,
																		"initialValue": {
																			"baseExpression": {
																				"expression": {
																					"id": 2168,
																					"name": "ds",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 2045,
																					"src": "10335:2:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																						"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																					}
																				},
																				"id": 2169,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "facetAddresses",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 1505,
																				"src": "10335:17:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_array$_t_address_$dyn_storage",
																					"typeString": "address[] storage ref"
																				}
																			},
																			"id": 2171,
																			"indexExpression": {
																				"id": 2170,
																				"name": "lastFacetAddressPosition",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2148,
																				"src": "10374:24:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"nodeType": "IndexAccess",
																			"src": "10335:81:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"nodeType": "VariableDeclarationStatement",
																		"src": "10308:108:10"
																	},
																	{
																		"expression": {
																			"id": 2179,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"baseExpression": {
																					"expression": {
																						"id": 2173,
																						"name": "ds",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 2045,
																						"src": "10434:2:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																							"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																						}
																					},
																					"id": 2176,
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"memberName": "facetAddresses",
																					"nodeType": "MemberAccess",
																					"referencedDeclaration": 1505,
																					"src": "10434:17:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_array$_t_address_$dyn_storage",
																						"typeString": "address[] storage ref"
																					}
																				},
																				"id": 2177,
																				"indexExpression": {
																					"id": 2175,
																					"name": "facetAddressPosition",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 2156,
																					"src": "10452:20:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_uint256",
																						"typeString": "uint256"
																					}
																				},
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": true,
																				"nodeType": "IndexAccess",
																				"src": "10434:39:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"id": 2178,
																				"name": "lastFacetAddress",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2167,
																				"src": "10476:16:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_address",
																					"typeString": "address"
																				}
																			},
																			"src": "10434:58:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"id": 2180,
																		"nodeType": "ExpressionStatement",
																		"src": "10434:58:10"
																	},
																	{
																		"expression": {
																			"id": 2188,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftHandSide": {
																				"expression": {
																					"baseExpression": {
																						"expression": {
																							"id": 2181,
																							"name": "ds",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [],
																							"referencedDeclaration": 2045,
																							"src": "10510:2:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																								"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																							}
																						},
																						"id": 2184,
																						"isConstant": false,
																						"isLValue": true,
																						"isPure": false,
																						"lValueRequested": false,
																						"memberName": "facetFunctionSelectors",
																						"nodeType": "MemberAccess",
																						"referencedDeclaration": 1502,
																						"src": "10510:46:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																							"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																						}
																					},
																					"id": 2185,
																					"indexExpression": {
																						"id": 2183,
																						"name": "lastFacetAddress",
																						"nodeType": "Identifier",
																						"overloadedDeclarations": [],
																						"referencedDeclaration": 2167,
																						"src": "10557:16:10",
																						"typeDescriptions": {
																							"typeIdentifier": "t_address",
																							"typeString": "address"
																						}
																					},
																					"isConstant": false,
																					"isLValue": true,
																					"isPure": false,
																					"lValueRequested": false,
																					"nodeType": "IndexAccess",
																					"src": "10510:64:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																						"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																					}
																				},
																				"id": 2186,
																				"isConstant": false,
																				"isLValue": true,
																				"isPure": false,
																				"lValueRequested": true,
																				"memberName": "facetAddressPosition",
																				"nodeType": "MemberAccess",
																				"referencedDeclaration": 1491,
																				"src": "10510:106:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "Assignment",
																			"operator": "=",
																			"rightHandSide": {
																				"id": 2187,
																				"name": "facetAddressPosition",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2156,
																				"src": "10619:20:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"src": "10510:129:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"id": 2189,
																		"nodeType": "ExpressionStatement",
																		"src": "10510:129:10"
																	}
																]
															}
														},
														{
															"expression": {
																"arguments": [],
																"expression": {
																	"argumentTypes": [],
																	"expression": {
																		"expression": {
																			"id": 2192,
																			"name": "ds",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2045,
																			"src": "10667:2:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																				"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																			}
																		},
																		"id": 2195,
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"memberName": "facetAddresses",
																		"nodeType": "MemberAccess",
																		"referencedDeclaration": 1505,
																		"src": "10667:17:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_array$_t_address_$dyn_storage",
																			"typeString": "address[] storage ref"
																		}
																	},
																	"id": 2196,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "pop",
																	"nodeType": "MemberAccess",
																	"src": "10667:21:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$returns$__$bound_to$_t_array$_t_address_$dyn_storage_ptr_$",
																		"typeString": "function (address[] storage pointer)"
																	}
																},
																"id": 2197,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "10667:23:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2198,
															"nodeType": "ExpressionStatement",
															"src": "10667:23:10"
														},
														{
															"expression": {
																"id": 2204,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "delete",
																"prefix": true,
																"src": "10704:102:10",
																"subExpression": {
																	"expression": {
																		"baseExpression": {
																			"expression": {
																				"id": 2199,
																				"name": "ds",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2045,
																				"src": "10711:2:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
																					"typeString": "struct LibDiamond.DiamondStorage storage pointer"
																				}
																			},
																			"id": 2200,
																			"isConstant": false,
																			"isLValue": true,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "facetFunctionSelectors",
																			"nodeType": "MemberAccess",
																			"referencedDeclaration": 1502,
																			"src": "10711:42:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_mapping$_t_address_$_t_struct$_FacetFunctionSelectors_$1492_storage_$",
																				"typeString": "mapping(address => struct LibDiamond.FacetFunctionSelectors storage ref)"
																			}
																		},
																		"id": 2202,
																		"indexExpression": {
																			"id": 2201,
																			"name": "_facetAddress",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 2047,
																			"src": "10754:13:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_address",
																				"typeString": "address"
																			}
																		},
																		"isConstant": false,
																		"isLValue": true,
																		"isPure": false,
																		"lValueRequested": false,
																		"nodeType": "IndexAccess",
																		"src": "10711:57:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_struct$_FacetFunctionSelectors_$1492_storage",
																			"typeString": "struct LibDiamond.FacetFunctionSelectors storage ref"
																		}
																	},
																	"id": 2203,
																	"isConstant": false,
																	"isLValue": true,
																	"isPure": false,
																	"lValueRequested": true,
																	"memberName": "facetAddressPosition",
																	"nodeType": "MemberAccess",
																	"referencedDeclaration": 1491,
																	"src": "10711:95:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_uint256",
																		"typeString": "uint256"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2205,
															"nodeType": "ExpressionStatement",
															"src": "10704:102:10"
														}
													]
												}
											}
										]
									},
									"id": 2209,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "removeFunction",
									"nameLocation": "8233:14:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2050,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2045,
												"mutability": "mutable",
												"name": "ds",
												"nameLocation": "8280:2:10",
												"nodeType": "VariableDeclaration",
												"scope": 2209,
												"src": "8257:25:10",
												"stateVariable": false,
												"storageLocation": "storage",
												"typeDescriptions": {
													"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
													"typeString": "struct LibDiamond.DiamondStorage"
												},
												"typeName": {
													"id": 2044,
													"nodeType": "UserDefinedTypeName",
													"pathNode": {
														"id": 2043,
														"name": "DiamondStorage",
														"nodeType": "IdentifierPath",
														"referencedDeclaration": 1512,
														"src": "8257:14:10"
													},
													"referencedDeclaration": 1512,
													"src": "8257:14:10",
													"typeDescriptions": {
														"typeIdentifier": "t_struct$_DiamondStorage_$1512_storage_ptr",
														"typeString": "struct LibDiamond.DiamondStorage"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2047,
												"mutability": "mutable",
												"name": "_facetAddress",
												"nameLocation": "8300:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 2209,
												"src": "8292:21:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2046,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "8292:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2049,
												"mutability": "mutable",
												"name": "_selector",
												"nameLocation": "8330:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 2209,
												"src": "8323:16:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes4",
													"typeString": "bytes4"
												},
												"typeName": {
													"id": 2048,
													"name": "bytes4",
													"nodeType": "ElementaryTypeName",
													"src": "8323:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes4",
														"typeString": "bytes4"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "8247:98:10"
									},
									"returnParameters": {
										"id": 2051,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "8355:0:10"
									},
									"scope": 2306,
									"src": "8224:2599:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2285,
										"nodeType": "Block",
										"src": "10919:1006:10",
										"statements": [
											{
												"condition": {
													"commonType": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													},
													"id": 2221,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"lValueRequested": false,
													"leftExpression": {
														"id": 2216,
														"name": "_init",
														"nodeType": "Identifier",
														"overloadedDeclarations": [],
														"referencedDeclaration": 2211,
														"src": "10933:5:10",
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"nodeType": "BinaryOperation",
													"operator": "==",
													"rightExpression": {
														"arguments": [
															{
																"hexValue": "30",
																"id": 2219,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "10950:1:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															}
														],
														"expression": {
															"argumentTypes": [
																{
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																}
															],
															"id": 2218,
															"isConstant": false,
															"isLValue": false,
															"isPure": true,
															"lValueRequested": false,
															"nodeType": "ElementaryTypeNameExpression",
															"src": "10942:7:10",
															"typeDescriptions": {
																"typeIdentifier": "t_type$_t_address_$",
																"typeString": "type(address)"
															},
															"typeName": {
																"id": 2217,
																"name": "address",
																"nodeType": "ElementaryTypeName",
																"src": "10942:7:10",
																"typeDescriptions": {}
															}
														},
														"id": 2220,
														"isConstant": false,
														"isLValue": false,
														"isPure": true,
														"kind": "typeConversion",
														"lValueRequested": false,
														"names": [],
														"nodeType": "FunctionCall",
														"src": "10942:10:10",
														"tryCall": false,
														"typeDescriptions": {
															"typeIdentifier": "t_address",
															"typeString": "address"
														}
													},
													"src": "10933:19:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bool",
														"typeString": "bool"
													}
												},
												"falseBody": {
													"id": 2283,
													"nodeType": "Block",
													"src": "11125:794:10",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 2235,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"expression": {
																				"id": 2232,
																				"name": "_calldata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2213,
																				"src": "11164:9:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			"id": 2233,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "length",
																			"nodeType": "MemberAccess",
																			"src": "11164:16:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": ">",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 2234,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "11183:1:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "11164:20:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d70747920627574205f696e6974206973206e6f742061646472657373283029",
																		"id": 2236,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "11202:63:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042",
																			"typeString": "literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""
																		},
																		"value": "LibDiamondCut: _calldata is empty but _init is not address(0)"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_868d165ec2461661b624442252aed6a645399bfae7b60083a77ea1b61b084042",
																			"typeString": "literal_string \"LibDiamondCut: _calldata is empty but _init is not address(0)\""
																		}
																	],
																	"id": 2231,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "11139:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 2237,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "11139:140:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2238,
															"nodeType": "ExpressionStatement",
															"src": "11139:140:10"
														},
														{
															"condition": {
																"commonType": {
																	"typeIdentifier": "t_address",
																	"typeString": "address"
																},
																"id": 2244,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"leftExpression": {
																	"id": 2239,
																	"name": "_init",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2211,
																	"src": "11297:5:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"nodeType": "BinaryOperation",
																"operator": "!=",
																"rightExpression": {
																	"arguments": [
																		{
																			"id": 2242,
																			"name": "this",
																			"nodeType": "Identifier",
																			"overloadedDeclarations": [],
																			"referencedDeclaration": 4294967268,
																			"src": "11314:4:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_contract$_LibDiamond_$2306",
																				"typeString": "library LibDiamond"
																			}
																		}
																	],
																	"expression": {
																		"argumentTypes": [
																			{
																				"typeIdentifier": "t_contract$_LibDiamond_$2306",
																				"typeString": "library LibDiamond"
																			}
																		],
																		"id": 2241,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"lValueRequested": false,
																		"nodeType": "ElementaryTypeNameExpression",
																		"src": "11306:7:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_type$_t_address_$",
																			"typeString": "type(address)"
																		},
																		"typeName": {
																			"id": 2240,
																			"name": "address",
																			"nodeType": "ElementaryTypeName",
																			"src": "11306:7:10",
																			"typeDescriptions": {}
																		}
																	},
																	"id": 2243,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"kind": "typeConversion",
																	"lValueRequested": false,
																	"names": [],
																	"nodeType": "FunctionCall",
																	"src": "11306:13:10",
																	"tryCall": false,
																	"typeDescriptions": {
																		"typeIdentifier": "t_address",
																		"typeString": "address"
																	}
																},
																"src": "11297:22:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 2251,
															"nodeType": "IfStatement",
															"src": "11293:192:10",
															"trueBody": {
																"id": 2250,
																"nodeType": "Block",
																"src": "11321:164:10",
																"statements": [
																	{
																		"expression": {
																			"arguments": [
																				{
																					"id": 2246,
																					"name": "_init",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 2211,
																					"src": "11383:5:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					}
																				},
																				{
																					"hexValue": "4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f6465",
																					"id": 2247,
																					"isConstant": false,
																					"isLValue": false,
																					"isPure": true,
																					"kind": "string",
																					"lValueRequested": false,
																					"nodeType": "Literal",
																					"src": "11410:42:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0",
																						"typeString": "literal_string \"LibDiamondCut: _init address has no code\""
																					},
																					"value": "LibDiamondCut: _init address has no code"
																				}
																			],
																			"expression": {
																				"argumentTypes": [
																					{
																						"typeIdentifier": "t_address",
																						"typeString": "address"
																					},
																					{
																						"typeIdentifier": "t_stringliteral_460f8f0920c649146ef02741816b1cf9ce4f02ea288ceb73adf027cefe9069a0",
																						"typeString": "literal_string \"LibDiamondCut: _init address has no code\""
																					}
																				],
																				"id": 2245,
																				"name": "enforceHasContractCode",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2305,
																				"src": "11339:22:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_function_internal_view$_t_address_$_t_string_memory_ptr_$returns$__$",
																					"typeString": "function (address,string memory) view"
																				}
																			},
																			"id": 2248,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"kind": "functionCall",
																			"lValueRequested": false,
																			"names": [],
																			"nodeType": "FunctionCall",
																			"src": "11339:131:10",
																			"tryCall": false,
																			"typeDescriptions": {
																				"typeIdentifier": "t_tuple$__$",
																				"typeString": "tuple()"
																			}
																		},
																		"id": 2249,
																		"nodeType": "ExpressionStatement",
																		"src": "11339:131:10"
																	}
																]
															}
														},
														{
															"assignments": [
																2253,
																2255
															],
															"declarations": [
																{
																	"constant": false,
																	"id": 2253,
																	"mutability": "mutable",
																	"name": "success",
																	"nameLocation": "11567:7:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 2283,
																	"src": "11562:12:10",
																	"stateVariable": false,
																	"storageLocation": "default",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	},
																	"typeName": {
																		"id": 2252,
																		"name": "bool",
																		"nodeType": "ElementaryTypeName",
																		"src": "11562:4:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	"visibility": "internal"
																},
																{
																	"constant": false,
																	"id": 2255,
																	"mutability": "mutable",
																	"name": "error",
																	"nameLocation": "11589:5:10",
																	"nodeType": "VariableDeclaration",
																	"scope": 2283,
																	"src": "11576:18:10",
																	"stateVariable": false,
																	"storageLocation": "memory",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bytes_memory_ptr",
																		"typeString": "bytes"
																	},
																	"typeName": {
																		"id": 2254,
																		"name": "bytes",
																		"nodeType": "ElementaryTypeName",
																		"src": "11576:5:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_storage_ptr",
																			"typeString": "bytes"
																		}
																	},
																	"visibility": "internal"
																}
															],
															"id": 2260,
															"initialValue": {
																"arguments": [
																	{
																		"id": 2258,
																		"name": "_calldata",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2213,
																		"src": "11617:9:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bytes_memory_ptr",
																			"typeString": "bytes memory"
																		}
																	],
																	"expression": {
																		"id": 2256,
																		"name": "_init",
																		"nodeType": "Identifier",
																		"overloadedDeclarations": [],
																		"referencedDeclaration": 2211,
																		"src": "11598:5:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_address",
																			"typeString": "address"
																		}
																	},
																	"id": 2257,
																	"isConstant": false,
																	"isLValue": false,
																	"isPure": false,
																	"lValueRequested": false,
																	"memberName": "delegatecall",
																	"nodeType": "MemberAccess",
																	"src": "11598:18:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
																		"typeString": "function (bytes memory) returns (bool,bytes memory)"
																	}
																},
																"id": 2259,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "11598:29:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
																	"typeString": "tuple(bool,bytes memory)"
																}
															},
															"nodeType": "VariableDeclarationStatement",
															"src": "11561:66:10"
														},
														{
															"condition": {
																"id": 2262,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"lValueRequested": false,
																"nodeType": "UnaryOperation",
																"operator": "!",
																"prefix": true,
																"src": "11645:8:10",
																"subExpression": {
																	"id": 2261,
																	"name": "success",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [],
																	"referencedDeclaration": 2253,
																	"src": "11646:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_bool",
																		"typeString": "bool"
																	}
																},
																"typeDescriptions": {
																	"typeIdentifier": "t_bool",
																	"typeString": "bool"
																}
															},
															"id": 2282,
															"nodeType": "IfStatement",
															"src": "11641:268:10",
															"trueBody": {
																"id": 2281,
																"nodeType": "Block",
																"src": "11655:254:10",
																"statements": [
																	{
																		"condition": {
																			"commonType": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			},
																			"id": 2266,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"leftExpression": {
																				"expression": {
																					"id": 2263,
																					"name": "error",
																					"nodeType": "Identifier",
																					"overloadedDeclarations": [],
																					"referencedDeclaration": 2255,
																					"src": "11677:5:10",
																					"typeDescriptions": {
																						"typeIdentifier": "t_bytes_memory_ptr",
																						"typeString": "bytes memory"
																					}
																				},
																				"id": 2264,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": false,
																				"lValueRequested": false,
																				"memberName": "length",
																				"nodeType": "MemberAccess",
																				"src": "11677:12:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_uint256",
																					"typeString": "uint256"
																				}
																			},
																			"nodeType": "BinaryOperation",
																			"operator": ">",
																			"rightExpression": {
																				"hexValue": "30",
																				"id": 2265,
																				"isConstant": false,
																				"isLValue": false,
																				"isPure": true,
																				"kind": "number",
																				"lValueRequested": false,
																				"nodeType": "Literal",
																				"src": "11692:1:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_rational_0_by_1",
																					"typeString": "int_const 0"
																				},
																				"value": "0"
																			},
																			"src": "11677:16:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_bool",
																				"typeString": "bool"
																			}
																		},
																		"falseBody": {
																			"id": 2279,
																			"nodeType": "Block",
																			"src": "11806:89:10",
																			"statements": [
																				{
																					"expression": {
																						"arguments": [
																							{
																								"hexValue": "4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e207265766572746564",
																								"id": 2276,
																								"isConstant": false,
																								"isLValue": false,
																								"isPure": true,
																								"kind": "string",
																								"lValueRequested": false,
																								"nodeType": "Literal",
																								"src": "11835:40:10",
																								"typeDescriptions": {
																									"typeIdentifier": "t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d",
																									"typeString": "literal_string \"LibDiamondCut: _init function reverted\""
																								},
																								"value": "LibDiamondCut: _init function reverted"
																							}
																						],
																						"expression": {
																							"argumentTypes": [
																								{
																									"typeIdentifier": "t_stringliteral_080b2fe78815767d522290509c8fce2af708c8a54455ca1b0cc978c92822465d",
																									"typeString": "literal_string \"LibDiamondCut: _init function reverted\""
																								}
																							],
																							"id": 2275,
																							"name": "revert",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [
																								4294967277,
																								4294967277
																							],
																							"referencedDeclaration": 4294967277,
																							"src": "11828:6:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																								"typeString": "function (string memory) pure"
																							}
																						},
																						"id": 2277,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": false,
																						"kind": "functionCall",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "11828:48:10",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_tuple$__$",
																							"typeString": "tuple()"
																						}
																					},
																					"id": 2278,
																					"nodeType": "ExpressionStatement",
																					"src": "11828:48:10"
																				}
																			]
																		},
																		"id": 2280,
																		"nodeType": "IfStatement",
																		"src": "11673:222:10",
																		"trueBody": {
																			"id": 2274,
																			"nodeType": "Block",
																			"src": "11695:105:10",
																			"statements": [
																				{
																					"expression": {
																						"arguments": [
																							{
																								"arguments": [
																									{
																										"id": 2270,
																										"name": "error",
																										"nodeType": "Identifier",
																										"overloadedDeclarations": [],
																										"referencedDeclaration": 2255,
																										"src": "11774:5:10",
																										"typeDescriptions": {
																											"typeIdentifier": "t_bytes_memory_ptr",
																											"typeString": "bytes memory"
																										}
																									}
																								],
																								"expression": {
																									"argumentTypes": [
																										{
																											"typeIdentifier": "t_bytes_memory_ptr",
																											"typeString": "bytes memory"
																										}
																									],
																									"id": 2269,
																									"isConstant": false,
																									"isLValue": false,
																									"isPure": true,
																									"lValueRequested": false,
																									"nodeType": "ElementaryTypeNameExpression",
																									"src": "11767:6:10",
																									"typeDescriptions": {
																										"typeIdentifier": "t_type$_t_string_storage_ptr_$",
																										"typeString": "type(string storage pointer)"
																									},
																									"typeName": {
																										"id": 2268,
																										"name": "string",
																										"nodeType": "ElementaryTypeName",
																										"src": "11767:6:10",
																										"typeDescriptions": {}
																									}
																								},
																								"id": 2271,
																								"isConstant": false,
																								"isLValue": false,
																								"isPure": false,
																								"kind": "typeConversion",
																								"lValueRequested": false,
																								"names": [],
																								"nodeType": "FunctionCall",
																								"src": "11767:13:10",
																								"tryCall": false,
																								"typeDescriptions": {
																									"typeIdentifier": "t_string_memory_ptr",
																									"typeString": "string memory"
																								}
																							}
																						],
																						"expression": {
																							"argumentTypes": [
																								{
																									"typeIdentifier": "t_string_memory_ptr",
																									"typeString": "string memory"
																								}
																							],
																							"id": 2267,
																							"name": "revert",
																							"nodeType": "Identifier",
																							"overloadedDeclarations": [
																								4294967277,
																								4294967277
																							],
																							"referencedDeclaration": 4294967277,
																							"src": "11760:6:10",
																							"typeDescriptions": {
																								"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
																								"typeString": "function (string memory) pure"
																							}
																						},
																						"id": 2272,
																						"isConstant": false,
																						"isLValue": false,
																						"isPure": false,
																						"kind": "functionCall",
																						"lValueRequested": false,
																						"names": [],
																						"nodeType": "FunctionCall",
																						"src": "11760:21:10",
																						"tryCall": false,
																						"typeDescriptions": {
																							"typeIdentifier": "t_tuple$__$",
																							"typeString": "tuple()"
																						}
																					},
																					"id": 2273,
																					"nodeType": "ExpressionStatement",
																					"src": "11760:21:10"
																				}
																			]
																		}
																	}
																]
															}
														}
													]
												},
												"id": 2284,
												"nodeType": "IfStatement",
												"src": "10929:990:10",
												"trueBody": {
													"id": 2230,
													"nodeType": "Block",
													"src": "10954:165:10",
													"statements": [
														{
															"expression": {
																"arguments": [
																	{
																		"commonType": {
																			"typeIdentifier": "t_uint256",
																			"typeString": "uint256"
																		},
																		"id": 2226,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": false,
																		"lValueRequested": false,
																		"leftExpression": {
																			"expression": {
																				"id": 2223,
																				"name": "_calldata",
																				"nodeType": "Identifier",
																				"overloadedDeclarations": [],
																				"referencedDeclaration": 2213,
																				"src": "10993:9:10",
																				"typeDescriptions": {
																					"typeIdentifier": "t_bytes_memory_ptr",
																					"typeString": "bytes memory"
																				}
																			},
																			"id": 2224,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": false,
																			"lValueRequested": false,
																			"memberName": "length",
																			"nodeType": "MemberAccess",
																			"src": "10993:16:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_uint256",
																				"typeString": "uint256"
																			}
																		},
																		"nodeType": "BinaryOperation",
																		"operator": "==",
																		"rightExpression": {
																			"hexValue": "30",
																			"id": 2225,
																			"isConstant": false,
																			"isLValue": false,
																			"isPure": true,
																			"kind": "number",
																			"lValueRequested": false,
																			"nodeType": "Literal",
																			"src": "11013:1:10",
																			"typeDescriptions": {
																				"typeIdentifier": "t_rational_0_by_1",
																				"typeString": "int_const 0"
																			},
																			"value": "0"
																		},
																		"src": "10993:21:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		}
																	},
																	{
																		"hexValue": "4c69624469616d6f6e644375743a205f696e69742069732061646472657373283029206275745f63616c6c64617461206973206e6f7420656d707479",
																		"id": 2227,
																		"isConstant": false,
																		"isLValue": false,
																		"isPure": true,
																		"kind": "string",
																		"lValueRequested": false,
																		"nodeType": "Literal",
																		"src": "11032:62:10",
																		"typeDescriptions": {
																			"typeIdentifier": "t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8",
																			"typeString": "literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""
																		},
																		"value": "LibDiamondCut: _init is address(0) but_calldata is not empty"
																	}
																],
																"expression": {
																	"argumentTypes": [
																		{
																			"typeIdentifier": "t_bool",
																			"typeString": "bool"
																		},
																		{
																			"typeIdentifier": "t_stringliteral_046c761a688d1dc3c500562bc5aaa3544f01f394f9bb3b69aa2a950a45afb1f8",
																			"typeString": "literal_string \"LibDiamondCut: _init is address(0) but_calldata is not empty\""
																		}
																	],
																	"id": 2222,
																	"name": "require",
																	"nodeType": "Identifier",
																	"overloadedDeclarations": [
																		4294967278,
																		4294967278
																	],
																	"referencedDeclaration": 4294967278,
																	"src": "10968:7:10",
																	"typeDescriptions": {
																		"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
																		"typeString": "function (bool,string memory) pure"
																	}
																},
																"id": 2228,
																"isConstant": false,
																"isLValue": false,
																"isPure": false,
																"kind": "functionCall",
																"lValueRequested": false,
																"names": [],
																"nodeType": "FunctionCall",
																"src": "10968:140:10",
																"tryCall": false,
																"typeDescriptions": {
																	"typeIdentifier": "t_tuple$__$",
																	"typeString": "tuple()"
																}
															},
															"id": 2229,
															"nodeType": "ExpressionStatement",
															"src": "10968:140:10"
														}
													]
												}
											}
										]
									},
									"id": 2286,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "initializeDiamondCut",
									"nameLocation": "10838:20:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2214,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2211,
												"mutability": "mutable",
												"name": "_init",
												"nameLocation": "10867:5:10",
												"nodeType": "VariableDeclaration",
												"scope": 2286,
												"src": "10859:13:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2210,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "10859:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2213,
												"mutability": "mutable",
												"name": "_calldata",
												"nameLocation": "10887:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 2286,
												"src": "10874:22:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_bytes_memory_ptr",
													"typeString": "bytes"
												},
												"typeName": {
													"id": 2212,
													"name": "bytes",
													"nodeType": "ElementaryTypeName",
													"src": "10874:5:10",
													"typeDescriptions": {
														"typeIdentifier": "t_bytes_storage_ptr",
														"typeString": "bytes"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "10858:39:10"
									},
									"returnParameters": {
										"id": 2215,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "10919:0:10"
									},
									"scope": 2306,
									"src": "10829:1096:10",
									"stateMutability": "nonpayable",
									"virtual": false,
									"visibility": "internal"
								},
								{
									"body": {
										"id": 2304,
										"nodeType": "Block",
										"src": "12047:223:10",
										"statements": [
											{
												"assignments": [
													2294
												],
												"declarations": [
													{
														"constant": false,
														"id": 2294,
														"mutability": "mutable",
														"name": "contractSize",
														"nameLocation": "12065:12:10",
														"nodeType": "VariableDeclaration",
														"scope": 2304,
														"src": "12057:20:10",
														"stateVariable": false,
														"storageLocation": "default",
														"typeDescriptions": {
															"typeIdentifier": "t_uint256",
															"typeString": "uint256"
														},
														"typeName": {
															"id": 2293,
															"name": "uint256",
															"nodeType": "ElementaryTypeName",
															"src": "12057:7:10",
															"typeDescriptions": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															}
														},
														"visibility": "internal"
													}
												],
												"id": 2295,
												"nodeType": "VariableDeclarationStatement",
												"src": "12057:20:10"
											},
											{
												"AST": {
													"nodeType": "YulBlock",
													"src": "12152:62:10",
													"statements": [
														{
															"nodeType": "YulAssignment",
															"src": "12166:38:10",
															"value": {
																"arguments": [
																	{
																		"name": "_contract",
																		"nodeType": "YulIdentifier",
																		"src": "12194:9:10"
																	}
																],
																"functionName": {
																	"name": "extcodesize",
																	"nodeType": "YulIdentifier",
																	"src": "12182:11:10"
																},
																"nodeType": "YulFunctionCall",
																"src": "12182:22:10"
															},
															"variableNames": [
																{
																	"name": "contractSize",
																	"nodeType": "YulIdentifier",
																	"src": "12166:12:10"
																}
															]
														}
													]
												},
												"evmVersion": "istanbul",
												"externalReferences": [
													{
														"declaration": 2288,
														"isOffset": false,
														"isSlot": false,
														"src": "12194:9:10",
														"valueSize": 1
													},
													{
														"declaration": 2294,
														"isOffset": false,
														"isSlot": false,
														"src": "12166:12:10",
														"valueSize": 1
													}
												],
												"id": 2296,
												"nodeType": "InlineAssembly",
												"src": "12143:71:10"
											},
											{
												"expression": {
													"arguments": [
														{
															"commonType": {
																"typeIdentifier": "t_uint256",
																"typeString": "uint256"
															},
															"id": 2300,
															"isConstant": false,
															"isLValue": false,
															"isPure": false,
															"lValueRequested": false,
															"leftExpression": {
																"id": 2298,
																"name": "contractSize",
																"nodeType": "Identifier",
																"overloadedDeclarations": [],
																"referencedDeclaration": 2294,
																"src": "12231:12:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_uint256",
																	"typeString": "uint256"
																}
															},
															"nodeType": "BinaryOperation",
															"operator": ">",
															"rightExpression": {
																"hexValue": "30",
																"id": 2299,
																"isConstant": false,
																"isLValue": false,
																"isPure": true,
																"kind": "number",
																"lValueRequested": false,
																"nodeType": "Literal",
																"src": "12246:1:10",
																"typeDescriptions": {
																	"typeIdentifier": "t_rational_0_by_1",
																	"typeString": "int_const 0"
																},
																"value": "0"
															},
															"src": "12231:16:10",
															"typeDescriptions": {
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															}
														},
														{
															"id": 2301,
															"name": "_errorMessage",
															"nodeType": "Identifier",
															"overloadedDeclarations": [],
															"referencedDeclaration": 2290,
															"src": "12249:13:10",
															"typeDescriptions": {
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														}
													],
													"expression": {
														"argumentTypes": [
															{
																"typeIdentifier": "t_bool",
																"typeString": "bool"
															},
															{
																"typeIdentifier": "t_string_memory_ptr",
																"typeString": "string memory"
															}
														],
														"id": 2297,
														"name": "require",
														"nodeType": "Identifier",
														"overloadedDeclarations": [
															4294967278,
															4294967278
														],
														"referencedDeclaration": 4294967278,
														"src": "12223:7:10",
														"typeDescriptions": {
															"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
															"typeString": "function (bool,string memory) pure"
														}
													},
													"id": 2302,
													"isConstant": false,
													"isLValue": false,
													"isPure": false,
													"kind": "functionCall",
													"lValueRequested": false,
													"names": [],
													"nodeType": "FunctionCall",
													"src": "12223:40:10",
													"tryCall": false,
													"typeDescriptions": {
														"typeIdentifier": "t_tuple$__$",
														"typeString": "tuple()"
													}
												},
												"id": 2303,
												"nodeType": "ExpressionStatement",
												"src": "12223:40:10"
											}
										]
									},
									"id": 2305,
									"implemented": true,
									"kind": "function",
									"modifiers": [],
									"name": "enforceHasContractCode",
									"nameLocation": "11940:22:10",
									"nodeType": "FunctionDefinition",
									"parameters": {
										"id": 2291,
										"nodeType": "ParameterList",
										"parameters": [
											{
												"constant": false,
												"id": 2288,
												"mutability": "mutable",
												"name": "_contract",
												"nameLocation": "11980:9:10",
												"nodeType": "VariableDeclaration",
												"scope": 2305,
												"src": "11972:17:10",
												"stateVariable": false,
												"storageLocation": "default",
												"typeDescriptions": {
													"typeIdentifier": "t_address",
													"typeString": "address"
												},
												"typeName": {
													"id": 2287,
													"name": "address",
													"nodeType": "ElementaryTypeName",
													"src": "11972:7:10",
													"stateMutability": "nonpayable",
													"typeDescriptions": {
														"typeIdentifier": "t_address",
														"typeString": "address"
													}
												},
												"visibility": "internal"
											},
											{
												"constant": false,
												"id": 2290,
												"mutability": "mutable",
												"name": "_errorMessage",
												"nameLocation": "12013:13:10",
												"nodeType": "VariableDeclaration",
												"scope": 2305,
												"src": "11999:27:10",
												"stateVariable": false,
												"storageLocation": "memory",
												"typeDescriptions": {
													"typeIdentifier": "t_string_memory_ptr",
													"typeString": "string"
												},
												"typeName": {
													"id": 2289,
													"name": "string",
													"nodeType": "ElementaryTypeName",
													"src": "11999:6:10",
													"typeDescriptions": {
														"typeIdentifier": "t_string_storage_ptr",
														"typeString": "string"
													}
												},
												"visibility": "internal"
											}
										],
										"src": "11962:70:10"
									},
									"returnParameters": {
										"id": 2292,
										"nodeType": "ParameterList",
										"parameters": [],
										"src": "12047:0:10"
									},
									"scope": 2306,
									"src": "11931:339:10",
									"stateMutability": "view",
									"virtual": false,
									"visibility": "internal"
								}
							],
							"scope": 2307,
							"src": "116:12156:10",
							"usedErrors": []
						}
					],
					"src": "32:12241:10"
				},
				"id": 10
			}
		}
	}
}