:Context: pass:normal[xref:GSN.adoc#Context[`Context`]] :xref-Context: xref:GSN.adoc#Context :Context-constructor: pass:normal[xref:GSN.adoc#Context-constructor--[`Context.constructor`]] :xref-Context-constructor: xref:GSN.adoc#Context-constructor-- :Context-_msgSender: pass:normal[xref:GSN.adoc#Context-_msgSender--[`Context._msgSender`]] :xref-Context-_msgSender: xref:GSN.adoc#Context-_msgSender-- :Context-_msgData: pass:normal[xref:GSN.adoc#Context-_msgData--[`Context._msgData`]] :xref-Context-_msgData: xref:GSN.adoc#Context-_msgData-- :GSNRecipient: pass:normal[xref:GSN.adoc#GSNRecipient[`GSNRecipient`]] :xref-GSNRecipient: xref:GSN.adoc#GSNRecipient :GSNRecipient-POST_RELAYED_CALL_MAX_GAS: pass:normal[xref:GSN.adoc#GSNRecipient-POST_RELAYED_CALL_MAX_GAS-uint256[`GSNRecipient.POST_RELAYED_CALL_MAX_GAS`]] :xref-GSNRecipient-POST_RELAYED_CALL_MAX_GAS: xref:GSN.adoc#GSNRecipient-POST_RELAYED_CALL_MAX_GAS-uint256 :GSNRecipient-getHubAddr: pass:normal[xref:GSN.adoc#GSNRecipient-getHubAddr--[`GSNRecipient.getHubAddr`]] :xref-GSNRecipient-getHubAddr: xref:GSN.adoc#GSNRecipient-getHubAddr-- :GSNRecipient-_upgradeRelayHub: pass:normal[xref:GSN.adoc#GSNRecipient-_upgradeRelayHub-address-[`GSNRecipient._upgradeRelayHub`]] :xref-GSNRecipient-_upgradeRelayHub: xref:GSN.adoc#GSNRecipient-_upgradeRelayHub-address- :GSNRecipient-relayHubVersion: pass:normal[xref:GSN.adoc#GSNRecipient-relayHubVersion--[`GSNRecipient.relayHubVersion`]] :xref-GSNRecipient-relayHubVersion: xref:GSN.adoc#GSNRecipient-relayHubVersion-- :GSNRecipient-_withdrawDeposits: pass:normal[xref:GSN.adoc#GSNRecipient-_withdrawDeposits-uint256-address-payable-[`GSNRecipient._withdrawDeposits`]] :xref-GSNRecipient-_withdrawDeposits: xref:GSN.adoc#GSNRecipient-_withdrawDeposits-uint256-address-payable- :GSNRecipient-_msgSender: pass:normal[xref:GSN.adoc#GSNRecipient-_msgSender--[`GSNRecipient._msgSender`]] :xref-GSNRecipient-_msgSender: xref:GSN.adoc#GSNRecipient-_msgSender-- :GSNRecipient-_msgData: pass:normal[xref:GSN.adoc#GSNRecipient-_msgData--[`GSNRecipient._msgData`]] :xref-GSNRecipient-_msgData: xref:GSN.adoc#GSNRecipient-_msgData-- :GSNRecipient-preRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-preRelayedCall-bytes-[`GSNRecipient.preRelayedCall`]] :xref-GSNRecipient-preRelayedCall: xref:GSN.adoc#GSNRecipient-preRelayedCall-bytes- :GSNRecipient-_preRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-_preRelayedCall-bytes-[`GSNRecipient._preRelayedCall`]] :xref-GSNRecipient-_preRelayedCall: xref:GSN.adoc#GSNRecipient-_preRelayedCall-bytes- :GSNRecipient-postRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-postRelayedCall-bytes-bool-uint256-bytes32-[`GSNRecipient.postRelayedCall`]] :xref-GSNRecipient-postRelayedCall: xref:GSN.adoc#GSNRecipient-postRelayedCall-bytes-bool-uint256-bytes32- :GSNRecipient-_postRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-_postRelayedCall-bytes-bool-uint256-bytes32-[`GSNRecipient._postRelayedCall`]] :xref-GSNRecipient-_postRelayedCall: xref:GSN.adoc#GSNRecipient-_postRelayedCall-bytes-bool-uint256-bytes32- :GSNRecipient-_approveRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-_approveRelayedCall--[`GSNRecipient._approveRelayedCall`]] :xref-GSNRecipient-_approveRelayedCall: xref:GSN.adoc#GSNRecipient-_approveRelayedCall-- :GSNRecipient-_approveRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-_approveRelayedCall-bytes-[`GSNRecipient._approveRelayedCall`]] :xref-GSNRecipient-_approveRelayedCall: xref:GSN.adoc#GSNRecipient-_approveRelayedCall-bytes- :GSNRecipient-_rejectRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipient-_rejectRelayedCall-uint256-[`GSNRecipient._rejectRelayedCall`]] :xref-GSNRecipient-_rejectRelayedCall: xref:GSN.adoc#GSNRecipient-_rejectRelayedCall-uint256- :GSNRecipient-_computeCharge: pass:normal[xref:GSN.adoc#GSNRecipient-_computeCharge-uint256-uint256-uint256-[`GSNRecipient._computeCharge`]] :xref-GSNRecipient-_computeCharge: xref:GSN.adoc#GSNRecipient-_computeCharge-uint256-uint256-uint256- :GSNRecipient-RelayHubChanged: pass:normal[xref:GSN.adoc#GSNRecipient-RelayHubChanged-address-address-[`GSNRecipient.RelayHubChanged`]] :xref-GSNRecipient-RelayHubChanged: xref:GSN.adoc#GSNRecipient-RelayHubChanged-address-address- :GSNRecipientERC20Fee: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee[`GSNRecipientERC20Fee`]] :xref-GSNRecipientERC20Fee: xref:GSN.adoc#GSNRecipientERC20Fee :GSNRecipientERC20Fee-constructor: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-constructor-string-string-[`GSNRecipientERC20Fee.constructor`]] :xref-GSNRecipientERC20Fee-constructor: xref:GSN.adoc#GSNRecipientERC20Fee-constructor-string-string- :GSNRecipientERC20Fee-token: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-token--[`GSNRecipientERC20Fee.token`]] :xref-GSNRecipientERC20Fee-token: xref:GSN.adoc#GSNRecipientERC20Fee-token-- :GSNRecipientERC20Fee-_mint: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-_mint-address-uint256-[`GSNRecipientERC20Fee._mint`]] :xref-GSNRecipientERC20Fee-_mint: xref:GSN.adoc#GSNRecipientERC20Fee-_mint-address-uint256- :GSNRecipientERC20Fee-acceptRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`GSNRecipientERC20Fee.acceptRelayedCall`]] :xref-GSNRecipientERC20Fee-acceptRelayedCall: xref:GSN.adoc#GSNRecipientERC20Fee-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256- :GSNRecipientERC20Fee-_preRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-_preRelayedCall-bytes-[`GSNRecipientERC20Fee._preRelayedCall`]] :xref-GSNRecipientERC20Fee-_preRelayedCall: xref:GSN.adoc#GSNRecipientERC20Fee-_preRelayedCall-bytes- :GSNRecipientERC20Fee-_postRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientERC20Fee-_postRelayedCall-bytes-bool-uint256-bytes32-[`GSNRecipientERC20Fee._postRelayedCall`]] :xref-GSNRecipientERC20Fee-_postRelayedCall: xref:GSN.adoc#GSNRecipientERC20Fee-_postRelayedCall-bytes-bool-uint256-bytes32- :__unstable__ERC20PrimaryAdmin: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin[`__unstable__ERC20PrimaryAdmin`]] :xref-__unstable__ERC20PrimaryAdmin: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin :__unstable__ERC20PrimaryAdmin-constructor: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-constructor-string-string-uint8-[`__unstable__ERC20PrimaryAdmin.constructor`]] :xref-__unstable__ERC20PrimaryAdmin-constructor: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-constructor-string-string-uint8- :__unstable__ERC20PrimaryAdmin-mint: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-mint-address-uint256-[`__unstable__ERC20PrimaryAdmin.mint`]] :xref-__unstable__ERC20PrimaryAdmin-mint: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-mint-address-uint256- :__unstable__ERC20PrimaryAdmin-allowance: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-allowance-address-address-[`__unstable__ERC20PrimaryAdmin.allowance`]] :xref-__unstable__ERC20PrimaryAdmin-allowance: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-allowance-address-address- :__unstable__ERC20PrimaryAdmin-_approve: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-_approve-address-address-uint256-[`__unstable__ERC20PrimaryAdmin._approve`]] :xref-__unstable__ERC20PrimaryAdmin-_approve: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-_approve-address-address-uint256- :__unstable__ERC20PrimaryAdmin-transferFrom: pass:normal[xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-transferFrom-address-address-uint256-[`__unstable__ERC20PrimaryAdmin.transferFrom`]] :xref-__unstable__ERC20PrimaryAdmin-transferFrom: xref:GSN.adoc#__unstable__ERC20PrimaryAdmin-transferFrom-address-address-uint256- :GSNRecipientSignature: pass:normal[xref:GSN.adoc#GSNRecipientSignature[`GSNRecipientSignature`]] :xref-GSNRecipientSignature: xref:GSN.adoc#GSNRecipientSignature :GSNRecipientSignature-constructor: pass:normal[xref:GSN.adoc#GSNRecipientSignature-constructor-address-[`GSNRecipientSignature.constructor`]] :xref-GSNRecipientSignature-constructor: xref:GSN.adoc#GSNRecipientSignature-constructor-address- :GSNRecipientSignature-acceptRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientSignature-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`GSNRecipientSignature.acceptRelayedCall`]] :xref-GSNRecipientSignature-acceptRelayedCall: xref:GSN.adoc#GSNRecipientSignature-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256- :GSNRecipientSignature-_preRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientSignature-_preRelayedCall-bytes-[`GSNRecipientSignature._preRelayedCall`]] :xref-GSNRecipientSignature-_preRelayedCall: xref:GSN.adoc#GSNRecipientSignature-_preRelayedCall-bytes- :GSNRecipientSignature-_postRelayedCall: pass:normal[xref:GSN.adoc#GSNRecipientSignature-_postRelayedCall-bytes-bool-uint256-bytes32-[`GSNRecipientSignature._postRelayedCall`]] :xref-GSNRecipientSignature-_postRelayedCall: xref:GSN.adoc#GSNRecipientSignature-_postRelayedCall-bytes-bool-uint256-bytes32- :IRelayHub: pass:normal[xref:GSN.adoc#IRelayHub[`IRelayHub`]] :xref-IRelayHub: xref:GSN.adoc#IRelayHub :IRelayHub-stake: pass:normal[xref:GSN.adoc#IRelayHub-stake-address-uint256-[`IRelayHub.stake`]] :xref-IRelayHub-stake: xref:GSN.adoc#IRelayHub-stake-address-uint256- :IRelayHub-registerRelay: pass:normal[xref:GSN.adoc#IRelayHub-registerRelay-uint256-string-[`IRelayHub.registerRelay`]] :xref-IRelayHub-registerRelay: xref:GSN.adoc#IRelayHub-registerRelay-uint256-string- :IRelayHub-removeRelayByOwner: pass:normal[xref:GSN.adoc#IRelayHub-removeRelayByOwner-address-[`IRelayHub.removeRelayByOwner`]] :xref-IRelayHub-removeRelayByOwner: xref:GSN.adoc#IRelayHub-removeRelayByOwner-address- :IRelayHub-unstake: pass:normal[xref:GSN.adoc#IRelayHub-unstake-address-[`IRelayHub.unstake`]] :xref-IRelayHub-unstake: xref:GSN.adoc#IRelayHub-unstake-address- :IRelayHub-getRelay: pass:normal[xref:GSN.adoc#IRelayHub-getRelay-address-[`IRelayHub.getRelay`]] :xref-IRelayHub-getRelay: xref:GSN.adoc#IRelayHub-getRelay-address- :IRelayHub-depositFor: pass:normal[xref:GSN.adoc#IRelayHub-depositFor-address-[`IRelayHub.depositFor`]] :xref-IRelayHub-depositFor: xref:GSN.adoc#IRelayHub-depositFor-address- :IRelayHub-balanceOf: pass:normal[xref:GSN.adoc#IRelayHub-balanceOf-address-[`IRelayHub.balanceOf`]] :xref-IRelayHub-balanceOf: xref:GSN.adoc#IRelayHub-balanceOf-address- :IRelayHub-withdraw: pass:normal[xref:GSN.adoc#IRelayHub-withdraw-uint256-address-payable-[`IRelayHub.withdraw`]] :xref-IRelayHub-withdraw: xref:GSN.adoc#IRelayHub-withdraw-uint256-address-payable- :IRelayHub-canRelay: pass:normal[xref:GSN.adoc#IRelayHub-canRelay-address-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-[`IRelayHub.canRelay`]] :xref-IRelayHub-canRelay: xref:GSN.adoc#IRelayHub-canRelay-address-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes- :IRelayHub-relayCall: pass:normal[xref:GSN.adoc#IRelayHub-relayCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-[`IRelayHub.relayCall`]] :xref-IRelayHub-relayCall: xref:GSN.adoc#IRelayHub-relayCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes- :IRelayHub-requiredGas: pass:normal[xref:GSN.adoc#IRelayHub-requiredGas-uint256-[`IRelayHub.requiredGas`]] :xref-IRelayHub-requiredGas: xref:GSN.adoc#IRelayHub-requiredGas-uint256- :IRelayHub-maxPossibleCharge: pass:normal[xref:GSN.adoc#IRelayHub-maxPossibleCharge-uint256-uint256-uint256-[`IRelayHub.maxPossibleCharge`]] :xref-IRelayHub-maxPossibleCharge: xref:GSN.adoc#IRelayHub-maxPossibleCharge-uint256-uint256-uint256- :IRelayHub-penalizeRepeatedNonce: pass:normal[xref:GSN.adoc#IRelayHub-penalizeRepeatedNonce-bytes-bytes-bytes-bytes-[`IRelayHub.penalizeRepeatedNonce`]] :xref-IRelayHub-penalizeRepeatedNonce: xref:GSN.adoc#IRelayHub-penalizeRepeatedNonce-bytes-bytes-bytes-bytes- :IRelayHub-penalizeIllegalTransaction: pass:normal[xref:GSN.adoc#IRelayHub-penalizeIllegalTransaction-bytes-bytes-[`IRelayHub.penalizeIllegalTransaction`]] :xref-IRelayHub-penalizeIllegalTransaction: xref:GSN.adoc#IRelayHub-penalizeIllegalTransaction-bytes-bytes- :IRelayHub-getNonce: pass:normal[xref:GSN.adoc#IRelayHub-getNonce-address-[`IRelayHub.getNonce`]] :xref-IRelayHub-getNonce: xref:GSN.adoc#IRelayHub-getNonce-address- :IRelayHub-Staked: pass:normal[xref:GSN.adoc#IRelayHub-Staked-address-uint256-uint256-[`IRelayHub.Staked`]] :xref-IRelayHub-Staked: xref:GSN.adoc#IRelayHub-Staked-address-uint256-uint256- :IRelayHub-RelayAdded: pass:normal[xref:GSN.adoc#IRelayHub-RelayAdded-address-address-uint256-uint256-uint256-string-[`IRelayHub.RelayAdded`]] :xref-IRelayHub-RelayAdded: xref:GSN.adoc#IRelayHub-RelayAdded-address-address-uint256-uint256-uint256-string- :IRelayHub-RelayRemoved: pass:normal[xref:GSN.adoc#IRelayHub-RelayRemoved-address-uint256-[`IRelayHub.RelayRemoved`]] :xref-IRelayHub-RelayRemoved: xref:GSN.adoc#IRelayHub-RelayRemoved-address-uint256- :IRelayHub-Unstaked: pass:normal[xref:GSN.adoc#IRelayHub-Unstaked-address-uint256-[`IRelayHub.Unstaked`]] :xref-IRelayHub-Unstaked: xref:GSN.adoc#IRelayHub-Unstaked-address-uint256- :IRelayHub-Deposited: pass:normal[xref:GSN.adoc#IRelayHub-Deposited-address-address-uint256-[`IRelayHub.Deposited`]] :xref-IRelayHub-Deposited: xref:GSN.adoc#IRelayHub-Deposited-address-address-uint256- :IRelayHub-Withdrawn: pass:normal[xref:GSN.adoc#IRelayHub-Withdrawn-address-address-uint256-[`IRelayHub.Withdrawn`]] :xref-IRelayHub-Withdrawn: xref:GSN.adoc#IRelayHub-Withdrawn-address-address-uint256- :IRelayHub-CanRelayFailed: pass:normal[xref:GSN.adoc#IRelayHub-CanRelayFailed-address-address-address-bytes4-uint256-[`IRelayHub.CanRelayFailed`]] :xref-IRelayHub-CanRelayFailed: xref:GSN.adoc#IRelayHub-CanRelayFailed-address-address-address-bytes4-uint256- :IRelayHub-TransactionRelayed: pass:normal[xref:GSN.adoc#IRelayHub-TransactionRelayed-address-address-address-bytes4-enum-IRelayHub-RelayCallStatus-uint256-[`IRelayHub.TransactionRelayed`]] :xref-IRelayHub-TransactionRelayed: xref:GSN.adoc#IRelayHub-TransactionRelayed-address-address-address-bytes4-enum-IRelayHub-RelayCallStatus-uint256- :IRelayHub-Penalized: pass:normal[xref:GSN.adoc#IRelayHub-Penalized-address-address-uint256-[`IRelayHub.Penalized`]] :xref-IRelayHub-Penalized: xref:GSN.adoc#IRelayHub-Penalized-address-address-uint256- :IRelayRecipient: pass:normal[xref:GSN.adoc#IRelayRecipient[`IRelayRecipient`]] :xref-IRelayRecipient: xref:GSN.adoc#IRelayRecipient :IRelayRecipient-getHubAddr: pass:normal[xref:GSN.adoc#IRelayRecipient-getHubAddr--[`IRelayRecipient.getHubAddr`]] :xref-IRelayRecipient-getHubAddr: xref:GSN.adoc#IRelayRecipient-getHubAddr-- :IRelayRecipient-acceptRelayedCall: pass:normal[xref:GSN.adoc#IRelayRecipient-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`IRelayRecipient.acceptRelayedCall`]] :xref-IRelayRecipient-acceptRelayedCall: xref:GSN.adoc#IRelayRecipient-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256- :IRelayRecipient-preRelayedCall: pass:normal[xref:GSN.adoc#IRelayRecipient-preRelayedCall-bytes-[`IRelayRecipient.preRelayedCall`]] :xref-IRelayRecipient-preRelayedCall: xref:GSN.adoc#IRelayRecipient-preRelayedCall-bytes- :IRelayRecipient-postRelayedCall: pass:normal[xref:GSN.adoc#IRelayRecipient-postRelayedCall-bytes-bool-uint256-bytes32-[`IRelayRecipient.postRelayedCall`]] :xref-IRelayRecipient-postRelayedCall: xref:GSN.adoc#IRelayRecipient-postRelayedCall-bytes-bool-uint256-bytes32- :Crowdsale: pass:normal[xref:crowdsale.adoc#Crowdsale[`Crowdsale`]] :xref-Crowdsale: xref:crowdsale.adoc#Crowdsale :Crowdsale-constructor: pass:normal[xref:crowdsale.adoc#Crowdsale-constructor-uint256-address-payable-contract-IERC20-[`Crowdsale.constructor`]] :xref-Crowdsale-constructor: xref:crowdsale.adoc#Crowdsale-constructor-uint256-address-payable-contract-IERC20- :Crowdsale-fallback: pass:normal[xref:crowdsale.adoc#Crowdsale-fallback--[`Crowdsale.fallback`]] :xref-Crowdsale-fallback: xref:crowdsale.adoc#Crowdsale-fallback-- :Crowdsale-token: pass:normal[xref:crowdsale.adoc#Crowdsale-token--[`Crowdsale.token`]] :xref-Crowdsale-token: xref:crowdsale.adoc#Crowdsale-token-- :Crowdsale-wallet: pass:normal[xref:crowdsale.adoc#Crowdsale-wallet--[`Crowdsale.wallet`]] :xref-Crowdsale-wallet: xref:crowdsale.adoc#Crowdsale-wallet-- :Crowdsale-rate: pass:normal[xref:crowdsale.adoc#Crowdsale-rate--[`Crowdsale.rate`]] :xref-Crowdsale-rate: xref:crowdsale.adoc#Crowdsale-rate-- :Crowdsale-weiRaised: pass:normal[xref:crowdsale.adoc#Crowdsale-weiRaised--[`Crowdsale.weiRaised`]] :xref-Crowdsale-weiRaised: xref:crowdsale.adoc#Crowdsale-weiRaised-- :Crowdsale-buyTokens: pass:normal[xref:crowdsale.adoc#Crowdsale-buyTokens-address-[`Crowdsale.buyTokens`]] :xref-Crowdsale-buyTokens: xref:crowdsale.adoc#Crowdsale-buyTokens-address- :Crowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#Crowdsale-_preValidatePurchase-address-uint256-[`Crowdsale._preValidatePurchase`]] :xref-Crowdsale-_preValidatePurchase: xref:crowdsale.adoc#Crowdsale-_preValidatePurchase-address-uint256- :Crowdsale-_postValidatePurchase: pass:normal[xref:crowdsale.adoc#Crowdsale-_postValidatePurchase-address-uint256-[`Crowdsale._postValidatePurchase`]] :xref-Crowdsale-_postValidatePurchase: xref:crowdsale.adoc#Crowdsale-_postValidatePurchase-address-uint256- :Crowdsale-_deliverTokens: pass:normal[xref:crowdsale.adoc#Crowdsale-_deliverTokens-address-uint256-[`Crowdsale._deliverTokens`]] :xref-Crowdsale-_deliverTokens: xref:crowdsale.adoc#Crowdsale-_deliverTokens-address-uint256- :Crowdsale-_processPurchase: pass:normal[xref:crowdsale.adoc#Crowdsale-_processPurchase-address-uint256-[`Crowdsale._processPurchase`]] :xref-Crowdsale-_processPurchase: xref:crowdsale.adoc#Crowdsale-_processPurchase-address-uint256- :Crowdsale-_updatePurchasingState: pass:normal[xref:crowdsale.adoc#Crowdsale-_updatePurchasingState-address-uint256-[`Crowdsale._updatePurchasingState`]] :xref-Crowdsale-_updatePurchasingState: xref:crowdsale.adoc#Crowdsale-_updatePurchasingState-address-uint256- :Crowdsale-_getTokenAmount: pass:normal[xref:crowdsale.adoc#Crowdsale-_getTokenAmount-uint256-[`Crowdsale._getTokenAmount`]] :xref-Crowdsale-_getTokenAmount: xref:crowdsale.adoc#Crowdsale-_getTokenAmount-uint256- :Crowdsale-_forwardFunds: pass:normal[xref:crowdsale.adoc#Crowdsale-_forwardFunds--[`Crowdsale._forwardFunds`]] :xref-Crowdsale-_forwardFunds: xref:crowdsale.adoc#Crowdsale-_forwardFunds-- :Crowdsale-TokensPurchased: pass:normal[xref:crowdsale.adoc#Crowdsale-TokensPurchased-address-address-uint256-uint256-[`Crowdsale.TokensPurchased`]] :xref-Crowdsale-TokensPurchased: xref:crowdsale.adoc#Crowdsale-TokensPurchased-address-address-uint256-uint256- :FinalizableCrowdsale: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale[`FinalizableCrowdsale`]] :xref-FinalizableCrowdsale: xref:crowdsale.adoc#FinalizableCrowdsale :FinalizableCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale-constructor--[`FinalizableCrowdsale.constructor`]] :xref-FinalizableCrowdsale-constructor: xref:crowdsale.adoc#FinalizableCrowdsale-constructor-- :FinalizableCrowdsale-finalized: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale-finalized--[`FinalizableCrowdsale.finalized`]] :xref-FinalizableCrowdsale-finalized: xref:crowdsale.adoc#FinalizableCrowdsale-finalized-- :FinalizableCrowdsale-finalize: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale-finalize--[`FinalizableCrowdsale.finalize`]] :xref-FinalizableCrowdsale-finalize: xref:crowdsale.adoc#FinalizableCrowdsale-finalize-- :FinalizableCrowdsale-_finalization: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale-_finalization--[`FinalizableCrowdsale._finalization`]] :xref-FinalizableCrowdsale-_finalization: xref:crowdsale.adoc#FinalizableCrowdsale-_finalization-- :FinalizableCrowdsale-CrowdsaleFinalized: pass:normal[xref:crowdsale.adoc#FinalizableCrowdsale-CrowdsaleFinalized--[`FinalizableCrowdsale.CrowdsaleFinalized`]] :xref-FinalizableCrowdsale-CrowdsaleFinalized: xref:crowdsale.adoc#FinalizableCrowdsale-CrowdsaleFinalized-- :PostDeliveryCrowdsale: pass:normal[xref:crowdsale.adoc#PostDeliveryCrowdsale[`PostDeliveryCrowdsale`]] :xref-PostDeliveryCrowdsale: xref:crowdsale.adoc#PostDeliveryCrowdsale :PostDeliveryCrowdsale-withdrawTokens: pass:normal[xref:crowdsale.adoc#PostDeliveryCrowdsale-withdrawTokens-address-[`PostDeliveryCrowdsale.withdrawTokens`]] :xref-PostDeliveryCrowdsale-withdrawTokens: xref:crowdsale.adoc#PostDeliveryCrowdsale-withdrawTokens-address- :PostDeliveryCrowdsale-balanceOf: pass:normal[xref:crowdsale.adoc#PostDeliveryCrowdsale-balanceOf-address-[`PostDeliveryCrowdsale.balanceOf`]] :xref-PostDeliveryCrowdsale-balanceOf: xref:crowdsale.adoc#PostDeliveryCrowdsale-balanceOf-address- :PostDeliveryCrowdsale-_processPurchase: pass:normal[xref:crowdsale.adoc#PostDeliveryCrowdsale-_processPurchase-address-uint256-[`PostDeliveryCrowdsale._processPurchase`]] :xref-PostDeliveryCrowdsale-_processPurchase: xref:crowdsale.adoc#PostDeliveryCrowdsale-_processPurchase-address-uint256- :__unstable__TokenVault: pass:normal[xref:crowdsale.adoc#__unstable__TokenVault[`__unstable__TokenVault`]] :xref-__unstable__TokenVault: xref:crowdsale.adoc#__unstable__TokenVault :__unstable__TokenVault-transfer: pass:normal[xref:crowdsale.adoc#__unstable__TokenVault-transfer-contract-IERC20-address-uint256-[`__unstable__TokenVault.transfer`]] :xref-__unstable__TokenVault-transfer: xref:crowdsale.adoc#__unstable__TokenVault-transfer-contract-IERC20-address-uint256- :RefundableCrowdsale: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale[`RefundableCrowdsale`]] :xref-RefundableCrowdsale: xref:crowdsale.adoc#RefundableCrowdsale :RefundableCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-constructor-uint256-[`RefundableCrowdsale.constructor`]] :xref-RefundableCrowdsale-constructor: xref:crowdsale.adoc#RefundableCrowdsale-constructor-uint256- :RefundableCrowdsale-goal: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-goal--[`RefundableCrowdsale.goal`]] :xref-RefundableCrowdsale-goal: xref:crowdsale.adoc#RefundableCrowdsale-goal-- :RefundableCrowdsale-claimRefund: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-claimRefund-address-payable-[`RefundableCrowdsale.claimRefund`]] :xref-RefundableCrowdsale-claimRefund: xref:crowdsale.adoc#RefundableCrowdsale-claimRefund-address-payable- :RefundableCrowdsale-goalReached: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-goalReached--[`RefundableCrowdsale.goalReached`]] :xref-RefundableCrowdsale-goalReached: xref:crowdsale.adoc#RefundableCrowdsale-goalReached-- :RefundableCrowdsale-_finalization: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-_finalization--[`RefundableCrowdsale._finalization`]] :xref-RefundableCrowdsale-_finalization: xref:crowdsale.adoc#RefundableCrowdsale-_finalization-- :RefundableCrowdsale-_forwardFunds: pass:normal[xref:crowdsale.adoc#RefundableCrowdsale-_forwardFunds--[`RefundableCrowdsale._forwardFunds`]] :xref-RefundableCrowdsale-_forwardFunds: xref:crowdsale.adoc#RefundableCrowdsale-_forwardFunds-- :RefundablePostDeliveryCrowdsale: pass:normal[xref:crowdsale.adoc#RefundablePostDeliveryCrowdsale[`RefundablePostDeliveryCrowdsale`]] :xref-RefundablePostDeliveryCrowdsale: xref:crowdsale.adoc#RefundablePostDeliveryCrowdsale :RefundablePostDeliveryCrowdsale-withdrawTokens: pass:normal[xref:crowdsale.adoc#RefundablePostDeliveryCrowdsale-withdrawTokens-address-[`RefundablePostDeliveryCrowdsale.withdrawTokens`]] :xref-RefundablePostDeliveryCrowdsale-withdrawTokens: xref:crowdsale.adoc#RefundablePostDeliveryCrowdsale-withdrawTokens-address- :AllowanceCrowdsale: pass:normal[xref:crowdsale.adoc#AllowanceCrowdsale[`AllowanceCrowdsale`]] :xref-AllowanceCrowdsale: xref:crowdsale.adoc#AllowanceCrowdsale :AllowanceCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#AllowanceCrowdsale-constructor-address-[`AllowanceCrowdsale.constructor`]] :xref-AllowanceCrowdsale-constructor: xref:crowdsale.adoc#AllowanceCrowdsale-constructor-address- :AllowanceCrowdsale-tokenWallet: pass:normal[xref:crowdsale.adoc#AllowanceCrowdsale-tokenWallet--[`AllowanceCrowdsale.tokenWallet`]] :xref-AllowanceCrowdsale-tokenWallet: xref:crowdsale.adoc#AllowanceCrowdsale-tokenWallet-- :AllowanceCrowdsale-remainingTokens: pass:normal[xref:crowdsale.adoc#AllowanceCrowdsale-remainingTokens--[`AllowanceCrowdsale.remainingTokens`]] :xref-AllowanceCrowdsale-remainingTokens: xref:crowdsale.adoc#AllowanceCrowdsale-remainingTokens-- :AllowanceCrowdsale-_deliverTokens: pass:normal[xref:crowdsale.adoc#AllowanceCrowdsale-_deliverTokens-address-uint256-[`AllowanceCrowdsale._deliverTokens`]] :xref-AllowanceCrowdsale-_deliverTokens: xref:crowdsale.adoc#AllowanceCrowdsale-_deliverTokens-address-uint256- :MintedCrowdsale: pass:normal[xref:crowdsale.adoc#MintedCrowdsale[`MintedCrowdsale`]] :xref-MintedCrowdsale: xref:crowdsale.adoc#MintedCrowdsale :MintedCrowdsale-_deliverTokens: pass:normal[xref:crowdsale.adoc#MintedCrowdsale-_deliverTokens-address-uint256-[`MintedCrowdsale._deliverTokens`]] :xref-MintedCrowdsale-_deliverTokens: xref:crowdsale.adoc#MintedCrowdsale-_deliverTokens-address-uint256- :IncreasingPriceCrowdsale: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale[`IncreasingPriceCrowdsale`]] :xref-IncreasingPriceCrowdsale: xref:crowdsale.adoc#IncreasingPriceCrowdsale :IncreasingPriceCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-constructor-uint256-uint256-[`IncreasingPriceCrowdsale.constructor`]] :xref-IncreasingPriceCrowdsale-constructor: xref:crowdsale.adoc#IncreasingPriceCrowdsale-constructor-uint256-uint256- :IncreasingPriceCrowdsale-rate: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-rate--[`IncreasingPriceCrowdsale.rate`]] :xref-IncreasingPriceCrowdsale-rate: xref:crowdsale.adoc#IncreasingPriceCrowdsale-rate-- :IncreasingPriceCrowdsale-initialRate: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-initialRate--[`IncreasingPriceCrowdsale.initialRate`]] :xref-IncreasingPriceCrowdsale-initialRate: xref:crowdsale.adoc#IncreasingPriceCrowdsale-initialRate-- :IncreasingPriceCrowdsale-finalRate: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-finalRate--[`IncreasingPriceCrowdsale.finalRate`]] :xref-IncreasingPriceCrowdsale-finalRate: xref:crowdsale.adoc#IncreasingPriceCrowdsale-finalRate-- :IncreasingPriceCrowdsale-getCurrentRate: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-getCurrentRate--[`IncreasingPriceCrowdsale.getCurrentRate`]] :xref-IncreasingPriceCrowdsale-getCurrentRate: xref:crowdsale.adoc#IncreasingPriceCrowdsale-getCurrentRate-- :IncreasingPriceCrowdsale-_getTokenAmount: pass:normal[xref:crowdsale.adoc#IncreasingPriceCrowdsale-_getTokenAmount-uint256-[`IncreasingPriceCrowdsale._getTokenAmount`]] :xref-IncreasingPriceCrowdsale-_getTokenAmount: xref:crowdsale.adoc#IncreasingPriceCrowdsale-_getTokenAmount-uint256- :CappedCrowdsale: pass:normal[xref:crowdsale.adoc#CappedCrowdsale[`CappedCrowdsale`]] :xref-CappedCrowdsale: xref:crowdsale.adoc#CappedCrowdsale :CappedCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#CappedCrowdsale-constructor-uint256-[`CappedCrowdsale.constructor`]] :xref-CappedCrowdsale-constructor: xref:crowdsale.adoc#CappedCrowdsale-constructor-uint256- :CappedCrowdsale-cap: pass:normal[xref:crowdsale.adoc#CappedCrowdsale-cap--[`CappedCrowdsale.cap`]] :xref-CappedCrowdsale-cap: xref:crowdsale.adoc#CappedCrowdsale-cap-- :CappedCrowdsale-capReached: pass:normal[xref:crowdsale.adoc#CappedCrowdsale-capReached--[`CappedCrowdsale.capReached`]] :xref-CappedCrowdsale-capReached: xref:crowdsale.adoc#CappedCrowdsale-capReached-- :CappedCrowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#CappedCrowdsale-_preValidatePurchase-address-uint256-[`CappedCrowdsale._preValidatePurchase`]] :xref-CappedCrowdsale-_preValidatePurchase: xref:crowdsale.adoc#CappedCrowdsale-_preValidatePurchase-address-uint256- :IndividuallyCappedCrowdsale: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale[`IndividuallyCappedCrowdsale`]] :xref-IndividuallyCappedCrowdsale: xref:crowdsale.adoc#IndividuallyCappedCrowdsale :IndividuallyCappedCrowdsale-setCap: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale-setCap-address-uint256-[`IndividuallyCappedCrowdsale.setCap`]] :xref-IndividuallyCappedCrowdsale-setCap: xref:crowdsale.adoc#IndividuallyCappedCrowdsale-setCap-address-uint256- :IndividuallyCappedCrowdsale-getCap: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale-getCap-address-[`IndividuallyCappedCrowdsale.getCap`]] :xref-IndividuallyCappedCrowdsale-getCap: xref:crowdsale.adoc#IndividuallyCappedCrowdsale-getCap-address- :IndividuallyCappedCrowdsale-getContribution: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale-getContribution-address-[`IndividuallyCappedCrowdsale.getContribution`]] :xref-IndividuallyCappedCrowdsale-getContribution: xref:crowdsale.adoc#IndividuallyCappedCrowdsale-getContribution-address- :IndividuallyCappedCrowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale-_preValidatePurchase-address-uint256-[`IndividuallyCappedCrowdsale._preValidatePurchase`]] :xref-IndividuallyCappedCrowdsale-_preValidatePurchase: xref:crowdsale.adoc#IndividuallyCappedCrowdsale-_preValidatePurchase-address-uint256- :IndividuallyCappedCrowdsale-_updatePurchasingState: pass:normal[xref:crowdsale.adoc#IndividuallyCappedCrowdsale-_updatePurchasingState-address-uint256-[`IndividuallyCappedCrowdsale._updatePurchasingState`]] :xref-IndividuallyCappedCrowdsale-_updatePurchasingState: xref:crowdsale.adoc#IndividuallyCappedCrowdsale-_updatePurchasingState-address-uint256- :PausableCrowdsale: pass:normal[xref:crowdsale.adoc#PausableCrowdsale[`PausableCrowdsale`]] :xref-PausableCrowdsale: xref:crowdsale.adoc#PausableCrowdsale :PausableCrowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#PausableCrowdsale-_preValidatePurchase-address-uint256-[`PausableCrowdsale._preValidatePurchase`]] :xref-PausableCrowdsale-_preValidatePurchase: xref:crowdsale.adoc#PausableCrowdsale-_preValidatePurchase-address-uint256- :TimedCrowdsale: pass:normal[xref:crowdsale.adoc#TimedCrowdsale[`TimedCrowdsale`]] :xref-TimedCrowdsale: xref:crowdsale.adoc#TimedCrowdsale :TimedCrowdsale-onlyWhileOpen: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-onlyWhileOpen--[`TimedCrowdsale.onlyWhileOpen`]] :xref-TimedCrowdsale-onlyWhileOpen: xref:crowdsale.adoc#TimedCrowdsale-onlyWhileOpen-- :TimedCrowdsale-constructor: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-constructor-uint256-uint256-[`TimedCrowdsale.constructor`]] :xref-TimedCrowdsale-constructor: xref:crowdsale.adoc#TimedCrowdsale-constructor-uint256-uint256- :TimedCrowdsale-openingTime: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-openingTime--[`TimedCrowdsale.openingTime`]] :xref-TimedCrowdsale-openingTime: xref:crowdsale.adoc#TimedCrowdsale-openingTime-- :TimedCrowdsale-closingTime: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-closingTime--[`TimedCrowdsale.closingTime`]] :xref-TimedCrowdsale-closingTime: xref:crowdsale.adoc#TimedCrowdsale-closingTime-- :TimedCrowdsale-isOpen: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-isOpen--[`TimedCrowdsale.isOpen`]] :xref-TimedCrowdsale-isOpen: xref:crowdsale.adoc#TimedCrowdsale-isOpen-- :TimedCrowdsale-hasClosed: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-hasClosed--[`TimedCrowdsale.hasClosed`]] :xref-TimedCrowdsale-hasClosed: xref:crowdsale.adoc#TimedCrowdsale-hasClosed-- :TimedCrowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-_preValidatePurchase-address-uint256-[`TimedCrowdsale._preValidatePurchase`]] :xref-TimedCrowdsale-_preValidatePurchase: xref:crowdsale.adoc#TimedCrowdsale-_preValidatePurchase-address-uint256- :TimedCrowdsale-_extendTime: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-_extendTime-uint256-[`TimedCrowdsale._extendTime`]] :xref-TimedCrowdsale-_extendTime: xref:crowdsale.adoc#TimedCrowdsale-_extendTime-uint256- :TimedCrowdsale-TimedCrowdsaleExtended: pass:normal[xref:crowdsale.adoc#TimedCrowdsale-TimedCrowdsaleExtended-uint256-uint256-[`TimedCrowdsale.TimedCrowdsaleExtended`]] :xref-TimedCrowdsale-TimedCrowdsaleExtended: xref:crowdsale.adoc#TimedCrowdsale-TimedCrowdsaleExtended-uint256-uint256- :WhitelistCrowdsale: pass:normal[xref:crowdsale.adoc#WhitelistCrowdsale[`WhitelistCrowdsale`]] :xref-WhitelistCrowdsale: xref:crowdsale.adoc#WhitelistCrowdsale :WhitelistCrowdsale-_preValidatePurchase: pass:normal[xref:crowdsale.adoc#WhitelistCrowdsale-_preValidatePurchase-address-uint256-[`WhitelistCrowdsale._preValidatePurchase`]] :xref-WhitelistCrowdsale-_preValidatePurchase: xref:crowdsale.adoc#WhitelistCrowdsale-_preValidatePurchase-address-uint256- :Counters: pass:normal[xref:drafts.adoc#Counters[`Counters`]] :xref-Counters: xref:drafts.adoc#Counters :Counters-current: pass:normal[xref:drafts.adoc#Counters-current-struct-Counters-Counter-[`Counters.current`]] :xref-Counters-current: xref:drafts.adoc#Counters-current-struct-Counters-Counter- :Counters-increment: pass:normal[xref:drafts.adoc#Counters-increment-struct-Counters-Counter-[`Counters.increment`]] :xref-Counters-increment: xref:drafts.adoc#Counters-increment-struct-Counters-Counter- :Counters-decrement: pass:normal[xref:drafts.adoc#Counters-decrement-struct-Counters-Counter-[`Counters.decrement`]] :xref-Counters-decrement: xref:drafts.adoc#Counters-decrement-struct-Counters-Counter- :ERC20Metadata: pass:normal[xref:drafts.adoc#ERC20Metadata[`ERC20Metadata`]] :xref-ERC20Metadata: xref:drafts.adoc#ERC20Metadata :ERC20Metadata-constructor: pass:normal[xref:drafts.adoc#ERC20Metadata-constructor-string-[`ERC20Metadata.constructor`]] :xref-ERC20Metadata-constructor: xref:drafts.adoc#ERC20Metadata-constructor-string- :ERC20Metadata-tokenURI: pass:normal[xref:drafts.adoc#ERC20Metadata-tokenURI--[`ERC20Metadata.tokenURI`]] :xref-ERC20Metadata-tokenURI: xref:drafts.adoc#ERC20Metadata-tokenURI-- :ERC20Metadata-_setTokenURI: pass:normal[xref:drafts.adoc#ERC20Metadata-_setTokenURI-string-[`ERC20Metadata._setTokenURI`]] :xref-ERC20Metadata-_setTokenURI: xref:drafts.adoc#ERC20Metadata-_setTokenURI-string- :ERC20Migrator: pass:normal[xref:drafts.adoc#ERC20Migrator[`ERC20Migrator`]] :xref-ERC20Migrator: xref:drafts.adoc#ERC20Migrator :ERC20Migrator-constructor: pass:normal[xref:drafts.adoc#ERC20Migrator-constructor-contract-IERC20-[`ERC20Migrator.constructor`]] :xref-ERC20Migrator-constructor: xref:drafts.adoc#ERC20Migrator-constructor-contract-IERC20- :ERC20Migrator-legacyToken: pass:normal[xref:drafts.adoc#ERC20Migrator-legacyToken--[`ERC20Migrator.legacyToken`]] :xref-ERC20Migrator-legacyToken: xref:drafts.adoc#ERC20Migrator-legacyToken-- :ERC20Migrator-newToken: pass:normal[xref:drafts.adoc#ERC20Migrator-newToken--[`ERC20Migrator.newToken`]] :xref-ERC20Migrator-newToken: xref:drafts.adoc#ERC20Migrator-newToken-- :ERC20Migrator-beginMigration: pass:normal[xref:drafts.adoc#ERC20Migrator-beginMigration-contract-ERC20Mintable-[`ERC20Migrator.beginMigration`]] :xref-ERC20Migrator-beginMigration: xref:drafts.adoc#ERC20Migrator-beginMigration-contract-ERC20Mintable- :ERC20Migrator-migrate: pass:normal[xref:drafts.adoc#ERC20Migrator-migrate-address-uint256-[`ERC20Migrator.migrate`]] :xref-ERC20Migrator-migrate: xref:drafts.adoc#ERC20Migrator-migrate-address-uint256- :ERC20Migrator-migrateAll: pass:normal[xref:drafts.adoc#ERC20Migrator-migrateAll-address-[`ERC20Migrator.migrateAll`]] :xref-ERC20Migrator-migrateAll: xref:drafts.adoc#ERC20Migrator-migrateAll-address- :ERC20Snapshot: pass:normal[xref:drafts.adoc#ERC20Snapshot[`ERC20Snapshot`]] :xref-ERC20Snapshot: xref:drafts.adoc#ERC20Snapshot :ERC20Snapshot-snapshot: pass:normal[xref:drafts.adoc#ERC20Snapshot-snapshot--[`ERC20Snapshot.snapshot`]] :xref-ERC20Snapshot-snapshot: xref:drafts.adoc#ERC20Snapshot-snapshot-- :ERC20Snapshot-balanceOfAt: pass:normal[xref:drafts.adoc#ERC20Snapshot-balanceOfAt-address-uint256-[`ERC20Snapshot.balanceOfAt`]] :xref-ERC20Snapshot-balanceOfAt: xref:drafts.adoc#ERC20Snapshot-balanceOfAt-address-uint256- :ERC20Snapshot-totalSupplyAt: pass:normal[xref:drafts.adoc#ERC20Snapshot-totalSupplyAt-uint256-[`ERC20Snapshot.totalSupplyAt`]] :xref-ERC20Snapshot-totalSupplyAt: xref:drafts.adoc#ERC20Snapshot-totalSupplyAt-uint256- :ERC20Snapshot-_transfer: pass:normal[xref:drafts.adoc#ERC20Snapshot-_transfer-address-address-uint256-[`ERC20Snapshot._transfer`]] :xref-ERC20Snapshot-_transfer: xref:drafts.adoc#ERC20Snapshot-_transfer-address-address-uint256- :ERC20Snapshot-_mint: pass:normal[xref:drafts.adoc#ERC20Snapshot-_mint-address-uint256-[`ERC20Snapshot._mint`]] :xref-ERC20Snapshot-_mint: xref:drafts.adoc#ERC20Snapshot-_mint-address-uint256- :ERC20Snapshot-_burn: pass:normal[xref:drafts.adoc#ERC20Snapshot-_burn-address-uint256-[`ERC20Snapshot._burn`]] :xref-ERC20Snapshot-_burn: xref:drafts.adoc#ERC20Snapshot-_burn-address-uint256- :ERC20Snapshot-Snapshot: pass:normal[xref:drafts.adoc#ERC20Snapshot-Snapshot-uint256-[`ERC20Snapshot.Snapshot`]] :xref-ERC20Snapshot-Snapshot: xref:drafts.adoc#ERC20Snapshot-Snapshot-uint256- :SignedSafeMath: pass:normal[xref:drafts.adoc#SignedSafeMath[`SignedSafeMath`]] :xref-SignedSafeMath: xref:drafts.adoc#SignedSafeMath :SignedSafeMath-mul: pass:normal[xref:drafts.adoc#SignedSafeMath-mul-int256-int256-[`SignedSafeMath.mul`]] :xref-SignedSafeMath-mul: xref:drafts.adoc#SignedSafeMath-mul-int256-int256- :SignedSafeMath-div: pass:normal[xref:drafts.adoc#SignedSafeMath-div-int256-int256-[`SignedSafeMath.div`]] :xref-SignedSafeMath-div: xref:drafts.adoc#SignedSafeMath-div-int256-int256- :SignedSafeMath-sub: pass:normal[xref:drafts.adoc#SignedSafeMath-sub-int256-int256-[`SignedSafeMath.sub`]] :xref-SignedSafeMath-sub: xref:drafts.adoc#SignedSafeMath-sub-int256-int256- :SignedSafeMath-add: pass:normal[xref:drafts.adoc#SignedSafeMath-add-int256-int256-[`SignedSafeMath.add`]] :xref-SignedSafeMath-add: xref:drafts.adoc#SignedSafeMath-add-int256-int256- :Strings: pass:normal[xref:drafts.adoc#Strings[`Strings`]] :xref-Strings: xref:drafts.adoc#Strings :Strings-fromUint256: pass:normal[xref:drafts.adoc#Strings-fromUint256-uint256-[`Strings.fromUint256`]] :xref-Strings-fromUint256: xref:drafts.adoc#Strings-fromUint256-uint256- :TokenVesting: pass:normal[xref:drafts.adoc#TokenVesting[`TokenVesting`]] :xref-TokenVesting: xref:drafts.adoc#TokenVesting :TokenVesting-constructor: pass:normal[xref:drafts.adoc#TokenVesting-constructor-address-uint256-uint256-uint256-bool-[`TokenVesting.constructor`]] :xref-TokenVesting-constructor: xref:drafts.adoc#TokenVesting-constructor-address-uint256-uint256-uint256-bool- :TokenVesting-beneficiary: pass:normal[xref:drafts.adoc#TokenVesting-beneficiary--[`TokenVesting.beneficiary`]] :xref-TokenVesting-beneficiary: xref:drafts.adoc#TokenVesting-beneficiary-- :TokenVesting-cliff: pass:normal[xref:drafts.adoc#TokenVesting-cliff--[`TokenVesting.cliff`]] :xref-TokenVesting-cliff: xref:drafts.adoc#TokenVesting-cliff-- :TokenVesting-start: pass:normal[xref:drafts.adoc#TokenVesting-start--[`TokenVesting.start`]] :xref-TokenVesting-start: xref:drafts.adoc#TokenVesting-start-- :TokenVesting-duration: pass:normal[xref:drafts.adoc#TokenVesting-duration--[`TokenVesting.duration`]] :xref-TokenVesting-duration: xref:drafts.adoc#TokenVesting-duration-- :TokenVesting-revocable: pass:normal[xref:drafts.adoc#TokenVesting-revocable--[`TokenVesting.revocable`]] :xref-TokenVesting-revocable: xref:drafts.adoc#TokenVesting-revocable-- :TokenVesting-released: pass:normal[xref:drafts.adoc#TokenVesting-released-address-[`TokenVesting.released`]] :xref-TokenVesting-released: xref:drafts.adoc#TokenVesting-released-address- :TokenVesting-revoked: pass:normal[xref:drafts.adoc#TokenVesting-revoked-address-[`TokenVesting.revoked`]] :xref-TokenVesting-revoked: xref:drafts.adoc#TokenVesting-revoked-address- :TokenVesting-release: pass:normal[xref:drafts.adoc#TokenVesting-release-contract-IERC20-[`TokenVesting.release`]] :xref-TokenVesting-release: xref:drafts.adoc#TokenVesting-release-contract-IERC20- :TokenVesting-revoke: pass:normal[xref:drafts.adoc#TokenVesting-revoke-contract-IERC20-[`TokenVesting.revoke`]] :xref-TokenVesting-revoke: xref:drafts.adoc#TokenVesting-revoke-contract-IERC20- :TokenVesting-TokensReleased: pass:normal[xref:drafts.adoc#TokenVesting-TokensReleased-address-uint256-[`TokenVesting.TokensReleased`]] :xref-TokenVesting-TokensReleased: xref:drafts.adoc#TokenVesting-TokensReleased-address-uint256- :TokenVesting-TokenVestingRevoked: pass:normal[xref:drafts.adoc#TokenVesting-TokenVestingRevoked-address-[`TokenVesting.TokenVestingRevoked`]] :xref-TokenVesting-TokenVestingRevoked: xref:drafts.adoc#TokenVesting-TokenVestingRevoked-address- :Roles: pass:normal[xref:access.adoc#Roles[`Roles`]] :xref-Roles: xref:access.adoc#Roles :Roles-add: pass:normal[xref:access.adoc#Roles-add-struct-Roles-Role-address-[`Roles.add`]] :xref-Roles-add: xref:access.adoc#Roles-add-struct-Roles-Role-address- :Roles-remove: pass:normal[xref:access.adoc#Roles-remove-struct-Roles-Role-address-[`Roles.remove`]] :xref-Roles-remove: xref:access.adoc#Roles-remove-struct-Roles-Role-address- :Roles-has: pass:normal[xref:access.adoc#Roles-has-struct-Roles-Role-address-[`Roles.has`]] :xref-Roles-has: xref:access.adoc#Roles-has-struct-Roles-Role-address- :CapperRole: pass:normal[xref:access.adoc#CapperRole[`CapperRole`]] :xref-CapperRole: xref:access.adoc#CapperRole :CapperRole-onlyCapper: pass:normal[xref:access.adoc#CapperRole-onlyCapper--[`CapperRole.onlyCapper`]] :xref-CapperRole-onlyCapper: xref:access.adoc#CapperRole-onlyCapper-- :CapperRole-constructor: pass:normal[xref:access.adoc#CapperRole-constructor--[`CapperRole.constructor`]] :xref-CapperRole-constructor: xref:access.adoc#CapperRole-constructor-- :CapperRole-isCapper: pass:normal[xref:access.adoc#CapperRole-isCapper-address-[`CapperRole.isCapper`]] :xref-CapperRole-isCapper: xref:access.adoc#CapperRole-isCapper-address- :CapperRole-addCapper: pass:normal[xref:access.adoc#CapperRole-addCapper-address-[`CapperRole.addCapper`]] :xref-CapperRole-addCapper: xref:access.adoc#CapperRole-addCapper-address- :CapperRole-renounceCapper: pass:normal[xref:access.adoc#CapperRole-renounceCapper--[`CapperRole.renounceCapper`]] :xref-CapperRole-renounceCapper: xref:access.adoc#CapperRole-renounceCapper-- :CapperRole-_addCapper: pass:normal[xref:access.adoc#CapperRole-_addCapper-address-[`CapperRole._addCapper`]] :xref-CapperRole-_addCapper: xref:access.adoc#CapperRole-_addCapper-address- :CapperRole-_removeCapper: pass:normal[xref:access.adoc#CapperRole-_removeCapper-address-[`CapperRole._removeCapper`]] :xref-CapperRole-_removeCapper: xref:access.adoc#CapperRole-_removeCapper-address- :CapperRole-CapperAdded: pass:normal[xref:access.adoc#CapperRole-CapperAdded-address-[`CapperRole.CapperAdded`]] :xref-CapperRole-CapperAdded: xref:access.adoc#CapperRole-CapperAdded-address- :CapperRole-CapperRemoved: pass:normal[xref:access.adoc#CapperRole-CapperRemoved-address-[`CapperRole.CapperRemoved`]] :xref-CapperRole-CapperRemoved: xref:access.adoc#CapperRole-CapperRemoved-address- :MinterRole: pass:normal[xref:access.adoc#MinterRole[`MinterRole`]] :xref-MinterRole: xref:access.adoc#MinterRole :MinterRole-onlyMinter: pass:normal[xref:access.adoc#MinterRole-onlyMinter--[`MinterRole.onlyMinter`]] :xref-MinterRole-onlyMinter: xref:access.adoc#MinterRole-onlyMinter-- :MinterRole-constructor: pass:normal[xref:access.adoc#MinterRole-constructor--[`MinterRole.constructor`]] :xref-MinterRole-constructor: xref:access.adoc#MinterRole-constructor-- :MinterRole-isMinter: pass:normal[xref:access.adoc#MinterRole-isMinter-address-[`MinterRole.isMinter`]] :xref-MinterRole-isMinter: xref:access.adoc#MinterRole-isMinter-address- :MinterRole-addMinter: pass:normal[xref:access.adoc#MinterRole-addMinter-address-[`MinterRole.addMinter`]] :xref-MinterRole-addMinter: xref:access.adoc#MinterRole-addMinter-address- :MinterRole-renounceMinter: pass:normal[xref:access.adoc#MinterRole-renounceMinter--[`MinterRole.renounceMinter`]] :xref-MinterRole-renounceMinter: xref:access.adoc#MinterRole-renounceMinter-- :MinterRole-_addMinter: pass:normal[xref:access.adoc#MinterRole-_addMinter-address-[`MinterRole._addMinter`]] :xref-MinterRole-_addMinter: xref:access.adoc#MinterRole-_addMinter-address- :MinterRole-_removeMinter: pass:normal[xref:access.adoc#MinterRole-_removeMinter-address-[`MinterRole._removeMinter`]] :xref-MinterRole-_removeMinter: xref:access.adoc#MinterRole-_removeMinter-address- :MinterRole-MinterAdded: pass:normal[xref:access.adoc#MinterRole-MinterAdded-address-[`MinterRole.MinterAdded`]] :xref-MinterRole-MinterAdded: xref:access.adoc#MinterRole-MinterAdded-address- :MinterRole-MinterRemoved: pass:normal[xref:access.adoc#MinterRole-MinterRemoved-address-[`MinterRole.MinterRemoved`]] :xref-MinterRole-MinterRemoved: xref:access.adoc#MinterRole-MinterRemoved-address- :PauserRole: pass:normal[xref:access.adoc#PauserRole[`PauserRole`]] :xref-PauserRole: xref:access.adoc#PauserRole :PauserRole-onlyPauser: pass:normal[xref:access.adoc#PauserRole-onlyPauser--[`PauserRole.onlyPauser`]] :xref-PauserRole-onlyPauser: xref:access.adoc#PauserRole-onlyPauser-- :PauserRole-constructor: pass:normal[xref:access.adoc#PauserRole-constructor--[`PauserRole.constructor`]] :xref-PauserRole-constructor: xref:access.adoc#PauserRole-constructor-- :PauserRole-isPauser: pass:normal[xref:access.adoc#PauserRole-isPauser-address-[`PauserRole.isPauser`]] :xref-PauserRole-isPauser: xref:access.adoc#PauserRole-isPauser-address- :PauserRole-addPauser: pass:normal[xref:access.adoc#PauserRole-addPauser-address-[`PauserRole.addPauser`]] :xref-PauserRole-addPauser: xref:access.adoc#PauserRole-addPauser-address- :PauserRole-renouncePauser: pass:normal[xref:access.adoc#PauserRole-renouncePauser--[`PauserRole.renouncePauser`]] :xref-PauserRole-renouncePauser: xref:access.adoc#PauserRole-renouncePauser-- :PauserRole-_addPauser: pass:normal[xref:access.adoc#PauserRole-_addPauser-address-[`PauserRole._addPauser`]] :xref-PauserRole-_addPauser: xref:access.adoc#PauserRole-_addPauser-address- :PauserRole-_removePauser: pass:normal[xref:access.adoc#PauserRole-_removePauser-address-[`PauserRole._removePauser`]] :xref-PauserRole-_removePauser: xref:access.adoc#PauserRole-_removePauser-address- :PauserRole-PauserAdded: pass:normal[xref:access.adoc#PauserRole-PauserAdded-address-[`PauserRole.PauserAdded`]] :xref-PauserRole-PauserAdded: xref:access.adoc#PauserRole-PauserAdded-address- :PauserRole-PauserRemoved: pass:normal[xref:access.adoc#PauserRole-PauserRemoved-address-[`PauserRole.PauserRemoved`]] :xref-PauserRole-PauserRemoved: xref:access.adoc#PauserRole-PauserRemoved-address- :SignerRole: pass:normal[xref:access.adoc#SignerRole[`SignerRole`]] :xref-SignerRole: xref:access.adoc#SignerRole :SignerRole-onlySigner: pass:normal[xref:access.adoc#SignerRole-onlySigner--[`SignerRole.onlySigner`]] :xref-SignerRole-onlySigner: xref:access.adoc#SignerRole-onlySigner-- :SignerRole-constructor: pass:normal[xref:access.adoc#SignerRole-constructor--[`SignerRole.constructor`]] :xref-SignerRole-constructor: xref:access.adoc#SignerRole-constructor-- :SignerRole-isSigner: pass:normal[xref:access.adoc#SignerRole-isSigner-address-[`SignerRole.isSigner`]] :xref-SignerRole-isSigner: xref:access.adoc#SignerRole-isSigner-address- :SignerRole-addSigner: pass:normal[xref:access.adoc#SignerRole-addSigner-address-[`SignerRole.addSigner`]] :xref-SignerRole-addSigner: xref:access.adoc#SignerRole-addSigner-address- :SignerRole-renounceSigner: pass:normal[xref:access.adoc#SignerRole-renounceSigner--[`SignerRole.renounceSigner`]] :xref-SignerRole-renounceSigner: xref:access.adoc#SignerRole-renounceSigner-- :SignerRole-_addSigner: pass:normal[xref:access.adoc#SignerRole-_addSigner-address-[`SignerRole._addSigner`]] :xref-SignerRole-_addSigner: xref:access.adoc#SignerRole-_addSigner-address- :SignerRole-_removeSigner: pass:normal[xref:access.adoc#SignerRole-_removeSigner-address-[`SignerRole._removeSigner`]] :xref-SignerRole-_removeSigner: xref:access.adoc#SignerRole-_removeSigner-address- :SignerRole-SignerAdded: pass:normal[xref:access.adoc#SignerRole-SignerAdded-address-[`SignerRole.SignerAdded`]] :xref-SignerRole-SignerAdded: xref:access.adoc#SignerRole-SignerAdded-address- :SignerRole-SignerRemoved: pass:normal[xref:access.adoc#SignerRole-SignerRemoved-address-[`SignerRole.SignerRemoved`]] :xref-SignerRole-SignerRemoved: xref:access.adoc#SignerRole-SignerRemoved-address- :WhitelistAdminRole: pass:normal[xref:access.adoc#WhitelistAdminRole[`WhitelistAdminRole`]] :xref-WhitelistAdminRole: xref:access.adoc#WhitelistAdminRole :WhitelistAdminRole-onlyWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-onlyWhitelistAdmin--[`WhitelistAdminRole.onlyWhitelistAdmin`]] :xref-WhitelistAdminRole-onlyWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-onlyWhitelistAdmin-- :WhitelistAdminRole-constructor: pass:normal[xref:access.adoc#WhitelistAdminRole-constructor--[`WhitelistAdminRole.constructor`]] :xref-WhitelistAdminRole-constructor: xref:access.adoc#WhitelistAdminRole-constructor-- :WhitelistAdminRole-isWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-isWhitelistAdmin-address-[`WhitelistAdminRole.isWhitelistAdmin`]] :xref-WhitelistAdminRole-isWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-isWhitelistAdmin-address- :WhitelistAdminRole-addWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-addWhitelistAdmin-address-[`WhitelistAdminRole.addWhitelistAdmin`]] :xref-WhitelistAdminRole-addWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-addWhitelistAdmin-address- :WhitelistAdminRole-renounceWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-renounceWhitelistAdmin--[`WhitelistAdminRole.renounceWhitelistAdmin`]] :xref-WhitelistAdminRole-renounceWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-renounceWhitelistAdmin-- :WhitelistAdminRole-_addWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-_addWhitelistAdmin-address-[`WhitelistAdminRole._addWhitelistAdmin`]] :xref-WhitelistAdminRole-_addWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-_addWhitelistAdmin-address- :WhitelistAdminRole-_removeWhitelistAdmin: pass:normal[xref:access.adoc#WhitelistAdminRole-_removeWhitelistAdmin-address-[`WhitelistAdminRole._removeWhitelistAdmin`]] :xref-WhitelistAdminRole-_removeWhitelistAdmin: xref:access.adoc#WhitelistAdminRole-_removeWhitelistAdmin-address- :WhitelistAdminRole-WhitelistAdminAdded: pass:normal[xref:access.adoc#WhitelistAdminRole-WhitelistAdminAdded-address-[`WhitelistAdminRole.WhitelistAdminAdded`]] :xref-WhitelistAdminRole-WhitelistAdminAdded: xref:access.adoc#WhitelistAdminRole-WhitelistAdminAdded-address- :WhitelistAdminRole-WhitelistAdminRemoved: pass:normal[xref:access.adoc#WhitelistAdminRole-WhitelistAdminRemoved-address-[`WhitelistAdminRole.WhitelistAdminRemoved`]] :xref-WhitelistAdminRole-WhitelistAdminRemoved: xref:access.adoc#WhitelistAdminRole-WhitelistAdminRemoved-address- :WhitelistedRole: pass:normal[xref:access.adoc#WhitelistedRole[`WhitelistedRole`]] :xref-WhitelistedRole: xref:access.adoc#WhitelistedRole :WhitelistedRole-onlyWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-onlyWhitelisted--[`WhitelistedRole.onlyWhitelisted`]] :xref-WhitelistedRole-onlyWhitelisted: xref:access.adoc#WhitelistedRole-onlyWhitelisted-- :WhitelistedRole-isWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-isWhitelisted-address-[`WhitelistedRole.isWhitelisted`]] :xref-WhitelistedRole-isWhitelisted: xref:access.adoc#WhitelistedRole-isWhitelisted-address- :WhitelistedRole-addWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-addWhitelisted-address-[`WhitelistedRole.addWhitelisted`]] :xref-WhitelistedRole-addWhitelisted: xref:access.adoc#WhitelistedRole-addWhitelisted-address- :WhitelistedRole-removeWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-removeWhitelisted-address-[`WhitelistedRole.removeWhitelisted`]] :xref-WhitelistedRole-removeWhitelisted: xref:access.adoc#WhitelistedRole-removeWhitelisted-address- :WhitelistedRole-renounceWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-renounceWhitelisted--[`WhitelistedRole.renounceWhitelisted`]] :xref-WhitelistedRole-renounceWhitelisted: xref:access.adoc#WhitelistedRole-renounceWhitelisted-- :WhitelistedRole-_addWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-_addWhitelisted-address-[`WhitelistedRole._addWhitelisted`]] :xref-WhitelistedRole-_addWhitelisted: xref:access.adoc#WhitelistedRole-_addWhitelisted-address- :WhitelistedRole-_removeWhitelisted: pass:normal[xref:access.adoc#WhitelistedRole-_removeWhitelisted-address-[`WhitelistedRole._removeWhitelisted`]] :xref-WhitelistedRole-_removeWhitelisted: xref:access.adoc#WhitelistedRole-_removeWhitelisted-address- :WhitelistedRole-WhitelistedAdded: pass:normal[xref:access.adoc#WhitelistedRole-WhitelistedAdded-address-[`WhitelistedRole.WhitelistedAdded`]] :xref-WhitelistedRole-WhitelistedAdded: xref:access.adoc#WhitelistedRole-WhitelistedAdded-address- :WhitelistedRole-WhitelistedRemoved: pass:normal[xref:access.adoc#WhitelistedRole-WhitelistedRemoved-address-[`WhitelistedRole.WhitelistedRemoved`]] :xref-WhitelistedRole-WhitelistedRemoved: xref:access.adoc#WhitelistedRole-WhitelistedRemoved-address- :ECDSA: pass:normal[xref:cryptography.adoc#ECDSA[`ECDSA`]] :xref-ECDSA: xref:cryptography.adoc#ECDSA :ECDSA-recover: pass:normal[xref:cryptography.adoc#ECDSA-recover-bytes32-bytes-[`ECDSA.recover`]] :xref-ECDSA-recover: xref:cryptography.adoc#ECDSA-recover-bytes32-bytes- :ECDSA-toEthSignedMessageHash: pass:normal[xref:cryptography.adoc#ECDSA-toEthSignedMessageHash-bytes32-[`ECDSA.toEthSignedMessageHash`]] :xref-ECDSA-toEthSignedMessageHash: xref:cryptography.adoc#ECDSA-toEthSignedMessageHash-bytes32- :MerkleProof: pass:normal[xref:cryptography.adoc#MerkleProof[`MerkleProof`]] :xref-MerkleProof: xref:cryptography.adoc#MerkleProof :MerkleProof-verify: pass:normal[xref:cryptography.adoc#MerkleProof-verify-bytes32---bytes32-bytes32-[`MerkleProof.verify`]] :xref-MerkleProof-verify: xref:cryptography.adoc#MerkleProof-verify-bytes32---bytes32-bytes32- :ERC165: pass:normal[xref:introspection.adoc#ERC165[`ERC165`]] :xref-ERC165: xref:introspection.adoc#ERC165 :ERC165-constructor: pass:normal[xref:introspection.adoc#ERC165-constructor--[`ERC165.constructor`]] :xref-ERC165-constructor: xref:introspection.adoc#ERC165-constructor-- :ERC165-supportsInterface: pass:normal[xref:introspection.adoc#ERC165-supportsInterface-bytes4-[`ERC165.supportsInterface`]] :xref-ERC165-supportsInterface: xref:introspection.adoc#ERC165-supportsInterface-bytes4- :ERC165-_registerInterface: pass:normal[xref:introspection.adoc#ERC165-_registerInterface-bytes4-[`ERC165._registerInterface`]] :xref-ERC165-_registerInterface: xref:introspection.adoc#ERC165-_registerInterface-bytes4- :ERC165Checker: pass:normal[xref:introspection.adoc#ERC165Checker[`ERC165Checker`]] :xref-ERC165Checker: xref:introspection.adoc#ERC165Checker :ERC165Checker-_supportsERC165: pass:normal[xref:introspection.adoc#ERC165Checker-_supportsERC165-address-[`ERC165Checker._supportsERC165`]] :xref-ERC165Checker-_supportsERC165: xref:introspection.adoc#ERC165Checker-_supportsERC165-address- :ERC165Checker-_supportsInterface: pass:normal[xref:introspection.adoc#ERC165Checker-_supportsInterface-address-bytes4-[`ERC165Checker._supportsInterface`]] :xref-ERC165Checker-_supportsInterface: xref:introspection.adoc#ERC165Checker-_supportsInterface-address-bytes4- :ERC165Checker-_supportsAllInterfaces: pass:normal[xref:introspection.adoc#ERC165Checker-_supportsAllInterfaces-address-bytes4---[`ERC165Checker._supportsAllInterfaces`]] :xref-ERC165Checker-_supportsAllInterfaces: xref:introspection.adoc#ERC165Checker-_supportsAllInterfaces-address-bytes4--- :ERC1820Implementer: pass:normal[xref:introspection.adoc#ERC1820Implementer[`ERC1820Implementer`]] :xref-ERC1820Implementer: xref:introspection.adoc#ERC1820Implementer :ERC1820Implementer-canImplementInterfaceForAddress: pass:normal[xref:introspection.adoc#ERC1820Implementer-canImplementInterfaceForAddress-bytes32-address-[`ERC1820Implementer.canImplementInterfaceForAddress`]] :xref-ERC1820Implementer-canImplementInterfaceForAddress: xref:introspection.adoc#ERC1820Implementer-canImplementInterfaceForAddress-bytes32-address- :ERC1820Implementer-_registerInterfaceForAddress: pass:normal[xref:introspection.adoc#ERC1820Implementer-_registerInterfaceForAddress-bytes32-address-[`ERC1820Implementer._registerInterfaceForAddress`]] :xref-ERC1820Implementer-_registerInterfaceForAddress: xref:introspection.adoc#ERC1820Implementer-_registerInterfaceForAddress-bytes32-address- :IERC165: pass:normal[xref:introspection.adoc#IERC165[`IERC165`]] :xref-IERC165: xref:introspection.adoc#IERC165 :IERC165-supportsInterface: pass:normal[xref:introspection.adoc#IERC165-supportsInterface-bytes4-[`IERC165.supportsInterface`]] :xref-IERC165-supportsInterface: xref:introspection.adoc#IERC165-supportsInterface-bytes4- :IERC1820Implementer: pass:normal[xref:introspection.adoc#IERC1820Implementer[`IERC1820Implementer`]] :xref-IERC1820Implementer: xref:introspection.adoc#IERC1820Implementer :IERC1820Implementer-canImplementInterfaceForAddress: pass:normal[xref:introspection.adoc#IERC1820Implementer-canImplementInterfaceForAddress-bytes32-address-[`IERC1820Implementer.canImplementInterfaceForAddress`]] :xref-IERC1820Implementer-canImplementInterfaceForAddress: xref:introspection.adoc#IERC1820Implementer-canImplementInterfaceForAddress-bytes32-address- :IERC1820Registry: pass:normal[xref:introspection.adoc#IERC1820Registry[`IERC1820Registry`]] :xref-IERC1820Registry: xref:introspection.adoc#IERC1820Registry :IERC1820Registry-setManager: pass:normal[xref:introspection.adoc#IERC1820Registry-setManager-address-address-[`IERC1820Registry.setManager`]] :xref-IERC1820Registry-setManager: xref:introspection.adoc#IERC1820Registry-setManager-address-address- :IERC1820Registry-getManager: pass:normal[xref:introspection.adoc#IERC1820Registry-getManager-address-[`IERC1820Registry.getManager`]] :xref-IERC1820Registry-getManager: xref:introspection.adoc#IERC1820Registry-getManager-address- :IERC1820Registry-setInterfaceImplementer: pass:normal[xref:introspection.adoc#IERC1820Registry-setInterfaceImplementer-address-bytes32-address-[`IERC1820Registry.setInterfaceImplementer`]] :xref-IERC1820Registry-setInterfaceImplementer: xref:introspection.adoc#IERC1820Registry-setInterfaceImplementer-address-bytes32-address- :IERC1820Registry-getInterfaceImplementer: pass:normal[xref:introspection.adoc#IERC1820Registry-getInterfaceImplementer-address-bytes32-[`IERC1820Registry.getInterfaceImplementer`]] :xref-IERC1820Registry-getInterfaceImplementer: xref:introspection.adoc#IERC1820Registry-getInterfaceImplementer-address-bytes32- :IERC1820Registry-interfaceHash: pass:normal[xref:introspection.adoc#IERC1820Registry-interfaceHash-string-[`IERC1820Registry.interfaceHash`]] :xref-IERC1820Registry-interfaceHash: xref:introspection.adoc#IERC1820Registry-interfaceHash-string- :IERC1820Registry-updateERC165Cache: pass:normal[xref:introspection.adoc#IERC1820Registry-updateERC165Cache-address-bytes4-[`IERC1820Registry.updateERC165Cache`]] :xref-IERC1820Registry-updateERC165Cache: xref:introspection.adoc#IERC1820Registry-updateERC165Cache-address-bytes4- :IERC1820Registry-implementsERC165Interface: pass:normal[xref:introspection.adoc#IERC1820Registry-implementsERC165Interface-address-bytes4-[`IERC1820Registry.implementsERC165Interface`]] :xref-IERC1820Registry-implementsERC165Interface: xref:introspection.adoc#IERC1820Registry-implementsERC165Interface-address-bytes4- :IERC1820Registry-implementsERC165InterfaceNoCache: pass:normal[xref:introspection.adoc#IERC1820Registry-implementsERC165InterfaceNoCache-address-bytes4-[`IERC1820Registry.implementsERC165InterfaceNoCache`]] :xref-IERC1820Registry-implementsERC165InterfaceNoCache: xref:introspection.adoc#IERC1820Registry-implementsERC165InterfaceNoCache-address-bytes4- :IERC1820Registry-InterfaceImplementerSet: pass:normal[xref:introspection.adoc#IERC1820Registry-InterfaceImplementerSet-address-bytes32-address-[`IERC1820Registry.InterfaceImplementerSet`]] :xref-IERC1820Registry-InterfaceImplementerSet: xref:introspection.adoc#IERC1820Registry-InterfaceImplementerSet-address-bytes32-address- :IERC1820Registry-ManagerChanged: pass:normal[xref:introspection.adoc#IERC1820Registry-ManagerChanged-address-address-[`IERC1820Registry.ManagerChanged`]] :xref-IERC1820Registry-ManagerChanged: xref:introspection.adoc#IERC1820Registry-ManagerChanged-address-address- :Pausable: pass:normal[xref:lifecycle.adoc#Pausable[`Pausable`]] :xref-Pausable: xref:lifecycle.adoc#Pausable :Pausable-whenNotPaused: pass:normal[xref:lifecycle.adoc#Pausable-whenNotPaused--[`Pausable.whenNotPaused`]] :xref-Pausable-whenNotPaused: xref:lifecycle.adoc#Pausable-whenNotPaused-- :Pausable-whenPaused: pass:normal[xref:lifecycle.adoc#Pausable-whenPaused--[`Pausable.whenPaused`]] :xref-Pausable-whenPaused: xref:lifecycle.adoc#Pausable-whenPaused-- :Pausable-constructor: pass:normal[xref:lifecycle.adoc#Pausable-constructor--[`Pausable.constructor`]] :xref-Pausable-constructor: xref:lifecycle.adoc#Pausable-constructor-- :Pausable-paused: pass:normal[xref:lifecycle.adoc#Pausable-paused--[`Pausable.paused`]] :xref-Pausable-paused: xref:lifecycle.adoc#Pausable-paused-- :Pausable-pause: pass:normal[xref:lifecycle.adoc#Pausable-pause--[`Pausable.pause`]] :xref-Pausable-pause: xref:lifecycle.adoc#Pausable-pause-- :Pausable-unpause: pass:normal[xref:lifecycle.adoc#Pausable-unpause--[`Pausable.unpause`]] :xref-Pausable-unpause: xref:lifecycle.adoc#Pausable-unpause-- :Pausable-Paused: pass:normal[xref:lifecycle.adoc#Pausable-Paused-address-[`Pausable.Paused`]] :xref-Pausable-Paused: xref:lifecycle.adoc#Pausable-Paused-address- :Pausable-Unpaused: pass:normal[xref:lifecycle.adoc#Pausable-Unpaused-address-[`Pausable.Unpaused`]] :xref-Pausable-Unpaused: xref:lifecycle.adoc#Pausable-Unpaused-address- :Ownable: pass:normal[xref:ownership.adoc#Ownable[`Ownable`]] :xref-Ownable: xref:ownership.adoc#Ownable :Ownable-onlyOwner: pass:normal[xref:ownership.adoc#Ownable-onlyOwner--[`Ownable.onlyOwner`]] :xref-Ownable-onlyOwner: xref:ownership.adoc#Ownable-onlyOwner-- :Ownable-constructor: pass:normal[xref:ownership.adoc#Ownable-constructor--[`Ownable.constructor`]] :xref-Ownable-constructor: xref:ownership.adoc#Ownable-constructor-- :Ownable-owner: pass:normal[xref:ownership.adoc#Ownable-owner--[`Ownable.owner`]] :xref-Ownable-owner: xref:ownership.adoc#Ownable-owner-- :Ownable-isOwner: pass:normal[xref:ownership.adoc#Ownable-isOwner--[`Ownable.isOwner`]] :xref-Ownable-isOwner: xref:ownership.adoc#Ownable-isOwner-- :Ownable-renounceOwnership: pass:normal[xref:ownership.adoc#Ownable-renounceOwnership--[`Ownable.renounceOwnership`]] :xref-Ownable-renounceOwnership: xref:ownership.adoc#Ownable-renounceOwnership-- :Ownable-transferOwnership: pass:normal[xref:ownership.adoc#Ownable-transferOwnership-address-[`Ownable.transferOwnership`]] :xref-Ownable-transferOwnership: xref:ownership.adoc#Ownable-transferOwnership-address- :Ownable-_transferOwnership: pass:normal[xref:ownership.adoc#Ownable-_transferOwnership-address-[`Ownable._transferOwnership`]] :xref-Ownable-_transferOwnership: xref:ownership.adoc#Ownable-_transferOwnership-address- :Ownable-OwnershipTransferred: pass:normal[xref:ownership.adoc#Ownable-OwnershipTransferred-address-address-[`Ownable.OwnershipTransferred`]] :xref-Ownable-OwnershipTransferred: xref:ownership.adoc#Ownable-OwnershipTransferred-address-address- :Secondary: pass:normal[xref:ownership.adoc#Secondary[`Secondary`]] :xref-Secondary: xref:ownership.adoc#Secondary :Secondary-onlyPrimary: pass:normal[xref:ownership.adoc#Secondary-onlyPrimary--[`Secondary.onlyPrimary`]] :xref-Secondary-onlyPrimary: xref:ownership.adoc#Secondary-onlyPrimary-- :Secondary-constructor: pass:normal[xref:ownership.adoc#Secondary-constructor--[`Secondary.constructor`]] :xref-Secondary-constructor: xref:ownership.adoc#Secondary-constructor-- :Secondary-primary: pass:normal[xref:ownership.adoc#Secondary-primary--[`Secondary.primary`]] :xref-Secondary-primary: xref:ownership.adoc#Secondary-primary-- :Secondary-transferPrimary: pass:normal[xref:ownership.adoc#Secondary-transferPrimary-address-[`Secondary.transferPrimary`]] :xref-Secondary-transferPrimary: xref:ownership.adoc#Secondary-transferPrimary-address- :Secondary-PrimaryTransferred: pass:normal[xref:ownership.adoc#Secondary-PrimaryTransferred-address-[`Secondary.PrimaryTransferred`]] :xref-Secondary-PrimaryTransferred: xref:ownership.adoc#Secondary-PrimaryTransferred-address- :Math: pass:normal[xref:math.adoc#Math[`Math`]] :xref-Math: xref:math.adoc#Math :Math-max: pass:normal[xref:math.adoc#Math-max-uint256-uint256-[`Math.max`]] :xref-Math-max: xref:math.adoc#Math-max-uint256-uint256- :Math-min: pass:normal[xref:math.adoc#Math-min-uint256-uint256-[`Math.min`]] :xref-Math-min: xref:math.adoc#Math-min-uint256-uint256- :Math-average: pass:normal[xref:math.adoc#Math-average-uint256-uint256-[`Math.average`]] :xref-Math-average: xref:math.adoc#Math-average-uint256-uint256- :SafeMath: pass:normal[xref:math.adoc#SafeMath[`SafeMath`]] :xref-SafeMath: xref:math.adoc#SafeMath :SafeMath-add: pass:normal[xref:math.adoc#SafeMath-add-uint256-uint256-[`SafeMath.add`]] :xref-SafeMath-add: xref:math.adoc#SafeMath-add-uint256-uint256- :SafeMath-sub: pass:normal[xref:math.adoc#SafeMath-sub-uint256-uint256-[`SafeMath.sub`]] :xref-SafeMath-sub: xref:math.adoc#SafeMath-sub-uint256-uint256- :SafeMath-sub: pass:normal[xref:math.adoc#SafeMath-sub-uint256-uint256-string-[`SafeMath.sub`]] :xref-SafeMath-sub: xref:math.adoc#SafeMath-sub-uint256-uint256-string- :SafeMath-mul: pass:normal[xref:math.adoc#SafeMath-mul-uint256-uint256-[`SafeMath.mul`]] :xref-SafeMath-mul: xref:math.adoc#SafeMath-mul-uint256-uint256- :SafeMath-div: pass:normal[xref:math.adoc#SafeMath-div-uint256-uint256-[`SafeMath.div`]] :xref-SafeMath-div: xref:math.adoc#SafeMath-div-uint256-uint256- :SafeMath-div: pass:normal[xref:math.adoc#SafeMath-div-uint256-uint256-string-[`SafeMath.div`]] :xref-SafeMath-div: xref:math.adoc#SafeMath-div-uint256-uint256-string- :SafeMath-mod: pass:normal[xref:math.adoc#SafeMath-mod-uint256-uint256-[`SafeMath.mod`]] :xref-SafeMath-mod: xref:math.adoc#SafeMath-mod-uint256-uint256- :SafeMath-mod: pass:normal[xref:math.adoc#SafeMath-mod-uint256-uint256-string-[`SafeMath.mod`]] :xref-SafeMath-mod: xref:math.adoc#SafeMath-mod-uint256-uint256-string- :PaymentSplitter: pass:normal[xref:payment.adoc#PaymentSplitter[`PaymentSplitter`]] :xref-PaymentSplitter: xref:payment.adoc#PaymentSplitter :PaymentSplitter-constructor: pass:normal[xref:payment.adoc#PaymentSplitter-constructor-address---uint256---[`PaymentSplitter.constructor`]] :xref-PaymentSplitter-constructor: xref:payment.adoc#PaymentSplitter-constructor-address---uint256--- :PaymentSplitter-fallback: pass:normal[xref:payment.adoc#PaymentSplitter-fallback--[`PaymentSplitter.fallback`]] :xref-PaymentSplitter-fallback: xref:payment.adoc#PaymentSplitter-fallback-- :PaymentSplitter-totalShares: pass:normal[xref:payment.adoc#PaymentSplitter-totalShares--[`PaymentSplitter.totalShares`]] :xref-PaymentSplitter-totalShares: xref:payment.adoc#PaymentSplitter-totalShares-- :PaymentSplitter-totalReleased: pass:normal[xref:payment.adoc#PaymentSplitter-totalReleased--[`PaymentSplitter.totalReleased`]] :xref-PaymentSplitter-totalReleased: xref:payment.adoc#PaymentSplitter-totalReleased-- :PaymentSplitter-shares: pass:normal[xref:payment.adoc#PaymentSplitter-shares-address-[`PaymentSplitter.shares`]] :xref-PaymentSplitter-shares: xref:payment.adoc#PaymentSplitter-shares-address- :PaymentSplitter-released: pass:normal[xref:payment.adoc#PaymentSplitter-released-address-[`PaymentSplitter.released`]] :xref-PaymentSplitter-released: xref:payment.adoc#PaymentSplitter-released-address- :PaymentSplitter-payee: pass:normal[xref:payment.adoc#PaymentSplitter-payee-uint256-[`PaymentSplitter.payee`]] :xref-PaymentSplitter-payee: xref:payment.adoc#PaymentSplitter-payee-uint256- :PaymentSplitter-release: pass:normal[xref:payment.adoc#PaymentSplitter-release-address-payable-[`PaymentSplitter.release`]] :xref-PaymentSplitter-release: xref:payment.adoc#PaymentSplitter-release-address-payable- :PaymentSplitter-PayeeAdded: pass:normal[xref:payment.adoc#PaymentSplitter-PayeeAdded-address-uint256-[`PaymentSplitter.PayeeAdded`]] :xref-PaymentSplitter-PayeeAdded: xref:payment.adoc#PaymentSplitter-PayeeAdded-address-uint256- :PaymentSplitter-PaymentReleased: pass:normal[xref:payment.adoc#PaymentSplitter-PaymentReleased-address-uint256-[`PaymentSplitter.PaymentReleased`]] :xref-PaymentSplitter-PaymentReleased: xref:payment.adoc#PaymentSplitter-PaymentReleased-address-uint256- :PaymentSplitter-PaymentReceived: pass:normal[xref:payment.adoc#PaymentSplitter-PaymentReceived-address-uint256-[`PaymentSplitter.PaymentReceived`]] :xref-PaymentSplitter-PaymentReceived: xref:payment.adoc#PaymentSplitter-PaymentReceived-address-uint256- :PullPayment: pass:normal[xref:payment.adoc#PullPayment[`PullPayment`]] :xref-PullPayment: xref:payment.adoc#PullPayment :PullPayment-constructor: pass:normal[xref:payment.adoc#PullPayment-constructor--[`PullPayment.constructor`]] :xref-PullPayment-constructor: xref:payment.adoc#PullPayment-constructor-- :PullPayment-withdrawPayments: pass:normal[xref:payment.adoc#PullPayment-withdrawPayments-address-payable-[`PullPayment.withdrawPayments`]] :xref-PullPayment-withdrawPayments: xref:payment.adoc#PullPayment-withdrawPayments-address-payable- :PullPayment-withdrawPaymentsWithGas: pass:normal[xref:payment.adoc#PullPayment-withdrawPaymentsWithGas-address-payable-[`PullPayment.withdrawPaymentsWithGas`]] :xref-PullPayment-withdrawPaymentsWithGas: xref:payment.adoc#PullPayment-withdrawPaymentsWithGas-address-payable- :PullPayment-payments: pass:normal[xref:payment.adoc#PullPayment-payments-address-[`PullPayment.payments`]] :xref-PullPayment-payments: xref:payment.adoc#PullPayment-payments-address- :PullPayment-_asyncTransfer: pass:normal[xref:payment.adoc#PullPayment-_asyncTransfer-address-uint256-[`PullPayment._asyncTransfer`]] :xref-PullPayment-_asyncTransfer: xref:payment.adoc#PullPayment-_asyncTransfer-address-uint256- :ConditionalEscrow: pass:normal[xref:payment.adoc#ConditionalEscrow[`ConditionalEscrow`]] :xref-ConditionalEscrow: xref:payment.adoc#ConditionalEscrow :ConditionalEscrow-withdrawalAllowed: pass:normal[xref:payment.adoc#ConditionalEscrow-withdrawalAllowed-address-[`ConditionalEscrow.withdrawalAllowed`]] :xref-ConditionalEscrow-withdrawalAllowed: xref:payment.adoc#ConditionalEscrow-withdrawalAllowed-address- :ConditionalEscrow-withdraw: pass:normal[xref:payment.adoc#ConditionalEscrow-withdraw-address-payable-[`ConditionalEscrow.withdraw`]] :xref-ConditionalEscrow-withdraw: xref:payment.adoc#ConditionalEscrow-withdraw-address-payable- :Escrow: pass:normal[xref:payment.adoc#Escrow[`Escrow`]] :xref-Escrow: xref:payment.adoc#Escrow :Escrow-depositsOf: pass:normal[xref:payment.adoc#Escrow-depositsOf-address-[`Escrow.depositsOf`]] :xref-Escrow-depositsOf: xref:payment.adoc#Escrow-depositsOf-address- :Escrow-deposit: pass:normal[xref:payment.adoc#Escrow-deposit-address-[`Escrow.deposit`]] :xref-Escrow-deposit: xref:payment.adoc#Escrow-deposit-address- :Escrow-withdraw: pass:normal[xref:payment.adoc#Escrow-withdraw-address-payable-[`Escrow.withdraw`]] :xref-Escrow-withdraw: xref:payment.adoc#Escrow-withdraw-address-payable- :Escrow-withdrawWithGas: pass:normal[xref:payment.adoc#Escrow-withdrawWithGas-address-payable-[`Escrow.withdrawWithGas`]] :xref-Escrow-withdrawWithGas: xref:payment.adoc#Escrow-withdrawWithGas-address-payable- :Escrow-Deposited: pass:normal[xref:payment.adoc#Escrow-Deposited-address-uint256-[`Escrow.Deposited`]] :xref-Escrow-Deposited: xref:payment.adoc#Escrow-Deposited-address-uint256- :Escrow-Withdrawn: pass:normal[xref:payment.adoc#Escrow-Withdrawn-address-uint256-[`Escrow.Withdrawn`]] :xref-Escrow-Withdrawn: xref:payment.adoc#Escrow-Withdrawn-address-uint256- :RefundEscrow: pass:normal[xref:payment.adoc#RefundEscrow[`RefundEscrow`]] :xref-RefundEscrow: xref:payment.adoc#RefundEscrow :RefundEscrow-constructor: pass:normal[xref:payment.adoc#RefundEscrow-constructor-address-payable-[`RefundEscrow.constructor`]] :xref-RefundEscrow-constructor: xref:payment.adoc#RefundEscrow-constructor-address-payable- :RefundEscrow-state: pass:normal[xref:payment.adoc#RefundEscrow-state--[`RefundEscrow.state`]] :xref-RefundEscrow-state: xref:payment.adoc#RefundEscrow-state-- :RefundEscrow-beneficiary: pass:normal[xref:payment.adoc#RefundEscrow-beneficiary--[`RefundEscrow.beneficiary`]] :xref-RefundEscrow-beneficiary: xref:payment.adoc#RefundEscrow-beneficiary-- :RefundEscrow-deposit: pass:normal[xref:payment.adoc#RefundEscrow-deposit-address-[`RefundEscrow.deposit`]] :xref-RefundEscrow-deposit: xref:payment.adoc#RefundEscrow-deposit-address- :RefundEscrow-close: pass:normal[xref:payment.adoc#RefundEscrow-close--[`RefundEscrow.close`]] :xref-RefundEscrow-close: xref:payment.adoc#RefundEscrow-close-- :RefundEscrow-enableRefunds: pass:normal[xref:payment.adoc#RefundEscrow-enableRefunds--[`RefundEscrow.enableRefunds`]] :xref-RefundEscrow-enableRefunds: xref:payment.adoc#RefundEscrow-enableRefunds-- :RefundEscrow-beneficiaryWithdraw: pass:normal[xref:payment.adoc#RefundEscrow-beneficiaryWithdraw--[`RefundEscrow.beneficiaryWithdraw`]] :xref-RefundEscrow-beneficiaryWithdraw: xref:payment.adoc#RefundEscrow-beneficiaryWithdraw-- :RefundEscrow-withdrawalAllowed: pass:normal[xref:payment.adoc#RefundEscrow-withdrawalAllowed-address-[`RefundEscrow.withdrawalAllowed`]] :xref-RefundEscrow-withdrawalAllowed: xref:payment.adoc#RefundEscrow-withdrawalAllowed-address- :RefundEscrow-RefundsClosed: pass:normal[xref:payment.adoc#RefundEscrow-RefundsClosed--[`RefundEscrow.RefundsClosed`]] :xref-RefundEscrow-RefundsClosed: xref:payment.adoc#RefundEscrow-RefundsClosed-- :RefundEscrow-RefundsEnabled: pass:normal[xref:payment.adoc#RefundEscrow-RefundsEnabled--[`RefundEscrow.RefundsEnabled`]] :xref-RefundEscrow-RefundsEnabled: xref:payment.adoc#RefundEscrow-RefundsEnabled-- :Address: pass:normal[xref:utils.adoc#Address[`Address`]] :xref-Address: xref:utils.adoc#Address :Address-isContract: pass:normal[xref:utils.adoc#Address-isContract-address-[`Address.isContract`]] :xref-Address-isContract: xref:utils.adoc#Address-isContract-address- :Address-toPayable: pass:normal[xref:utils.adoc#Address-toPayable-address-[`Address.toPayable`]] :xref-Address-toPayable: xref:utils.adoc#Address-toPayable-address- :Address-sendValue: pass:normal[xref:utils.adoc#Address-sendValue-address-payable-uint256-[`Address.sendValue`]] :xref-Address-sendValue: xref:utils.adoc#Address-sendValue-address-payable-uint256- :Arrays: pass:normal[xref:utils.adoc#Arrays[`Arrays`]] :xref-Arrays: xref:utils.adoc#Arrays :Arrays-findUpperBound: pass:normal[xref:utils.adoc#Arrays-findUpperBound-uint256---uint256-[`Arrays.findUpperBound`]] :xref-Arrays-findUpperBound: xref:utils.adoc#Arrays-findUpperBound-uint256---uint256- :Create2: pass:normal[xref:utils.adoc#Create2[`Create2`]] :xref-Create2: xref:utils.adoc#Create2 :Create2-deploy: pass:normal[xref:utils.adoc#Create2-deploy-bytes32-bytes-[`Create2.deploy`]] :xref-Create2-deploy: xref:utils.adoc#Create2-deploy-bytes32-bytes- :Create2-computeAddress: pass:normal[xref:utils.adoc#Create2-computeAddress-bytes32-bytes-[`Create2.computeAddress`]] :xref-Create2-computeAddress: xref:utils.adoc#Create2-computeAddress-bytes32-bytes- :Create2-computeAddress: pass:normal[xref:utils.adoc#Create2-computeAddress-bytes32-bytes-address-[`Create2.computeAddress`]] :xref-Create2-computeAddress: xref:utils.adoc#Create2-computeAddress-bytes32-bytes-address- :EnumerableSet: pass:normal[xref:utils.adoc#EnumerableSet[`EnumerableSet`]] :xref-EnumerableSet: xref:utils.adoc#EnumerableSet :EnumerableSet-add: pass:normal[xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-AddressSet-address-[`EnumerableSet.add`]] :xref-EnumerableSet-add: xref:utils.adoc#EnumerableSet-add-struct-EnumerableSet-AddressSet-address- :EnumerableSet-remove: pass:normal[xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-AddressSet-address-[`EnumerableSet.remove`]] :xref-EnumerableSet-remove: xref:utils.adoc#EnumerableSet-remove-struct-EnumerableSet-AddressSet-address- :EnumerableSet-contains: pass:normal[xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-AddressSet-address-[`EnumerableSet.contains`]] :xref-EnumerableSet-contains: xref:utils.adoc#EnumerableSet-contains-struct-EnumerableSet-AddressSet-address- :EnumerableSet-enumerate: pass:normal[xref:utils.adoc#EnumerableSet-enumerate-struct-EnumerableSet-AddressSet-[`EnumerableSet.enumerate`]] :xref-EnumerableSet-enumerate: xref:utils.adoc#EnumerableSet-enumerate-struct-EnumerableSet-AddressSet- :EnumerableSet-length: pass:normal[xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-AddressSet-[`EnumerableSet.length`]] :xref-EnumerableSet-length: xref:utils.adoc#EnumerableSet-length-struct-EnumerableSet-AddressSet- :EnumerableSet-get: pass:normal[xref:utils.adoc#EnumerableSet-get-struct-EnumerableSet-AddressSet-uint256-[`EnumerableSet.get`]] :xref-EnumerableSet-get: xref:utils.adoc#EnumerableSet-get-struct-EnumerableSet-AddressSet-uint256- :ReentrancyGuard: pass:normal[xref:utils.adoc#ReentrancyGuard[`ReentrancyGuard`]] :xref-ReentrancyGuard: xref:utils.adoc#ReentrancyGuard :ReentrancyGuard-nonReentrant: pass:normal[xref:utils.adoc#ReentrancyGuard-nonReentrant--[`ReentrancyGuard.nonReentrant`]] :xref-ReentrancyGuard-nonReentrant: xref:utils.adoc#ReentrancyGuard-nonReentrant-- :ReentrancyGuard-constructor: pass:normal[xref:utils.adoc#ReentrancyGuard-constructor--[`ReentrancyGuard.constructor`]] :xref-ReentrancyGuard-constructor: xref:utils.adoc#ReentrancyGuard-constructor-- :SafeCast: pass:normal[xref:utils.adoc#SafeCast[`SafeCast`]] :xref-SafeCast: xref:utils.adoc#SafeCast :SafeCast-toUint128: pass:normal[xref:utils.adoc#SafeCast-toUint128-uint256-[`SafeCast.toUint128`]] :xref-SafeCast-toUint128: xref:utils.adoc#SafeCast-toUint128-uint256- :SafeCast-toUint64: pass:normal[xref:utils.adoc#SafeCast-toUint64-uint256-[`SafeCast.toUint64`]] :xref-SafeCast-toUint64: xref:utils.adoc#SafeCast-toUint64-uint256- :SafeCast-toUint32: pass:normal[xref:utils.adoc#SafeCast-toUint32-uint256-[`SafeCast.toUint32`]] :xref-SafeCast-toUint32: xref:utils.adoc#SafeCast-toUint32-uint256- :SafeCast-toUint16: pass:normal[xref:utils.adoc#SafeCast-toUint16-uint256-[`SafeCast.toUint16`]] :xref-SafeCast-toUint16: xref:utils.adoc#SafeCast-toUint16-uint256- :SafeCast-toUint8: pass:normal[xref:utils.adoc#SafeCast-toUint8-uint256-[`SafeCast.toUint8`]] :xref-SafeCast-toUint8: xref:utils.adoc#SafeCast-toUint8-uint256- :ERC721: pass:normal[xref:token/ERC721.adoc#ERC721[`ERC721`]] :xref-ERC721: xref:token/ERC721.adoc#ERC721 :ERC721-balanceOf: pass:normal[xref:token/ERC721.adoc#ERC721-balanceOf-address-[`ERC721.balanceOf`]] :xref-ERC721-balanceOf: xref:token/ERC721.adoc#ERC721-balanceOf-address- :ERC721-ownerOf: pass:normal[xref:token/ERC721.adoc#ERC721-ownerOf-uint256-[`ERC721.ownerOf`]] :xref-ERC721-ownerOf: xref:token/ERC721.adoc#ERC721-ownerOf-uint256- :ERC721-approve: pass:normal[xref:token/ERC721.adoc#ERC721-approve-address-uint256-[`ERC721.approve`]] :xref-ERC721-approve: xref:token/ERC721.adoc#ERC721-approve-address-uint256- :ERC721-getApproved: pass:normal[xref:token/ERC721.adoc#ERC721-getApproved-uint256-[`ERC721.getApproved`]] :xref-ERC721-getApproved: xref:token/ERC721.adoc#ERC721-getApproved-uint256- :ERC721-setApprovalForAll: pass:normal[xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool-[`ERC721.setApprovalForAll`]] :xref-ERC721-setApprovalForAll: xref:token/ERC721.adoc#ERC721-setApprovalForAll-address-bool- :ERC721-isApprovedForAll: pass:normal[xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address-[`ERC721.isApprovedForAll`]] :xref-ERC721-isApprovedForAll: xref:token/ERC721.adoc#ERC721-isApprovedForAll-address-address- :ERC721-transferFrom: pass:normal[xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256-[`ERC721.transferFrom`]] :xref-ERC721-transferFrom: xref:token/ERC721.adoc#ERC721-transferFrom-address-address-uint256- :ERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-[`ERC721.safeTransferFrom`]] :xref-ERC721-safeTransferFrom: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256- :ERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes-[`ERC721.safeTransferFrom`]] :xref-ERC721-safeTransferFrom: xref:token/ERC721.adoc#ERC721-safeTransferFrom-address-address-uint256-bytes- :ERC721-_safeTransferFrom: pass:normal[xref:token/ERC721.adoc#ERC721-_safeTransferFrom-address-address-uint256-bytes-[`ERC721._safeTransferFrom`]] :xref-ERC721-_safeTransferFrom: xref:token/ERC721.adoc#ERC721-_safeTransferFrom-address-address-uint256-bytes- :ERC721-_exists: pass:normal[xref:token/ERC721.adoc#ERC721-_exists-uint256-[`ERC721._exists`]] :xref-ERC721-_exists: xref:token/ERC721.adoc#ERC721-_exists-uint256- :ERC721-_isApprovedOrOwner: pass:normal[xref:token/ERC721.adoc#ERC721-_isApprovedOrOwner-address-uint256-[`ERC721._isApprovedOrOwner`]] :xref-ERC721-_isApprovedOrOwner: xref:token/ERC721.adoc#ERC721-_isApprovedOrOwner-address-uint256- :ERC721-_safeMint: pass:normal[xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-[`ERC721._safeMint`]] :xref-ERC721-_safeMint: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256- :ERC721-_safeMint: pass:normal[xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes-[`ERC721._safeMint`]] :xref-ERC721-_safeMint: xref:token/ERC721.adoc#ERC721-_safeMint-address-uint256-bytes- :ERC721-_mint: pass:normal[xref:token/ERC721.adoc#ERC721-_mint-address-uint256-[`ERC721._mint`]] :xref-ERC721-_mint: xref:token/ERC721.adoc#ERC721-_mint-address-uint256- :ERC721-_burn: pass:normal[xref:token/ERC721.adoc#ERC721-_burn-address-uint256-[`ERC721._burn`]] :xref-ERC721-_burn: xref:token/ERC721.adoc#ERC721-_burn-address-uint256- :ERC721-_burn: pass:normal[xref:token/ERC721.adoc#ERC721-_burn-uint256-[`ERC721._burn`]] :xref-ERC721-_burn: xref:token/ERC721.adoc#ERC721-_burn-uint256- :ERC721-_transferFrom: pass:normal[xref:token/ERC721.adoc#ERC721-_transferFrom-address-address-uint256-[`ERC721._transferFrom`]] :xref-ERC721-_transferFrom: xref:token/ERC721.adoc#ERC721-_transferFrom-address-address-uint256- :ERC721-_checkOnERC721Received: pass:normal[xref:token/ERC721.adoc#ERC721-_checkOnERC721Received-address-address-uint256-bytes-[`ERC721._checkOnERC721Received`]] :xref-ERC721-_checkOnERC721Received: xref:token/ERC721.adoc#ERC721-_checkOnERC721Received-address-address-uint256-bytes- :ERC721Burnable: pass:normal[xref:token/ERC721.adoc#ERC721Burnable[`ERC721Burnable`]] :xref-ERC721Burnable: xref:token/ERC721.adoc#ERC721Burnable :ERC721Burnable-burn: pass:normal[xref:token/ERC721.adoc#ERC721Burnable-burn-uint256-[`ERC721Burnable.burn`]] :xref-ERC721Burnable-burn: xref:token/ERC721.adoc#ERC721Burnable-burn-uint256- :ERC721Enumerable: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable[`ERC721Enumerable`]] :xref-ERC721Enumerable: xref:token/ERC721.adoc#ERC721Enumerable :ERC721Enumerable-constructor: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-constructor--[`ERC721Enumerable.constructor`]] :xref-ERC721Enumerable-constructor: xref:token/ERC721.adoc#ERC721Enumerable-constructor-- :ERC721Enumerable-tokenOfOwnerByIndex: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-tokenOfOwnerByIndex-address-uint256-[`ERC721Enumerable.tokenOfOwnerByIndex`]] :xref-ERC721Enumerable-tokenOfOwnerByIndex: xref:token/ERC721.adoc#ERC721Enumerable-tokenOfOwnerByIndex-address-uint256- :ERC721Enumerable-totalSupply: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-totalSupply--[`ERC721Enumerable.totalSupply`]] :xref-ERC721Enumerable-totalSupply: xref:token/ERC721.adoc#ERC721Enumerable-totalSupply-- :ERC721Enumerable-tokenByIndex: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-tokenByIndex-uint256-[`ERC721Enumerable.tokenByIndex`]] :xref-ERC721Enumerable-tokenByIndex: xref:token/ERC721.adoc#ERC721Enumerable-tokenByIndex-uint256- :ERC721Enumerable-_transferFrom: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-_transferFrom-address-address-uint256-[`ERC721Enumerable._transferFrom`]] :xref-ERC721Enumerable-_transferFrom: xref:token/ERC721.adoc#ERC721Enumerable-_transferFrom-address-address-uint256- :ERC721Enumerable-_mint: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-_mint-address-uint256-[`ERC721Enumerable._mint`]] :xref-ERC721Enumerable-_mint: xref:token/ERC721.adoc#ERC721Enumerable-_mint-address-uint256- :ERC721Enumerable-_burn: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-_burn-address-uint256-[`ERC721Enumerable._burn`]] :xref-ERC721Enumerable-_burn: xref:token/ERC721.adoc#ERC721Enumerable-_burn-address-uint256- :ERC721Enumerable-_tokensOfOwner: pass:normal[xref:token/ERC721.adoc#ERC721Enumerable-_tokensOfOwner-address-[`ERC721Enumerable._tokensOfOwner`]] :xref-ERC721Enumerable-_tokensOfOwner: xref:token/ERC721.adoc#ERC721Enumerable-_tokensOfOwner-address- :ERC721Full: pass:normal[xref:token/ERC721.adoc#ERC721Full[`ERC721Full`]] :xref-ERC721Full: xref:token/ERC721.adoc#ERC721Full :ERC721Full-constructor: pass:normal[xref:token/ERC721.adoc#ERC721Full-constructor-string-string-[`ERC721Full.constructor`]] :xref-ERC721Full-constructor: xref:token/ERC721.adoc#ERC721Full-constructor-string-string- :ERC721Holder: pass:normal[xref:token/ERC721.adoc#ERC721Holder[`ERC721Holder`]] :xref-ERC721Holder: xref:token/ERC721.adoc#ERC721Holder :ERC721Holder-onERC721Received: pass:normal[xref:token/ERC721.adoc#ERC721Holder-onERC721Received-address-address-uint256-bytes-[`ERC721Holder.onERC721Received`]] :xref-ERC721Holder-onERC721Received: xref:token/ERC721.adoc#ERC721Holder-onERC721Received-address-address-uint256-bytes- :ERC721Metadata: pass:normal[xref:token/ERC721.adoc#ERC721Metadata[`ERC721Metadata`]] :xref-ERC721Metadata: xref:token/ERC721.adoc#ERC721Metadata :ERC721Metadata-constructor: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-constructor-string-string-[`ERC721Metadata.constructor`]] :xref-ERC721Metadata-constructor: xref:token/ERC721.adoc#ERC721Metadata-constructor-string-string- :ERC721Metadata-name: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-name--[`ERC721Metadata.name`]] :xref-ERC721Metadata-name: xref:token/ERC721.adoc#ERC721Metadata-name-- :ERC721Metadata-symbol: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-symbol--[`ERC721Metadata.symbol`]] :xref-ERC721Metadata-symbol: xref:token/ERC721.adoc#ERC721Metadata-symbol-- :ERC721Metadata-tokenURI: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-tokenURI-uint256-[`ERC721Metadata.tokenURI`]] :xref-ERC721Metadata-tokenURI: xref:token/ERC721.adoc#ERC721Metadata-tokenURI-uint256- :ERC721Metadata-_setTokenURI: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-_setTokenURI-uint256-string-[`ERC721Metadata._setTokenURI`]] :xref-ERC721Metadata-_setTokenURI: xref:token/ERC721.adoc#ERC721Metadata-_setTokenURI-uint256-string- :ERC721Metadata-_setBaseURI: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-_setBaseURI-string-[`ERC721Metadata._setBaseURI`]] :xref-ERC721Metadata-_setBaseURI: xref:token/ERC721.adoc#ERC721Metadata-_setBaseURI-string- :ERC721Metadata-baseURI: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-baseURI--[`ERC721Metadata.baseURI`]] :xref-ERC721Metadata-baseURI: xref:token/ERC721.adoc#ERC721Metadata-baseURI-- :ERC721Metadata-_burn: pass:normal[xref:token/ERC721.adoc#ERC721Metadata-_burn-address-uint256-[`ERC721Metadata._burn`]] :xref-ERC721Metadata-_burn: xref:token/ERC721.adoc#ERC721Metadata-_burn-address-uint256- :ERC721MetadataMintable: pass:normal[xref:token/ERC721.adoc#ERC721MetadataMintable[`ERC721MetadataMintable`]] :xref-ERC721MetadataMintable: xref:token/ERC721.adoc#ERC721MetadataMintable :ERC721MetadataMintable-mintWithTokenURI: pass:normal[xref:token/ERC721.adoc#ERC721MetadataMintable-mintWithTokenURI-address-uint256-string-[`ERC721MetadataMintable.mintWithTokenURI`]] :xref-ERC721MetadataMintable-mintWithTokenURI: xref:token/ERC721.adoc#ERC721MetadataMintable-mintWithTokenURI-address-uint256-string- :ERC721Mintable: pass:normal[xref:token/ERC721.adoc#ERC721Mintable[`ERC721Mintable`]] :xref-ERC721Mintable: xref:token/ERC721.adoc#ERC721Mintable :ERC721Mintable-mint: pass:normal[xref:token/ERC721.adoc#ERC721Mintable-mint-address-uint256-[`ERC721Mintable.mint`]] :xref-ERC721Mintable-mint: xref:token/ERC721.adoc#ERC721Mintable-mint-address-uint256- :ERC721Mintable-safeMint: pass:normal[xref:token/ERC721.adoc#ERC721Mintable-safeMint-address-uint256-[`ERC721Mintable.safeMint`]] :xref-ERC721Mintable-safeMint: xref:token/ERC721.adoc#ERC721Mintable-safeMint-address-uint256- :ERC721Mintable-safeMint: pass:normal[xref:token/ERC721.adoc#ERC721Mintable-safeMint-address-uint256-bytes-[`ERC721Mintable.safeMint`]] :xref-ERC721Mintable-safeMint: xref:token/ERC721.adoc#ERC721Mintable-safeMint-address-uint256-bytes- :ERC721Pausable: pass:normal[xref:token/ERC721.adoc#ERC721Pausable[`ERC721Pausable`]] :xref-ERC721Pausable: xref:token/ERC721.adoc#ERC721Pausable :ERC721Pausable-approve: pass:normal[xref:token/ERC721.adoc#ERC721Pausable-approve-address-uint256-[`ERC721Pausable.approve`]] :xref-ERC721Pausable-approve: xref:token/ERC721.adoc#ERC721Pausable-approve-address-uint256- :ERC721Pausable-setApprovalForAll: pass:normal[xref:token/ERC721.adoc#ERC721Pausable-setApprovalForAll-address-bool-[`ERC721Pausable.setApprovalForAll`]] :xref-ERC721Pausable-setApprovalForAll: xref:token/ERC721.adoc#ERC721Pausable-setApprovalForAll-address-bool- :ERC721Pausable-_transferFrom: pass:normal[xref:token/ERC721.adoc#ERC721Pausable-_transferFrom-address-address-uint256-[`ERC721Pausable._transferFrom`]] :xref-ERC721Pausable-_transferFrom: xref:token/ERC721.adoc#ERC721Pausable-_transferFrom-address-address-uint256- :IERC721: pass:normal[xref:token/ERC721.adoc#IERC721[`IERC721`]] :xref-IERC721: xref:token/ERC721.adoc#IERC721 :IERC721-balanceOf: pass:normal[xref:token/ERC721.adoc#IERC721-balanceOf-address-[`IERC721.balanceOf`]] :xref-IERC721-balanceOf: xref:token/ERC721.adoc#IERC721-balanceOf-address- :IERC721-ownerOf: pass:normal[xref:token/ERC721.adoc#IERC721-ownerOf-uint256-[`IERC721.ownerOf`]] :xref-IERC721-ownerOf: xref:token/ERC721.adoc#IERC721-ownerOf-uint256- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-[`IERC721.safeTransferFrom`]] :xref-IERC721-safeTransferFrom: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256- :IERC721-transferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256-[`IERC721.transferFrom`]] :xref-IERC721-transferFrom: xref:token/ERC721.adoc#IERC721-transferFrom-address-address-uint256- :IERC721-approve: pass:normal[xref:token/ERC721.adoc#IERC721-approve-address-uint256-[`IERC721.approve`]] :xref-IERC721-approve: xref:token/ERC721.adoc#IERC721-approve-address-uint256- :IERC721-getApproved: pass:normal[xref:token/ERC721.adoc#IERC721-getApproved-uint256-[`IERC721.getApproved`]] :xref-IERC721-getApproved: xref:token/ERC721.adoc#IERC721-getApproved-uint256- :IERC721-setApprovalForAll: pass:normal[xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool-[`IERC721.setApprovalForAll`]] :xref-IERC721-setApprovalForAll: xref:token/ERC721.adoc#IERC721-setApprovalForAll-address-bool- :IERC721-isApprovedForAll: pass:normal[xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address-[`IERC721.isApprovedForAll`]] :xref-IERC721-isApprovedForAll: xref:token/ERC721.adoc#IERC721-isApprovedForAll-address-address- :IERC721-safeTransferFrom: pass:normal[xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-bytes-[`IERC721.safeTransferFrom`]] :xref-IERC721-safeTransferFrom: xref:token/ERC721.adoc#IERC721-safeTransferFrom-address-address-uint256-bytes- :IERC721-Transfer: pass:normal[xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256-[`IERC721.Transfer`]] :xref-IERC721-Transfer: xref:token/ERC721.adoc#IERC721-Transfer-address-address-uint256- :IERC721-Approval: pass:normal[xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256-[`IERC721.Approval`]] :xref-IERC721-Approval: xref:token/ERC721.adoc#IERC721-Approval-address-address-uint256- :IERC721-ApprovalForAll: pass:normal[xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool-[`IERC721.ApprovalForAll`]] :xref-IERC721-ApprovalForAll: xref:token/ERC721.adoc#IERC721-ApprovalForAll-address-address-bool- :IERC721Enumerable: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable[`IERC721Enumerable`]] :xref-IERC721Enumerable: xref:token/ERC721.adoc#IERC721Enumerable :IERC721Enumerable-totalSupply: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-totalSupply--[`IERC721Enumerable.totalSupply`]] :xref-IERC721Enumerable-totalSupply: xref:token/ERC721.adoc#IERC721Enumerable-totalSupply-- :IERC721Enumerable-tokenOfOwnerByIndex: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-tokenOfOwnerByIndex-address-uint256-[`IERC721Enumerable.tokenOfOwnerByIndex`]] :xref-IERC721Enumerable-tokenOfOwnerByIndex: xref:token/ERC721.adoc#IERC721Enumerable-tokenOfOwnerByIndex-address-uint256- :IERC721Enumerable-tokenByIndex: pass:normal[xref:token/ERC721.adoc#IERC721Enumerable-tokenByIndex-uint256-[`IERC721Enumerable.tokenByIndex`]] :xref-IERC721Enumerable-tokenByIndex: xref:token/ERC721.adoc#IERC721Enumerable-tokenByIndex-uint256- :IERC721Full: pass:normal[xref:token/ERC721.adoc#IERC721Full[`IERC721Full`]] :xref-IERC721Full: xref:token/ERC721.adoc#IERC721Full :IERC721Metadata: pass:normal[xref:token/ERC721.adoc#IERC721Metadata[`IERC721Metadata`]] :xref-IERC721Metadata: xref:token/ERC721.adoc#IERC721Metadata :IERC721Metadata-name: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-name--[`IERC721Metadata.name`]] :xref-IERC721Metadata-name: xref:token/ERC721.adoc#IERC721Metadata-name-- :IERC721Metadata-symbol: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-symbol--[`IERC721Metadata.symbol`]] :xref-IERC721Metadata-symbol: xref:token/ERC721.adoc#IERC721Metadata-symbol-- :IERC721Metadata-tokenURI: pass:normal[xref:token/ERC721.adoc#IERC721Metadata-tokenURI-uint256-[`IERC721Metadata.tokenURI`]] :xref-IERC721Metadata-tokenURI: xref:token/ERC721.adoc#IERC721Metadata-tokenURI-uint256- :IERC721Receiver: pass:normal[xref:token/ERC721.adoc#IERC721Receiver[`IERC721Receiver`]] :xref-IERC721Receiver: xref:token/ERC721.adoc#IERC721Receiver :IERC721Receiver-onERC721Received: pass:normal[xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes-[`IERC721Receiver.onERC721Received`]] :xref-IERC721Receiver-onERC721Received: xref:token/ERC721.adoc#IERC721Receiver-onERC721Received-address-address-uint256-bytes- :ERC20: pass:normal[xref:token/ERC20.adoc#ERC20[`ERC20`]] :xref-ERC20: xref:token/ERC20.adoc#ERC20 :ERC20-totalSupply: pass:normal[xref:token/ERC20.adoc#ERC20-totalSupply--[`ERC20.totalSupply`]] :xref-ERC20-totalSupply: xref:token/ERC20.adoc#ERC20-totalSupply-- :ERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#ERC20-balanceOf-address-[`ERC20.balanceOf`]] :xref-ERC20-balanceOf: xref:token/ERC20.adoc#ERC20-balanceOf-address- :ERC20-transfer: pass:normal[xref:token/ERC20.adoc#ERC20-transfer-address-uint256-[`ERC20.transfer`]] :xref-ERC20-transfer: xref:token/ERC20.adoc#ERC20-transfer-address-uint256- :ERC20-allowance: pass:normal[xref:token/ERC20.adoc#ERC20-allowance-address-address-[`ERC20.allowance`]] :xref-ERC20-allowance: xref:token/ERC20.adoc#ERC20-allowance-address-address- :ERC20-approve: pass:normal[xref:token/ERC20.adoc#ERC20-approve-address-uint256-[`ERC20.approve`]] :xref-ERC20-approve: xref:token/ERC20.adoc#ERC20-approve-address-uint256- :ERC20-transferFrom: pass:normal[xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256-[`ERC20.transferFrom`]] :xref-ERC20-transferFrom: xref:token/ERC20.adoc#ERC20-transferFrom-address-address-uint256- :ERC20-increaseAllowance: pass:normal[xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256-[`ERC20.increaseAllowance`]] :xref-ERC20-increaseAllowance: xref:token/ERC20.adoc#ERC20-increaseAllowance-address-uint256- :ERC20-decreaseAllowance: pass:normal[xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256-[`ERC20.decreaseAllowance`]] :xref-ERC20-decreaseAllowance: xref:token/ERC20.adoc#ERC20-decreaseAllowance-address-uint256- :ERC20-_transfer: pass:normal[xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256-[`ERC20._transfer`]] :xref-ERC20-_transfer: xref:token/ERC20.adoc#ERC20-_transfer-address-address-uint256- :ERC20-_mint: pass:normal[xref:token/ERC20.adoc#ERC20-_mint-address-uint256-[`ERC20._mint`]] :xref-ERC20-_mint: xref:token/ERC20.adoc#ERC20-_mint-address-uint256- :ERC20-_burn: pass:normal[xref:token/ERC20.adoc#ERC20-_burn-address-uint256-[`ERC20._burn`]] :xref-ERC20-_burn: xref:token/ERC20.adoc#ERC20-_burn-address-uint256- :ERC20-_approve: pass:normal[xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256-[`ERC20._approve`]] :xref-ERC20-_approve: xref:token/ERC20.adoc#ERC20-_approve-address-address-uint256- :ERC20-_burnFrom: pass:normal[xref:token/ERC20.adoc#ERC20-_burnFrom-address-uint256-[`ERC20._burnFrom`]] :xref-ERC20-_burnFrom: xref:token/ERC20.adoc#ERC20-_burnFrom-address-uint256- :ERC20Burnable: pass:normal[xref:token/ERC20.adoc#ERC20Burnable[`ERC20Burnable`]] :xref-ERC20Burnable: xref:token/ERC20.adoc#ERC20Burnable :ERC20Burnable-burn: pass:normal[xref:token/ERC20.adoc#ERC20Burnable-burn-uint256-[`ERC20Burnable.burn`]] :xref-ERC20Burnable-burn: xref:token/ERC20.adoc#ERC20Burnable-burn-uint256- :ERC20Burnable-burnFrom: pass:normal[xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256-[`ERC20Burnable.burnFrom`]] :xref-ERC20Burnable-burnFrom: xref:token/ERC20.adoc#ERC20Burnable-burnFrom-address-uint256- :ERC20Capped: pass:normal[xref:token/ERC20.adoc#ERC20Capped[`ERC20Capped`]] :xref-ERC20Capped: xref:token/ERC20.adoc#ERC20Capped :ERC20Capped-constructor: pass:normal[xref:token/ERC20.adoc#ERC20Capped-constructor-uint256-[`ERC20Capped.constructor`]] :xref-ERC20Capped-constructor: xref:token/ERC20.adoc#ERC20Capped-constructor-uint256- :ERC20Capped-cap: pass:normal[xref:token/ERC20.adoc#ERC20Capped-cap--[`ERC20Capped.cap`]] :xref-ERC20Capped-cap: xref:token/ERC20.adoc#ERC20Capped-cap-- :ERC20Capped-_mint: pass:normal[xref:token/ERC20.adoc#ERC20Capped-_mint-address-uint256-[`ERC20Capped._mint`]] :xref-ERC20Capped-_mint: xref:token/ERC20.adoc#ERC20Capped-_mint-address-uint256- :ERC20Detailed: pass:normal[xref:token/ERC20.adoc#ERC20Detailed[`ERC20Detailed`]] :xref-ERC20Detailed: xref:token/ERC20.adoc#ERC20Detailed :ERC20Detailed-constructor: pass:normal[xref:token/ERC20.adoc#ERC20Detailed-constructor-string-string-uint8-[`ERC20Detailed.constructor`]] :xref-ERC20Detailed-constructor: xref:token/ERC20.adoc#ERC20Detailed-constructor-string-string-uint8- :ERC20Detailed-name: pass:normal[xref:token/ERC20.adoc#ERC20Detailed-name--[`ERC20Detailed.name`]] :xref-ERC20Detailed-name: xref:token/ERC20.adoc#ERC20Detailed-name-- :ERC20Detailed-symbol: pass:normal[xref:token/ERC20.adoc#ERC20Detailed-symbol--[`ERC20Detailed.symbol`]] :xref-ERC20Detailed-symbol: xref:token/ERC20.adoc#ERC20Detailed-symbol-- :ERC20Detailed-decimals: pass:normal[xref:token/ERC20.adoc#ERC20Detailed-decimals--[`ERC20Detailed.decimals`]] :xref-ERC20Detailed-decimals: xref:token/ERC20.adoc#ERC20Detailed-decimals-- :ERC20Mintable: pass:normal[xref:token/ERC20.adoc#ERC20Mintable[`ERC20Mintable`]] :xref-ERC20Mintable: xref:token/ERC20.adoc#ERC20Mintable :ERC20Mintable-mint: pass:normal[xref:token/ERC20.adoc#ERC20Mintable-mint-address-uint256-[`ERC20Mintable.mint`]] :xref-ERC20Mintable-mint: xref:token/ERC20.adoc#ERC20Mintable-mint-address-uint256- :ERC20Pausable: pass:normal[xref:token/ERC20.adoc#ERC20Pausable[`ERC20Pausable`]] :xref-ERC20Pausable: xref:token/ERC20.adoc#ERC20Pausable :ERC20Pausable-transfer: pass:normal[xref:token/ERC20.adoc#ERC20Pausable-transfer-address-uint256-[`ERC20Pausable.transfer`]] :xref-ERC20Pausable-transfer: xref:token/ERC20.adoc#ERC20Pausable-transfer-address-uint256- :ERC20Pausable-transferFrom: pass:normal[xref:token/ERC20.adoc#ERC20Pausable-transferFrom-address-address-uint256-[`ERC20Pausable.transferFrom`]] :xref-ERC20Pausable-transferFrom: xref:token/ERC20.adoc#ERC20Pausable-transferFrom-address-address-uint256- :ERC20Pausable-approve: pass:normal[xref:token/ERC20.adoc#ERC20Pausable-approve-address-uint256-[`ERC20Pausable.approve`]] :xref-ERC20Pausable-approve: xref:token/ERC20.adoc#ERC20Pausable-approve-address-uint256- :ERC20Pausable-increaseAllowance: pass:normal[xref:token/ERC20.adoc#ERC20Pausable-increaseAllowance-address-uint256-[`ERC20Pausable.increaseAllowance`]] :xref-ERC20Pausable-increaseAllowance: xref:token/ERC20.adoc#ERC20Pausable-increaseAllowance-address-uint256- :ERC20Pausable-decreaseAllowance: pass:normal[xref:token/ERC20.adoc#ERC20Pausable-decreaseAllowance-address-uint256-[`ERC20Pausable.decreaseAllowance`]] :xref-ERC20Pausable-decreaseAllowance: xref:token/ERC20.adoc#ERC20Pausable-decreaseAllowance-address-uint256- :IERC20: pass:normal[xref:token/ERC20.adoc#IERC20[`IERC20`]] :xref-IERC20: xref:token/ERC20.adoc#IERC20 :IERC20-totalSupply: pass:normal[xref:token/ERC20.adoc#IERC20-totalSupply--[`IERC20.totalSupply`]] :xref-IERC20-totalSupply: xref:token/ERC20.adoc#IERC20-totalSupply-- :IERC20-balanceOf: pass:normal[xref:token/ERC20.adoc#IERC20-balanceOf-address-[`IERC20.balanceOf`]] :xref-IERC20-balanceOf: xref:token/ERC20.adoc#IERC20-balanceOf-address- :IERC20-transfer: pass:normal[xref:token/ERC20.adoc#IERC20-transfer-address-uint256-[`IERC20.transfer`]] :xref-IERC20-transfer: xref:token/ERC20.adoc#IERC20-transfer-address-uint256- :IERC20-allowance: pass:normal[xref:token/ERC20.adoc#IERC20-allowance-address-address-[`IERC20.allowance`]] :xref-IERC20-allowance: xref:token/ERC20.adoc#IERC20-allowance-address-address- :IERC20-approve: pass:normal[xref:token/ERC20.adoc#IERC20-approve-address-uint256-[`IERC20.approve`]] :xref-IERC20-approve: xref:token/ERC20.adoc#IERC20-approve-address-uint256- :IERC20-transferFrom: pass:normal[xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256-[`IERC20.transferFrom`]] :xref-IERC20-transferFrom: xref:token/ERC20.adoc#IERC20-transferFrom-address-address-uint256- :IERC20-Transfer: pass:normal[xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256-[`IERC20.Transfer`]] :xref-IERC20-Transfer: xref:token/ERC20.adoc#IERC20-Transfer-address-address-uint256- :IERC20-Approval: pass:normal[xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256-[`IERC20.Approval`]] :xref-IERC20-Approval: xref:token/ERC20.adoc#IERC20-Approval-address-address-uint256- :SafeERC20: pass:normal[xref:token/ERC20.adoc#SafeERC20[`SafeERC20`]] :xref-SafeERC20: xref:token/ERC20.adoc#SafeERC20 :SafeERC20-safeTransfer: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeTransfer-contract-IERC20-address-uint256-[`SafeERC20.safeTransfer`]] :xref-SafeERC20-safeTransfer: xref:token/ERC20.adoc#SafeERC20-safeTransfer-contract-IERC20-address-uint256- :SafeERC20-safeTransferFrom: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256-[`SafeERC20.safeTransferFrom`]] :xref-SafeERC20-safeTransferFrom: xref:token/ERC20.adoc#SafeERC20-safeTransferFrom-contract-IERC20-address-address-uint256- :SafeERC20-safeApprove: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeApprove-contract-IERC20-address-uint256-[`SafeERC20.safeApprove`]] :xref-SafeERC20-safeApprove: xref:token/ERC20.adoc#SafeERC20-safeApprove-contract-IERC20-address-uint256- :SafeERC20-safeIncreaseAllowance: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256-[`SafeERC20.safeIncreaseAllowance`]] :xref-SafeERC20-safeIncreaseAllowance: xref:token/ERC20.adoc#SafeERC20-safeIncreaseAllowance-contract-IERC20-address-uint256- :SafeERC20-safeDecreaseAllowance: pass:normal[xref:token/ERC20.adoc#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256-[`SafeERC20.safeDecreaseAllowance`]] :xref-SafeERC20-safeDecreaseAllowance: xref:token/ERC20.adoc#SafeERC20-safeDecreaseAllowance-contract-IERC20-address-uint256- :TokenTimelock: pass:normal[xref:token/ERC20.adoc#TokenTimelock[`TokenTimelock`]] :xref-TokenTimelock: xref:token/ERC20.adoc#TokenTimelock :TokenTimelock-constructor: pass:normal[xref:token/ERC20.adoc#TokenTimelock-constructor-contract-IERC20-address-uint256-[`TokenTimelock.constructor`]] :xref-TokenTimelock-constructor: xref:token/ERC20.adoc#TokenTimelock-constructor-contract-IERC20-address-uint256- :TokenTimelock-token: pass:normal[xref:token/ERC20.adoc#TokenTimelock-token--[`TokenTimelock.token`]] :xref-TokenTimelock-token: xref:token/ERC20.adoc#TokenTimelock-token-- :TokenTimelock-beneficiary: pass:normal[xref:token/ERC20.adoc#TokenTimelock-beneficiary--[`TokenTimelock.beneficiary`]] :xref-TokenTimelock-beneficiary: xref:token/ERC20.adoc#TokenTimelock-beneficiary-- :TokenTimelock-releaseTime: pass:normal[xref:token/ERC20.adoc#TokenTimelock-releaseTime--[`TokenTimelock.releaseTime`]] :xref-TokenTimelock-releaseTime: xref:token/ERC20.adoc#TokenTimelock-releaseTime-- :TokenTimelock-release: pass:normal[xref:token/ERC20.adoc#TokenTimelock-release--[`TokenTimelock.release`]] :xref-TokenTimelock-release: xref:token/ERC20.adoc#TokenTimelock-release-- :ERC777: pass:normal[xref:token/ERC777.adoc#ERC777[`ERC777`]] :xref-ERC777: xref:token/ERC777.adoc#ERC777 :ERC777-ERC1820_REGISTRY: pass:normal[xref:token/ERC777.adoc#ERC777-ERC1820_REGISTRY-contract-IERC1820Registry[`ERC777.ERC1820_REGISTRY`]] :xref-ERC777-ERC1820_REGISTRY: xref:token/ERC777.adoc#ERC777-ERC1820_REGISTRY-contract-IERC1820Registry :ERC777-constructor: pass:normal[xref:token/ERC777.adoc#ERC777-constructor-string-string-address---[`ERC777.constructor`]] :xref-ERC777-constructor: xref:token/ERC777.adoc#ERC777-constructor-string-string-address--- :ERC777-name: pass:normal[xref:token/ERC777.adoc#ERC777-name--[`ERC777.name`]] :xref-ERC777-name: xref:token/ERC777.adoc#ERC777-name-- :ERC777-symbol: pass:normal[xref:token/ERC777.adoc#ERC777-symbol--[`ERC777.symbol`]] :xref-ERC777-symbol: xref:token/ERC777.adoc#ERC777-symbol-- :ERC777-decimals: pass:normal[xref:token/ERC777.adoc#ERC777-decimals--[`ERC777.decimals`]] :xref-ERC777-decimals: xref:token/ERC777.adoc#ERC777-decimals-- :ERC777-granularity: pass:normal[xref:token/ERC777.adoc#ERC777-granularity--[`ERC777.granularity`]] :xref-ERC777-granularity: xref:token/ERC777.adoc#ERC777-granularity-- :ERC777-totalSupply: pass:normal[xref:token/ERC777.adoc#ERC777-totalSupply--[`ERC777.totalSupply`]] :xref-ERC777-totalSupply: xref:token/ERC777.adoc#ERC777-totalSupply-- :ERC777-balanceOf: pass:normal[xref:token/ERC777.adoc#ERC777-balanceOf-address-[`ERC777.balanceOf`]] :xref-ERC777-balanceOf: xref:token/ERC777.adoc#ERC777-balanceOf-address- :ERC777-send: pass:normal[xref:token/ERC777.adoc#ERC777-send-address-uint256-bytes-[`ERC777.send`]] :xref-ERC777-send: xref:token/ERC777.adoc#ERC777-send-address-uint256-bytes- :ERC777-transfer: pass:normal[xref:token/ERC777.adoc#ERC777-transfer-address-uint256-[`ERC777.transfer`]] :xref-ERC777-transfer: xref:token/ERC777.adoc#ERC777-transfer-address-uint256- :ERC777-burn: pass:normal[xref:token/ERC777.adoc#ERC777-burn-uint256-bytes-[`ERC777.burn`]] :xref-ERC777-burn: xref:token/ERC777.adoc#ERC777-burn-uint256-bytes- :ERC777-isOperatorFor: pass:normal[xref:token/ERC777.adoc#ERC777-isOperatorFor-address-address-[`ERC777.isOperatorFor`]] :xref-ERC777-isOperatorFor: xref:token/ERC777.adoc#ERC777-isOperatorFor-address-address- :ERC777-authorizeOperator: pass:normal[xref:token/ERC777.adoc#ERC777-authorizeOperator-address-[`ERC777.authorizeOperator`]] :xref-ERC777-authorizeOperator: xref:token/ERC777.adoc#ERC777-authorizeOperator-address- :ERC777-revokeOperator: pass:normal[xref:token/ERC777.adoc#ERC777-revokeOperator-address-[`ERC777.revokeOperator`]] :xref-ERC777-revokeOperator: xref:token/ERC777.adoc#ERC777-revokeOperator-address- :ERC777-defaultOperators: pass:normal[xref:token/ERC777.adoc#ERC777-defaultOperators--[`ERC777.defaultOperators`]] :xref-ERC777-defaultOperators: xref:token/ERC777.adoc#ERC777-defaultOperators-- :ERC777-operatorSend: pass:normal[xref:token/ERC777.adoc#ERC777-operatorSend-address-address-uint256-bytes-bytes-[`ERC777.operatorSend`]] :xref-ERC777-operatorSend: xref:token/ERC777.adoc#ERC777-operatorSend-address-address-uint256-bytes-bytes- :ERC777-operatorBurn: pass:normal[xref:token/ERC777.adoc#ERC777-operatorBurn-address-uint256-bytes-bytes-[`ERC777.operatorBurn`]] :xref-ERC777-operatorBurn: xref:token/ERC777.adoc#ERC777-operatorBurn-address-uint256-bytes-bytes- :ERC777-allowance: pass:normal[xref:token/ERC777.adoc#ERC777-allowance-address-address-[`ERC777.allowance`]] :xref-ERC777-allowance: xref:token/ERC777.adoc#ERC777-allowance-address-address- :ERC777-approve: pass:normal[xref:token/ERC777.adoc#ERC777-approve-address-uint256-[`ERC777.approve`]] :xref-ERC777-approve: xref:token/ERC777.adoc#ERC777-approve-address-uint256- :ERC777-transferFrom: pass:normal[xref:token/ERC777.adoc#ERC777-transferFrom-address-address-uint256-[`ERC777.transferFrom`]] :xref-ERC777-transferFrom: xref:token/ERC777.adoc#ERC777-transferFrom-address-address-uint256- :ERC777-_mint: pass:normal[xref:token/ERC777.adoc#ERC777-_mint-address-address-uint256-bytes-bytes-[`ERC777._mint`]] :xref-ERC777-_mint: xref:token/ERC777.adoc#ERC777-_mint-address-address-uint256-bytes-bytes- :ERC777-_send: pass:normal[xref:token/ERC777.adoc#ERC777-_send-address-address-address-uint256-bytes-bytes-bool-[`ERC777._send`]] :xref-ERC777-_send: xref:token/ERC777.adoc#ERC777-_send-address-address-address-uint256-bytes-bytes-bool- :ERC777-_burn: pass:normal[xref:token/ERC777.adoc#ERC777-_burn-address-address-uint256-bytes-bytes-[`ERC777._burn`]] :xref-ERC777-_burn: xref:token/ERC777.adoc#ERC777-_burn-address-address-uint256-bytes-bytes- :ERC777-_approve: pass:normal[xref:token/ERC777.adoc#ERC777-_approve-address-address-uint256-[`ERC777._approve`]] :xref-ERC777-_approve: xref:token/ERC777.adoc#ERC777-_approve-address-address-uint256- :ERC777-_callTokensToSend: pass:normal[xref:token/ERC777.adoc#ERC777-_callTokensToSend-address-address-address-uint256-bytes-bytes-[`ERC777._callTokensToSend`]] :xref-ERC777-_callTokensToSend: xref:token/ERC777.adoc#ERC777-_callTokensToSend-address-address-address-uint256-bytes-bytes- :ERC777-_callTokensReceived: pass:normal[xref:token/ERC777.adoc#ERC777-_callTokensReceived-address-address-address-uint256-bytes-bytes-bool-[`ERC777._callTokensReceived`]] :xref-ERC777-_callTokensReceived: xref:token/ERC777.adoc#ERC777-_callTokensReceived-address-address-address-uint256-bytes-bytes-bool- :IERC777: pass:normal[xref:token/ERC777.adoc#IERC777[`IERC777`]] :xref-IERC777: xref:token/ERC777.adoc#IERC777 :IERC777-name: pass:normal[xref:token/ERC777.adoc#IERC777-name--[`IERC777.name`]] :xref-IERC777-name: xref:token/ERC777.adoc#IERC777-name-- :IERC777-symbol: pass:normal[xref:token/ERC777.adoc#IERC777-symbol--[`IERC777.symbol`]] :xref-IERC777-symbol: xref:token/ERC777.adoc#IERC777-symbol-- :IERC777-granularity: pass:normal[xref:token/ERC777.adoc#IERC777-granularity--[`IERC777.granularity`]] :xref-IERC777-granularity: xref:token/ERC777.adoc#IERC777-granularity-- :IERC777-totalSupply: pass:normal[xref:token/ERC777.adoc#IERC777-totalSupply--[`IERC777.totalSupply`]] :xref-IERC777-totalSupply: xref:token/ERC777.adoc#IERC777-totalSupply-- :IERC777-balanceOf: pass:normal[xref:token/ERC777.adoc#IERC777-balanceOf-address-[`IERC777.balanceOf`]] :xref-IERC777-balanceOf: xref:token/ERC777.adoc#IERC777-balanceOf-address- :IERC777-send: pass:normal[xref:token/ERC777.adoc#IERC777-send-address-uint256-bytes-[`IERC777.send`]] :xref-IERC777-send: xref:token/ERC777.adoc#IERC777-send-address-uint256-bytes- :IERC777-burn: pass:normal[xref:token/ERC777.adoc#IERC777-burn-uint256-bytes-[`IERC777.burn`]] :xref-IERC777-burn: xref:token/ERC777.adoc#IERC777-burn-uint256-bytes- :IERC777-isOperatorFor: pass:normal[xref:token/ERC777.adoc#IERC777-isOperatorFor-address-address-[`IERC777.isOperatorFor`]] :xref-IERC777-isOperatorFor: xref:token/ERC777.adoc#IERC777-isOperatorFor-address-address- :IERC777-authorizeOperator: pass:normal[xref:token/ERC777.adoc#IERC777-authorizeOperator-address-[`IERC777.authorizeOperator`]] :xref-IERC777-authorizeOperator: xref:token/ERC777.adoc#IERC777-authorizeOperator-address- :IERC777-revokeOperator: pass:normal[xref:token/ERC777.adoc#IERC777-revokeOperator-address-[`IERC777.revokeOperator`]] :xref-IERC777-revokeOperator: xref:token/ERC777.adoc#IERC777-revokeOperator-address- :IERC777-defaultOperators: pass:normal[xref:token/ERC777.adoc#IERC777-defaultOperators--[`IERC777.defaultOperators`]] :xref-IERC777-defaultOperators: xref:token/ERC777.adoc#IERC777-defaultOperators-- :IERC777-operatorSend: pass:normal[xref:token/ERC777.adoc#IERC777-operatorSend-address-address-uint256-bytes-bytes-[`IERC777.operatorSend`]] :xref-IERC777-operatorSend: xref:token/ERC777.adoc#IERC777-operatorSend-address-address-uint256-bytes-bytes- :IERC777-operatorBurn: pass:normal[xref:token/ERC777.adoc#IERC777-operatorBurn-address-uint256-bytes-bytes-[`IERC777.operatorBurn`]] :xref-IERC777-operatorBurn: xref:token/ERC777.adoc#IERC777-operatorBurn-address-uint256-bytes-bytes- :IERC777-Sent: pass:normal[xref:token/ERC777.adoc#IERC777-Sent-address-address-address-uint256-bytes-bytes-[`IERC777.Sent`]] :xref-IERC777-Sent: xref:token/ERC777.adoc#IERC777-Sent-address-address-address-uint256-bytes-bytes- :IERC777-Minted: pass:normal[xref:token/ERC777.adoc#IERC777-Minted-address-address-uint256-bytes-bytes-[`IERC777.Minted`]] :xref-IERC777-Minted: xref:token/ERC777.adoc#IERC777-Minted-address-address-uint256-bytes-bytes- :IERC777-Burned: pass:normal[xref:token/ERC777.adoc#IERC777-Burned-address-address-uint256-bytes-bytes-[`IERC777.Burned`]] :xref-IERC777-Burned: xref:token/ERC777.adoc#IERC777-Burned-address-address-uint256-bytes-bytes- :IERC777-AuthorizedOperator: pass:normal[xref:token/ERC777.adoc#IERC777-AuthorizedOperator-address-address-[`IERC777.AuthorizedOperator`]] :xref-IERC777-AuthorizedOperator: xref:token/ERC777.adoc#IERC777-AuthorizedOperator-address-address- :IERC777-RevokedOperator: pass:normal[xref:token/ERC777.adoc#IERC777-RevokedOperator-address-address-[`IERC777.RevokedOperator`]] :xref-IERC777-RevokedOperator: xref:token/ERC777.adoc#IERC777-RevokedOperator-address-address- :IERC777Recipient: pass:normal[xref:token/ERC777.adoc#IERC777Recipient[`IERC777Recipient`]] :xref-IERC777Recipient: xref:token/ERC777.adoc#IERC777Recipient :IERC777Recipient-tokensReceived: pass:normal[xref:token/ERC777.adoc#IERC777Recipient-tokensReceived-address-address-address-uint256-bytes-bytes-[`IERC777Recipient.tokensReceived`]] :xref-IERC777Recipient-tokensReceived: xref:token/ERC777.adoc#IERC777Recipient-tokensReceived-address-address-address-uint256-bytes-bytes- :IERC777Sender: pass:normal[xref:token/ERC777.adoc#IERC777Sender[`IERC777Sender`]] :xref-IERC777Sender: xref:token/ERC777.adoc#IERC777Sender :IERC777Sender-tokensToSend: pass:normal[xref:token/ERC777.adoc#IERC777Sender-tokensToSend-address-address-address-uint256-bytes-bytes-[`IERC777Sender.tokensToSend`]] :xref-IERC777Sender-tokensToSend: xref:token/ERC777.adoc#IERC777Sender-tokensToSend-address-address-address-uint256-bytes-bytes- = Gas Station Network (GSN) _Available since v2.4.0._ This set of contracts provide all the tools required to make a contract callable via the https://gsn.openzeppelin.com[Gas Station Network]. TIP: If you're new to the GSN, head over to our xref:learn::sending-gasless-transactions.adoc[overview of the system] and basic guide to xref:ROOT:gsn.adoc[creating a GSN-capable contract]. The core contract a recipient must inherit from is {GSNRecipient}: it includes all necessary interfaces, as well as some helper methods to make interacting with the GSN easier. Utilities to make writing xref:ROOT:gsn-strategies.adoc[GSN strategies] easy are available in {GSNRecipient}, or you can simply use one of our pre-made strategies: * {GSNRecipientERC20Fee} charges the end user for gas costs in an application-specific xref:ROOT:tokens.adoc#ERC20[ERC20 token] * {GSNRecipientSignature} accepts all relayed calls that have been signed by a trusted third party (e.g. a private key in a backend) You can also take a look at the two contract interfaces that make up the GSN protocol: {IRelayRecipient} and {IRelayHub}, but you won't need to use those directly. == Recipient :GSNRecipient: pass:normal[xref:#GSNRecipient[`GSNRecipient`]] :POST_RELAYED_CALL_MAX_GAS: pass:normal[xref:#GSNRecipient-POST_RELAYED_CALL_MAX_GAS-uint256[`POST_RELAYED_CALL_MAX_GAS`]] :getHubAddr: pass:normal[xref:#GSNRecipient-getHubAddr--[`getHubAddr`]] :_upgradeRelayHub: pass:normal[xref:#GSNRecipient-_upgradeRelayHub-address-[`_upgradeRelayHub`]] :relayHubVersion: pass:normal[xref:#GSNRecipient-relayHubVersion--[`relayHubVersion`]] :_withdrawDeposits: pass:normal[xref:#GSNRecipient-_withdrawDeposits-uint256-address-payable-[`_withdrawDeposits`]] :_msgSender: pass:normal[xref:#GSNRecipient-_msgSender--[`_msgSender`]] :_msgData: pass:normal[xref:#GSNRecipient-_msgData--[`_msgData`]] :preRelayedCall: pass:normal[xref:#GSNRecipient-preRelayedCall-bytes-[`preRelayedCall`]] :_preRelayedCall: pass:normal[xref:#GSNRecipient-_preRelayedCall-bytes-[`_preRelayedCall`]] :postRelayedCall: pass:normal[xref:#GSNRecipient-postRelayedCall-bytes-bool-uint256-bytes32-[`postRelayedCall`]] :_postRelayedCall: pass:normal[xref:#GSNRecipient-_postRelayedCall-bytes-bool-uint256-bytes32-[`_postRelayedCall`]] :_approveRelayedCall: pass:normal[xref:#GSNRecipient-_approveRelayedCall--[`_approveRelayedCall`]] :_approveRelayedCall: pass:normal[xref:#GSNRecipient-_approveRelayedCall-bytes-[`_approveRelayedCall`]] :_rejectRelayedCall: pass:normal[xref:#GSNRecipient-_rejectRelayedCall-uint256-[`_rejectRelayedCall`]] :_computeCharge: pass:normal[xref:#GSNRecipient-_computeCharge-uint256-uint256-uint256-[`_computeCharge`]] :RelayHubChanged: pass:normal[xref:#GSNRecipient-RelayHubChanged-address-address-[`RelayHubChanged`]] [.contract] [[GSNRecipient]] === `GSNRecipient` Base GSN recipient contract: includes the {IRelayRecipient} interface and enables GSN support on all contracts in the inheritance tree. TIP: This contract is abstract. The functions {IRelayRecipient-acceptRelayedCall}, {_preRelayedCall}, and {_postRelayedCall} are not implemented and must be provided by derived contracts. See the xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategies] for more information on how to use the pre-built {GSNRecipientSignature} and {GSNRecipientERC20Fee}, or how to write your own. [.contract-index] .Functions -- * {xref-GSNRecipient-getHubAddr}[`getHubAddr()`] * {xref-GSNRecipient-_upgradeRelayHub}[`_upgradeRelayHub(newRelayHub)`] * {xref-GSNRecipient-relayHubVersion}[`relayHubVersion()`] * {xref-GSNRecipient-_withdrawDeposits}[`_withdrawDeposits(amount, payee)`] * {xref-GSNRecipient-_msgSender}[`_msgSender()`] * {xref-GSNRecipient-_msgData}[`_msgData()`] * {xref-GSNRecipient-preRelayedCall}[`preRelayedCall(context)`] * {xref-GSNRecipient-_preRelayedCall}[`_preRelayedCall(context)`] * {xref-GSNRecipient-postRelayedCall}[`postRelayedCall(context, success, actualCharge, preRetVal)`] * {xref-GSNRecipient-_postRelayedCall}[`_postRelayedCall(context, success, actualCharge, preRetVal)`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall()`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall(context)`] * {xref-GSNRecipient-_rejectRelayedCall}[`_rejectRelayedCall(errorCode)`] * {xref-GSNRecipient-_computeCharge}[`_computeCharge(gas, gasPrice, serviceFee)`] [.contract-subindex-inherited] .Context * {xref-Context-constructor}[`constructor()`] [.contract-subindex-inherited] .IRelayRecipient * {xref-IRelayRecipient-acceptRelayedCall}[`acceptRelayedCall(relay, from, encodedFunction, transactionFee, gasPrice, gasLimit, nonce, approvalData, maxPossibleCharge)`] -- [.contract-index] .Events -- * {xref-GSNRecipient-RelayHubChanged}[`RelayHubChanged(oldRelayHub, newRelayHub)`] [.contract-subindex-inherited] .Context [.contract-subindex-inherited] .IRelayRecipient -- [.contract-item] [[GSNRecipient-getHubAddr--]] ==== `pass:normal[getHubAddr() → [.var-type\]#address#]` [.item-kind]#public# Returns the address of the {IRelayHub} contract for this recipient. [.contract-item] [[GSNRecipient-_upgradeRelayHub-address-]] ==== `pass:normal[_upgradeRelayHub([.var-type\]#address# [.var-name\]#newRelayHub#)]` [.item-kind]#internal# Switches to a new {IRelayHub} instance. This method is added for future-proofing: there's no reason to not use the default instance. IMPORTANT: After upgrading, the {GSNRecipient} will no longer be able to receive relayed calls from the old {IRelayHub} instance. Additionally, all funds should be previously withdrawn via {_withdrawDeposits}. [.contract-item] [[GSNRecipient-relayHubVersion--]] ==== `pass:normal[relayHubVersion() → [.var-type\]#string#]` [.item-kind]#public# Returns the version string of the {IRelayHub} for which this recipient implementation was built. If {_upgradeRelayHub} is used, the new {IRelayHub} instance should be compatible with this version. [.contract-item] [[GSNRecipient-_withdrawDeposits-uint256-address-payable-]] ==== `pass:normal[_withdrawDeposits([.var-type\]#uint256# [.var-name\]#amount#, [.var-type\]#address payable# [.var-name\]#payee#)]` [.item-kind]#internal# Withdraws the recipient's deposits in `RelayHub`. Derived contracts should expose this in an external interface with proper access control. [.contract-item] [[GSNRecipient-_msgSender--]] ==== `pass:normal[_msgSender() → [.var-type\]#address payable#]` [.item-kind]#internal# Replacement for msg.sender. Returns the actual sender of a transaction: msg.sender for regular transactions, and the end-user for GSN relayed calls (where msg.sender is actually `RelayHub`). IMPORTANT: Contracts derived from {GSNRecipient} should never use `msg.sender`, and use {_msgSender} instead. [.contract-item] [[GSNRecipient-_msgData--]] ==== `pass:normal[_msgData() → [.var-type\]#bytes#]` [.item-kind]#internal# Replacement for msg.data. Returns the actual calldata of a transaction: msg.data for regular transactions, and a reduced version for GSN relayed calls (where msg.data contains additional information). IMPORTANT: Contracts derived from {GSNRecipient} should never use `msg.data`, and use {_msgData} instead. [.contract-item] [[GSNRecipient-preRelayedCall-bytes-]] ==== `pass:normal[preRelayedCall([.var-type\]#bytes# [.var-name\]#context#) → [.var-type\]#bytes32#]` [.item-kind]#external# See `IRelayRecipient.preRelayedCall`. This function should not be overriden directly, use `_preRelayedCall` instead. * Requirements: - the caller must be the `RelayHub` contract. [.contract-item] [[GSNRecipient-_preRelayedCall-bytes-]] ==== `pass:normal[_preRelayedCall([.var-type\]#bytes# [.var-name\]#context#) → [.var-type\]#bytes32#]` [.item-kind]#internal# See `IRelayRecipient.preRelayedCall`. Called by `GSNRecipient.preRelayedCall`, which asserts the caller is the `RelayHub` contract. Derived contracts must implement this function with any relayed-call preprocessing they may wish to do. [.contract-item] [[GSNRecipient-postRelayedCall-bytes-bool-uint256-bytes32-]] ==== `pass:normal[postRelayedCall([.var-type\]#bytes# [.var-name\]#context#, [.var-type\]#bool# [.var-name\]#success#, [.var-type\]#uint256# [.var-name\]#actualCharge#, [.var-type\]#bytes32# [.var-name\]#preRetVal#)]` [.item-kind]#external# See `IRelayRecipient.postRelayedCall`. This function should not be overriden directly, use `_postRelayedCall` instead. * Requirements: - the caller must be the `RelayHub` contract. [.contract-item] [[GSNRecipient-_postRelayedCall-bytes-bool-uint256-bytes32-]] ==== `pass:normal[_postRelayedCall([.var-type\]#bytes# [.var-name\]#context#, [.var-type\]#bool# [.var-name\]#success#, [.var-type\]#uint256# [.var-name\]#actualCharge#, [.var-type\]#bytes32# [.var-name\]#preRetVal#)]` [.item-kind]#internal# See `IRelayRecipient.postRelayedCall`. Called by `GSNRecipient.postRelayedCall`, which asserts the caller is the `RelayHub` contract. Derived contracts must implement this function with any relayed-call postprocessing they may wish to do. [.contract-item] [[GSNRecipient-_approveRelayedCall--]] ==== `pass:normal[_approveRelayedCall() → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#internal# Return this in acceptRelayedCall to proceed with the execution of a relayed call. Note that this contract will be charged a fee by RelayHub [.contract-item] [[GSNRecipient-_approveRelayedCall-bytes-]] ==== `pass:normal[_approveRelayedCall([.var-type\]#bytes# [.var-name\]#context#) → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#internal# See `GSNRecipient._approveRelayedCall`. This overload forwards `context` to _preRelayedCall and _postRelayedCall. [.contract-item] [[GSNRecipient-_rejectRelayedCall-uint256-]] ==== `pass:normal[_rejectRelayedCall([.var-type\]#uint256# [.var-name\]#errorCode#) → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#internal# Return this in acceptRelayedCall to impede execution of a relayed call. No fees will be charged. [.contract-item] [[GSNRecipient-_computeCharge-uint256-uint256-uint256-]] ==== `pass:normal[_computeCharge([.var-type\]#uint256# [.var-name\]#gas#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#serviceFee#) → [.var-type\]#uint256#]` [.item-kind]#internal# [.contract-item] [[GSNRecipient-RelayHubChanged-address-address-]] ==== `pass:normal[RelayHubChanged([.var-type\]#address# [.var-name\]#oldRelayHub#, [.var-type\]#address# [.var-name\]#newRelayHub#)]` [.item-kind]#event# Emitted when a contract changes its {IRelayHub} contract to a new one. == Strategies :GSNRecipientSignature: pass:normal[xref:#GSNRecipientSignature[`GSNRecipientSignature`]] :constructor: pass:normal[xref:#GSNRecipientSignature-constructor-address-[`constructor`]] :acceptRelayedCall: pass:normal[xref:#GSNRecipientSignature-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`acceptRelayedCall`]] :_preRelayedCall: pass:normal[xref:#GSNRecipientSignature-_preRelayedCall-bytes-[`_preRelayedCall`]] :_postRelayedCall: pass:normal[xref:#GSNRecipientSignature-_postRelayedCall-bytes-bool-uint256-bytes32-[`_postRelayedCall`]] [.contract] [[GSNRecipientSignature]] === `GSNRecipientSignature` A xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategy] that allows relayed transactions through when they are accompanied by the signature of a trusted signer. The intent is for this signature to be generated by a server that performs validations off-chain. Note that nothing is charged to the user in this scheme. Thus, the server should make sure to account for this in their economic and threat model. [.contract-index] .Functions -- * {xref-GSNRecipientSignature-constructor}[`constructor(trustedSigner)`] * {xref-GSNRecipientSignature-acceptRelayedCall}[`acceptRelayedCall(relay, from, encodedFunction, transactionFee, gasPrice, gasLimit, nonce, approvalData, _)`] * {xref-GSNRecipientSignature-_preRelayedCall}[`_preRelayedCall(_)`] * {xref-GSNRecipientSignature-_postRelayedCall}[`_postRelayedCall(_, _, _, _)`] [.contract-subindex-inherited] .GSNRecipient * {xref-GSNRecipient-getHubAddr}[`getHubAddr()`] * {xref-GSNRecipient-_upgradeRelayHub}[`_upgradeRelayHub(newRelayHub)`] * {xref-GSNRecipient-relayHubVersion}[`relayHubVersion()`] * {xref-GSNRecipient-_withdrawDeposits}[`_withdrawDeposits(amount, payee)`] * {xref-GSNRecipient-_msgSender}[`_msgSender()`] * {xref-GSNRecipient-_msgData}[`_msgData()`] * {xref-GSNRecipient-preRelayedCall}[`preRelayedCall(context)`] * {xref-GSNRecipient-postRelayedCall}[`postRelayedCall(context, success, actualCharge, preRetVal)`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall()`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall(context)`] * {xref-GSNRecipient-_rejectRelayedCall}[`_rejectRelayedCall(errorCode)`] * {xref-GSNRecipient-_computeCharge}[`_computeCharge(gas, gasPrice, serviceFee)`] [.contract-subindex-inherited] .Context [.contract-subindex-inherited] .IRelayRecipient -- [.contract-index] .Events -- [.contract-subindex-inherited] .GSNRecipient * {xref-GSNRecipient-RelayHubChanged}[`RelayHubChanged(oldRelayHub, newRelayHub)`] [.contract-subindex-inherited] .Context [.contract-subindex-inherited] .IRelayRecipient -- [.contract-item] [[GSNRecipientSignature-constructor-address-]] ==== `pass:normal[constructor([.var-type\]#address# [.var-name\]#trustedSigner#)]` [.item-kind]#public# Sets the trusted signer that is going to be producing signatures to approve relayed calls. [.contract-item] [[GSNRecipientSignature-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-]] ==== `pass:normal[acceptRelayedCall([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#bytes# [.var-name\]#encodedFunction#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#gasLimit#, [.var-type\]#uint256# [.var-name\]#nonce#, [.var-type\]#bytes# [.var-name\]#approvalData#, [.var-type\]#uint256#) → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#external# Ensures that only transactions with a trusted signature can be relayed through the GSN. [.contract-item] [[GSNRecipientSignature-_preRelayedCall-bytes-]] ==== `pass:normal[_preRelayedCall([.var-type\]#bytes#) → [.var-type\]#bytes32#]` [.item-kind]#internal# [.contract-item] [[GSNRecipientSignature-_postRelayedCall-bytes-bool-uint256-bytes32-]] ==== `pass:normal[_postRelayedCall([.var-type\]#bytes#, [.var-type\]#bool#, [.var-type\]#uint256#, [.var-type\]#bytes32#)]` [.item-kind]#internal# :GSNRecipientERC20Fee: pass:normal[xref:#GSNRecipientERC20Fee[`GSNRecipientERC20Fee`]] :constructor: pass:normal[xref:#GSNRecipientERC20Fee-constructor-string-string-[`constructor`]] :token: pass:normal[xref:#GSNRecipientERC20Fee-token--[`token`]] :_mint: pass:normal[xref:#GSNRecipientERC20Fee-_mint-address-uint256-[`_mint`]] :acceptRelayedCall: pass:normal[xref:#GSNRecipientERC20Fee-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`acceptRelayedCall`]] :_preRelayedCall: pass:normal[xref:#GSNRecipientERC20Fee-_preRelayedCall-bytes-[`_preRelayedCall`]] :_postRelayedCall: pass:normal[xref:#GSNRecipientERC20Fee-_postRelayedCall-bytes-bool-uint256-bytes32-[`_postRelayedCall`]] [.contract] [[GSNRecipientERC20Fee]] === `GSNRecipientERC20Fee` A xref:ROOT:gsn-strategies.adoc#gsn-strategies[GSN strategy] that charges transaction fees in a special purpose ERC20 token, which we refer to as the gas payment token. The amount charged is exactly the amount of Ether charged to the recipient. This means that the token is essentially pegged to the value of Ether. The distribution strategy of the gas payment token to users is not defined by this contract. It's a mintable token whose only minter is the recipient, so the strategy must be implemented in a derived contract, making use of the internal {_mint} function. [.contract-index] .Functions -- * {xref-GSNRecipientERC20Fee-constructor}[`constructor(name, symbol)`] * {xref-GSNRecipientERC20Fee-token}[`token()`] * {xref-GSNRecipientERC20Fee-_mint}[`_mint(account, amount)`] * {xref-GSNRecipientERC20Fee-acceptRelayedCall}[`acceptRelayedCall(_, from, _, transactionFee, gasPrice, _, _, _, maxPossibleCharge)`] * {xref-GSNRecipientERC20Fee-_preRelayedCall}[`_preRelayedCall(context)`] * {xref-GSNRecipientERC20Fee-_postRelayedCall}[`_postRelayedCall(context, _, actualCharge, _)`] [.contract-subindex-inherited] .GSNRecipient * {xref-GSNRecipient-getHubAddr}[`getHubAddr()`] * {xref-GSNRecipient-_upgradeRelayHub}[`_upgradeRelayHub(newRelayHub)`] * {xref-GSNRecipient-relayHubVersion}[`relayHubVersion()`] * {xref-GSNRecipient-_withdrawDeposits}[`_withdrawDeposits(amount, payee)`] * {xref-GSNRecipient-_msgSender}[`_msgSender()`] * {xref-GSNRecipient-_msgData}[`_msgData()`] * {xref-GSNRecipient-preRelayedCall}[`preRelayedCall(context)`] * {xref-GSNRecipient-postRelayedCall}[`postRelayedCall(context, success, actualCharge, preRetVal)`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall()`] * {xref-GSNRecipient-_approveRelayedCall}[`_approveRelayedCall(context)`] * {xref-GSNRecipient-_rejectRelayedCall}[`_rejectRelayedCall(errorCode)`] * {xref-GSNRecipient-_computeCharge}[`_computeCharge(gas, gasPrice, serviceFee)`] [.contract-subindex-inherited] .Context [.contract-subindex-inherited] .IRelayRecipient -- [.contract-index] .Events -- [.contract-subindex-inherited] .GSNRecipient * {xref-GSNRecipient-RelayHubChanged}[`RelayHubChanged(oldRelayHub, newRelayHub)`] [.contract-subindex-inherited] .Context [.contract-subindex-inherited] .IRelayRecipient -- [.contract-item] [[GSNRecipientERC20Fee-constructor-string-string-]] ==== `pass:normal[constructor([.var-type\]#string# [.var-name\]#name#, [.var-type\]#string# [.var-name\]#symbol#)]` [.item-kind]#public# The arguments to the constructor are the details that the gas payment token will have: `name` and `symbol`. `decimals` is hard-coded to 18. [.contract-item] [[GSNRecipientERC20Fee-token--]] ==== `pass:normal[token() → [.var-type\]#contract IERC20#]` [.item-kind]#public# Returns the gas payment token. [.contract-item] [[GSNRecipientERC20Fee-_mint-address-uint256-]] ==== `pass:normal[_mint([.var-type\]#address# [.var-name\]#account#, [.var-type\]#uint256# [.var-name\]#amount#)]` [.item-kind]#internal# Internal function that mints the gas payment token. Derived contracts should expose this function in their public API, with proper access control mechanisms. [.contract-item] [[GSNRecipientERC20Fee-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-]] ==== `pass:normal[acceptRelayedCall([.var-type\]#address#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#bytes#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256#, [.var-type\]#uint256#, [.var-type\]#bytes#, [.var-type\]#uint256# [.var-name\]#maxPossibleCharge#) → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#external# Ensures that only users with enough gas payment token balance can have transactions relayed through the GSN. [.contract-item] [[GSNRecipientERC20Fee-_preRelayedCall-bytes-]] ==== `pass:normal[_preRelayedCall([.var-type\]#bytes# [.var-name\]#context#) → [.var-type\]#bytes32#]` [.item-kind]#internal# Implements the precharge to the user. The maximum possible charge (depending on gas limit, gas price, and fee) will be deducted from the user balance of gas payment token. Note that this is an overestimation of the actual charge, necessary because we cannot predict how much gas the execution will actually need. The remainder is returned to the user in {_postRelayedCall}. [.contract-item] [[GSNRecipientERC20Fee-_postRelayedCall-bytes-bool-uint256-bytes32-]] ==== `pass:normal[_postRelayedCall([.var-type\]#bytes# [.var-name\]#context#, [.var-type\]#bool#, [.var-type\]#uint256# [.var-name\]#actualCharge#, [.var-type\]#bytes32#)]` [.item-kind]#internal# Returns to the user the extra amount that was previously charged, once the actual execution cost is known. == Protocol :IRelayRecipient: pass:normal[xref:#IRelayRecipient[`IRelayRecipient`]] :getHubAddr: pass:normal[xref:#IRelayRecipient-getHubAddr--[`getHubAddr`]] :acceptRelayedCall: pass:normal[xref:#IRelayRecipient-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-[`acceptRelayedCall`]] :preRelayedCall: pass:normal[xref:#IRelayRecipient-preRelayedCall-bytes-[`preRelayedCall`]] :postRelayedCall: pass:normal[xref:#IRelayRecipient-postRelayedCall-bytes-bool-uint256-bytes32-[`postRelayedCall`]] [.contract] [[IRelayRecipient]] === `IRelayRecipient` Base interface for a contract that will be called via the GSN from {IRelayHub}. TIP: You don't need to write an implementation yourself! Inherit from {GSNRecipient} instead. [.contract-index] .Functions -- * {xref-IRelayRecipient-getHubAddr}[`getHubAddr()`] * {xref-IRelayRecipient-acceptRelayedCall}[`acceptRelayedCall(relay, from, encodedFunction, transactionFee, gasPrice, gasLimit, nonce, approvalData, maxPossibleCharge)`] * {xref-IRelayRecipient-preRelayedCall}[`preRelayedCall(context)`] * {xref-IRelayRecipient-postRelayedCall}[`postRelayedCall(context, success, actualCharge, preRetVal)`] -- [.contract-item] [[IRelayRecipient-getHubAddr--]] ==== `pass:normal[getHubAddr() → [.var-type\]#address#]` [.item-kind]#external# Returns the address of the {IRelayHub} instance this recipient interacts with. [.contract-item] [[IRelayRecipient-acceptRelayedCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-uint256-]] ==== `pass:normal[acceptRelayedCall([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#bytes# [.var-name\]#encodedFunction#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#gasLimit#, [.var-type\]#uint256# [.var-name\]#nonce#, [.var-type\]#bytes# [.var-name\]#approvalData#, [.var-type\]#uint256# [.var-name\]#maxPossibleCharge#) → [.var-type\]#uint256#, [.var-type\]#bytes#]` [.item-kind]#external# Called by {IRelayHub} to validate if this recipient accepts being charged for a relayed call. Note that the recipient will be charged regardless of the execution result of the relayed call (i.e. if it reverts or not). The relay request was originated by `from` and will be served by `relay`. `encodedFunction` is the relayed call calldata, so its first four bytes are the function selector. The relayed call will be forwarded `gasLimit` gas, and the transaction executed with a gas price of at least `gasPrice`. `relay`'s fee is `transactionFee`, and the recipient will be charged at most `maxPossibleCharge` (in wei). `nonce` is the sender's (`from`) nonce for replay attack protection in {IRelayHub}, and `approvalData` is a optional parameter that can be used to hold a signature over all or some of the previous values. Returns a tuple, where the first value is used to indicate approval (0) or rejection (custom non-zero error code, values 1 to 10 are reserved) and the second one is data to be passed to the other {IRelayRecipient} functions. {acceptRelayedCall} is called with 50k gas: if it runs out during execution, the request will be considered rejected. A regular revert will also trigger a rejection. [.contract-item] [[IRelayRecipient-preRelayedCall-bytes-]] ==== `pass:normal[preRelayedCall([.var-type\]#bytes# [.var-name\]#context#) → [.var-type\]#bytes32#]` [.item-kind]#external# Called by {IRelayHub} on approved relay call requests, before the relayed call is executed. This allows to e.g. pre-charge the sender of the transaction. `context` is the second value returned in the tuple by {acceptRelayedCall}. Returns a value to be passed to {postRelayedCall}. {preRelayedCall} is called with 100k gas: if it runs out during exection or otherwise reverts, the relayed call will not be executed, but the recipient will still be charged for the transaction's cost. [.contract-item] [[IRelayRecipient-postRelayedCall-bytes-bool-uint256-bytes32-]] ==== `pass:normal[postRelayedCall([.var-type\]#bytes# [.var-name\]#context#, [.var-type\]#bool# [.var-name\]#success#, [.var-type\]#uint256# [.var-name\]#actualCharge#, [.var-type\]#bytes32# [.var-name\]#preRetVal#)]` [.item-kind]#external# Called by {IRelayHub} on approved relay call requests, after the relayed call is executed. This allows to e.g. charge the user for the relayed call costs, return any overcharges from {preRelayedCall}, or perform contract-specific bookkeeping. `context` is the second value returned in the tuple by {acceptRelayedCall}. `success` is the execution status of the relayed call. `actualCharge` is an estimate of how much the recipient will be charged for the transaction, not including any gas used by {postRelayedCall} itself. `preRetVal` is {preRelayedCall}'s return value. {postRelayedCall} is called with 100k gas: if it runs out during execution or otherwise reverts, the relayed call and the call to {preRelayedCall} will be reverted retroactively, but the recipient will still be charged for the transaction's cost. :IRelayHub: pass:normal[xref:#IRelayHub[`IRelayHub`]] :stake: pass:normal[xref:#IRelayHub-stake-address-uint256-[`stake`]] :registerRelay: pass:normal[xref:#IRelayHub-registerRelay-uint256-string-[`registerRelay`]] :removeRelayByOwner: pass:normal[xref:#IRelayHub-removeRelayByOwner-address-[`removeRelayByOwner`]] :unstake: pass:normal[xref:#IRelayHub-unstake-address-[`unstake`]] :getRelay: pass:normal[xref:#IRelayHub-getRelay-address-[`getRelay`]] :depositFor: pass:normal[xref:#IRelayHub-depositFor-address-[`depositFor`]] :balanceOf: pass:normal[xref:#IRelayHub-balanceOf-address-[`balanceOf`]] :withdraw: pass:normal[xref:#IRelayHub-withdraw-uint256-address-payable-[`withdraw`]] :canRelay: pass:normal[xref:#IRelayHub-canRelay-address-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-[`canRelay`]] :relayCall: pass:normal[xref:#IRelayHub-relayCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-[`relayCall`]] :requiredGas: pass:normal[xref:#IRelayHub-requiredGas-uint256-[`requiredGas`]] :maxPossibleCharge: pass:normal[xref:#IRelayHub-maxPossibleCharge-uint256-uint256-uint256-[`maxPossibleCharge`]] :penalizeRepeatedNonce: pass:normal[xref:#IRelayHub-penalizeRepeatedNonce-bytes-bytes-bytes-bytes-[`penalizeRepeatedNonce`]] :penalizeIllegalTransaction: pass:normal[xref:#IRelayHub-penalizeIllegalTransaction-bytes-bytes-[`penalizeIllegalTransaction`]] :getNonce: pass:normal[xref:#IRelayHub-getNonce-address-[`getNonce`]] :Staked: pass:normal[xref:#IRelayHub-Staked-address-uint256-uint256-[`Staked`]] :RelayAdded: pass:normal[xref:#IRelayHub-RelayAdded-address-address-uint256-uint256-uint256-string-[`RelayAdded`]] :RelayRemoved: pass:normal[xref:#IRelayHub-RelayRemoved-address-uint256-[`RelayRemoved`]] :Unstaked: pass:normal[xref:#IRelayHub-Unstaked-address-uint256-[`Unstaked`]] :Deposited: pass:normal[xref:#IRelayHub-Deposited-address-address-uint256-[`Deposited`]] :Withdrawn: pass:normal[xref:#IRelayHub-Withdrawn-address-address-uint256-[`Withdrawn`]] :CanRelayFailed: pass:normal[xref:#IRelayHub-CanRelayFailed-address-address-address-bytes4-uint256-[`CanRelayFailed`]] :TransactionRelayed: pass:normal[xref:#IRelayHub-TransactionRelayed-address-address-address-bytes4-enum-IRelayHub-RelayCallStatus-uint256-[`TransactionRelayed`]] :Penalized: pass:normal[xref:#IRelayHub-Penalized-address-address-uint256-[`Penalized`]] [.contract] [[IRelayHub]] === `IRelayHub` Interface for `RelayHub`, the core contract of the GSN. Users should not need to interact with this contract directly. See the https://github.com/OpenZeppelin/openzeppelin-gsn-helpers[OpenZeppelin GSN helpers] for more information on how to deploy an instance of `RelayHub` on your local test network. [.contract-index] .Functions -- * {xref-IRelayHub-stake}[`stake(relayaddr, unstakeDelay)`] * {xref-IRelayHub-registerRelay}[`registerRelay(transactionFee, url)`] * {xref-IRelayHub-removeRelayByOwner}[`removeRelayByOwner(relay)`] * {xref-IRelayHub-unstake}[`unstake(relay)`] * {xref-IRelayHub-getRelay}[`getRelay(relay)`] * {xref-IRelayHub-depositFor}[`depositFor(target)`] * {xref-IRelayHub-balanceOf}[`balanceOf(target)`] * {xref-IRelayHub-withdraw}[`withdraw(amount, dest)`] * {xref-IRelayHub-canRelay}[`canRelay(relay, from, to, encodedFunction, transactionFee, gasPrice, gasLimit, nonce, signature, approvalData)`] * {xref-IRelayHub-relayCall}[`relayCall(from, to, encodedFunction, transactionFee, gasPrice, gasLimit, nonce, signature, approvalData)`] * {xref-IRelayHub-requiredGas}[`requiredGas(relayedCallStipend)`] * {xref-IRelayHub-maxPossibleCharge}[`maxPossibleCharge(relayedCallStipend, gasPrice, transactionFee)`] * {xref-IRelayHub-penalizeRepeatedNonce}[`penalizeRepeatedNonce(unsignedTx1, signature1, unsignedTx2, signature2)`] * {xref-IRelayHub-penalizeIllegalTransaction}[`penalizeIllegalTransaction(unsignedTx, signature)`] * {xref-IRelayHub-getNonce}[`getNonce(from)`] -- [.contract-index] .Events -- * {xref-IRelayHub-Staked}[`Staked(relay, stake, unstakeDelay)`] * {xref-IRelayHub-RelayAdded}[`RelayAdded(relay, owner, transactionFee, stake, unstakeDelay, url)`] * {xref-IRelayHub-RelayRemoved}[`RelayRemoved(relay, unstakeTime)`] * {xref-IRelayHub-Unstaked}[`Unstaked(relay, stake)`] * {xref-IRelayHub-Deposited}[`Deposited(recipient, from, amount)`] * {xref-IRelayHub-Withdrawn}[`Withdrawn(account, dest, amount)`] * {xref-IRelayHub-CanRelayFailed}[`CanRelayFailed(relay, from, to, selector, reason)`] * {xref-IRelayHub-TransactionRelayed}[`TransactionRelayed(relay, from, to, selector, status, charge)`] * {xref-IRelayHub-Penalized}[`Penalized(relay, sender, amount)`] -- [.contract-item] [[IRelayHub-stake-address-uint256-]] ==== `pass:normal[stake([.var-type\]#address# [.var-name\]#relayaddr#, [.var-type\]#uint256# [.var-name\]#unstakeDelay#)]` [.item-kind]#external# Adds stake to a relay and sets its `unstakeDelay`. If the relay does not exist, it is created, and the caller of this function becomes its owner. If the relay already exists, only the owner can call this function. A relay cannot be its own owner. All Ether in this function call will be added to the relay's stake. Its unstake delay will be assigned to `unstakeDelay`, but the new value must be greater or equal to the current one. Emits a {Staked} event. [.contract-item] [[IRelayHub-registerRelay-uint256-string-]] ==== `pass:normal[registerRelay([.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#string# [.var-name\]#url#)]` [.item-kind]#external# Registers the caller as a relay. The relay must be staked for, and not be a contract (i.e. this function must be called directly from an EOA). This function can be called multiple times, emitting new {RelayAdded} events. Note that the received `transactionFee` is not enforced by {relayCall}. Emits a {RelayAdded} event. [.contract-item] [[IRelayHub-removeRelayByOwner-address-]] ==== `pass:normal[removeRelayByOwner([.var-type\]#address# [.var-name\]#relay#)]` [.item-kind]#external# Removes (deregisters) a relay. Unregistered (but staked for) relays can also be removed. Can only be called by the owner of the relay. After the relay's `unstakeDelay` has elapsed, {unstake} will be callable. Emits a {RelayRemoved} event. [.contract-item] [[IRelayHub-unstake-address-]] ==== `pass:normal[unstake([.var-type\]#address# [.var-name\]#relay#)]` [.item-kind]#external# [.contract-item] [[IRelayHub-getRelay-address-]] ==== `pass:normal[getRelay([.var-type\]#address# [.var-name\]#relay#) → [.var-type\]#uint256# [.var-name\]#totalStake#, [.var-type\]#uint256# [.var-name\]#unstakeDelay#, [.var-type\]#uint256# [.var-name\]#unstakeTime#, [.var-type\]#address payable# [.var-name\]#owner#, [.var-type\]#enum IRelayHub.RelayState# [.var-name\]#state#]` [.item-kind]#external# Returns a relay's status. Note that relays can be deleted when unstaked or penalized, causing this function to return an empty entry. [.contract-item] [[IRelayHub-depositFor-address-]] ==== `pass:normal[depositFor([.var-type\]#address# [.var-name\]#target#)]` [.item-kind]#external# Deposits Ether for a contract, so that it can receive (and pay for) relayed transactions. Unused balance can only be withdrawn by the contract itself, by calling {withdraw}. Emits a {Deposited} event. [.contract-item] [[IRelayHub-balanceOf-address-]] ==== `pass:normal[balanceOf([.var-type\]#address# [.var-name\]#target#) → [.var-type\]#uint256#]` [.item-kind]#external# Returns an account's deposits. These can be either a contracts's funds, or a relay owner's revenue. [.contract-item] [[IRelayHub-withdraw-uint256-address-payable-]] ==== `pass:normal[withdraw([.var-type\]#uint256# [.var-name\]#amount#, [.var-type\]#address payable# [.var-name\]#dest#)]` [.item-kind]#external# [.contract-item] [[IRelayHub-canRelay-address-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-]] ==== `pass:normal[canRelay([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#address# [.var-name\]#to#, [.var-type\]#bytes# [.var-name\]#encodedFunction#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#gasLimit#, [.var-type\]#uint256# [.var-name\]#nonce#, [.var-type\]#bytes# [.var-name\]#signature#, [.var-type\]#bytes# [.var-name\]#approvalData#) → [.var-type\]#uint256# [.var-name\]#status#, [.var-type\]#bytes# [.var-name\]#recipientContext#]` [.item-kind]#external# Checks if the `RelayHub` will accept a relayed operation. Multiple things must be true for this to happen: - all arguments must be signed for by the sender (`from`) - the sender's nonce must be the current one - the recipient must accept this transaction (via {acceptRelayedCall}) Returns a `PreconditionCheck` value (`OK` when the transaction can be relayed), or a recipient-specific error code if it returns one in {acceptRelayedCall}. [.contract-item] [[IRelayHub-relayCall-address-address-bytes-uint256-uint256-uint256-uint256-bytes-bytes-]] ==== `pass:normal[relayCall([.var-type\]#address# [.var-name\]#from#, [.var-type\]#address# [.var-name\]#to#, [.var-type\]#bytes# [.var-name\]#encodedFunction#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#gasLimit#, [.var-type\]#uint256# [.var-name\]#nonce#, [.var-type\]#bytes# [.var-name\]#signature#, [.var-type\]#bytes# [.var-name\]#approvalData#)]` [.item-kind]#external# Relays a transaction. For this to succeed, multiple conditions must be met: - {canRelay} must `return PreconditionCheck.OK` - the sender must be a registered relay - the transaction's gas price must be larger or equal to the one that was requested by the sender - the transaction must have enough gas to not run out of gas if all internal transactions (calls to the recipient) use all gas available to them - the recipient must have enough balance to pay the relay for the worst-case scenario (i.e. when all gas is spent) If all conditions are met, the call will be relayed and the recipient charged. {preRelayedCall}, the encoded function and {postRelayedCall} will be called in that order. Parameters: - `from`: the client originating the request - `to`: the target {IRelayRecipient} contract - `encodedFunction`: the function call to relay, including data - `transactionFee`: fee (%) the relay takes over actual gas cost - `gasPrice`: gas price the client is willing to pay - `gasLimit`: gas to forward when calling the encoded function - `nonce`: client's nonce - `signature`: client's signature over all previous params, plus the relay and RelayHub addresses - `approvalData`: dapp-specific data forwared to {acceptRelayedCall}. This value is *not* verified by the `RelayHub`, but it still can be used for e.g. a signature. Emits a {TransactionRelayed} event. [.contract-item] [[IRelayHub-requiredGas-uint256-]] ==== `pass:normal[requiredGas([.var-type\]#uint256# [.var-name\]#relayedCallStipend#) → [.var-type\]#uint256#]` [.item-kind]#external# Returns how much gas should be forwarded to a call to {relayCall}, in order to relay a transaction that will spend up to `relayedCallStipend` gas. [.contract-item] [[IRelayHub-maxPossibleCharge-uint256-uint256-uint256-]] ==== `pass:normal[maxPossibleCharge([.var-type\]#uint256# [.var-name\]#relayedCallStipend#, [.var-type\]#uint256# [.var-name\]#gasPrice#, [.var-type\]#uint256# [.var-name\]#transactionFee#) → [.var-type\]#uint256#]` [.item-kind]#external# Returns the maximum recipient charge, given the amount of gas forwarded, gas price and relay fee. [.contract-item] [[IRelayHub-penalizeRepeatedNonce-bytes-bytes-bytes-bytes-]] ==== `pass:normal[penalizeRepeatedNonce([.var-type\]#bytes# [.var-name\]#unsignedTx1#, [.var-type\]#bytes# [.var-name\]#signature1#, [.var-type\]#bytes# [.var-name\]#unsignedTx2#, [.var-type\]#bytes# [.var-name\]#signature2#)]` [.item-kind]#external# Penalize a relay that signed two transactions using the same nonce (making only the first one valid) and different data (gas price, gas limit, etc. may be different). The (unsigned) transaction data and signature for both transactions must be provided. [.contract-item] [[IRelayHub-penalizeIllegalTransaction-bytes-bytes-]] ==== `pass:normal[penalizeIllegalTransaction([.var-type\]#bytes# [.var-name\]#unsignedTx#, [.var-type\]#bytes# [.var-name\]#signature#)]` [.item-kind]#external# Penalize a relay that sent a transaction that didn't target `RelayHub`'s {registerRelay} or {relayCall}. [.contract-item] [[IRelayHub-getNonce-address-]] ==== `pass:normal[getNonce([.var-type\]#address# [.var-name\]#from#) → [.var-type\]#uint256#]` [.item-kind]#external# Returns an account's nonce in `RelayHub`. [.contract-item] [[IRelayHub-Staked-address-uint256-uint256-]] ==== `pass:normal[Staked([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#uint256# [.var-name\]#stake#, [.var-type\]#uint256# [.var-name\]#unstakeDelay#)]` [.item-kind]#event# Emitted when a relay's stake or unstakeDelay are increased [.contract-item] [[IRelayHub-RelayAdded-address-address-uint256-uint256-uint256-string-]] ==== `pass:normal[RelayAdded([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#owner#, [.var-type\]#uint256# [.var-name\]#transactionFee#, [.var-type\]#uint256# [.var-name\]#stake#, [.var-type\]#uint256# [.var-name\]#unstakeDelay#, [.var-type\]#string# [.var-name\]#url#)]` [.item-kind]#event# Emitted when a relay is registered or re-registerd. Looking at these events (and filtering out {RelayRemoved} events) lets a client discover the list of available relays. [.contract-item] [[IRelayHub-RelayRemoved-address-uint256-]] ==== `pass:normal[RelayRemoved([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#uint256# [.var-name\]#unstakeTime#)]` [.item-kind]#event# Emitted when a relay is removed (deregistered). `unstakeTime` is the time when unstake will be callable. [.contract-item] [[IRelayHub-Unstaked-address-uint256-]] ==== `pass:normal[Unstaked([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#uint256# [.var-name\]#stake#)]` [.item-kind]#event# Emitted when a relay is unstaked for, including the returned stake. [.contract-item] [[IRelayHub-Deposited-address-address-uint256-]] ==== `pass:normal[Deposited([.var-type\]#address# [.var-name\]#recipient#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#uint256# [.var-name\]#amount#)]` [.item-kind]#event# Emitted when {depositFor} is called, including the amount and account that was funded. [.contract-item] [[IRelayHub-Withdrawn-address-address-uint256-]] ==== `pass:normal[Withdrawn([.var-type\]#address# [.var-name\]#account#, [.var-type\]#address# [.var-name\]#dest#, [.var-type\]#uint256# [.var-name\]#amount#)]` [.item-kind]#event# Emitted when an account withdraws funds from `RelayHub`. [.contract-item] [[IRelayHub-CanRelayFailed-address-address-address-bytes4-uint256-]] ==== `pass:normal[CanRelayFailed([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#address# [.var-name\]#to#, [.var-type\]#bytes4# [.var-name\]#selector#, [.var-type\]#uint256# [.var-name\]#reason#)]` [.item-kind]#event# Emitted when an attempt to relay a call failed. This can happen due to incorrect {relayCall} arguments, or the recipient not accepting the relayed call. The actual relayed call was not executed, and the recipient not charged. The `reason` parameter contains an error code: values 1-10 correspond to `PreconditionCheck` entries, and values over 10 are custom recipient error codes returned from {acceptRelayedCall}. [.contract-item] [[IRelayHub-TransactionRelayed-address-address-address-bytes4-enum-IRelayHub-RelayCallStatus-uint256-]] ==== `pass:normal[TransactionRelayed([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#from#, [.var-type\]#address# [.var-name\]#to#, [.var-type\]#bytes4# [.var-name\]#selector#, [.var-type\]#enum IRelayHub.RelayCallStatus# [.var-name\]#status#, [.var-type\]#uint256# [.var-name\]#charge#)]` [.item-kind]#event# Emitted when a transaction is relayed. Useful when monitoring a relay's operation and relayed calls to a contract Note that the actual encoded function might be reverted: this is indicated in the `status` parameter. `charge` is the Ether value deducted from the recipient's balance, paid to the relay's owner. [.contract-item] [[IRelayHub-Penalized-address-address-uint256-]] ==== `pass:normal[Penalized([.var-type\]#address# [.var-name\]#relay#, [.var-type\]#address# [.var-name\]#sender#, [.var-type\]#uint256# [.var-name\]#amount#)]` [.item-kind]#event# Emitted when a relay is penalized.