diff --git a/README.md b/README.md index e989431ad..b694d9880 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ Returns an object with all contracts from a deployment and their addresses. | V3 Stable Surge Hook (V2) | [`20250403-v3-stable-surge-hook-v2`](./v3/tasks/20250403-v3-stable-surge-hook-v2) | | V3 Stable Surge Pool (V2) | [`20250404-v3-stable-surge-pool-factory-v2`](./v3/tasks/20250404-v3-stable-surge-pool-factory-v2) | | V3 Vault Explorer V2 | [`20250407-v3-vault-explorer-v2`](./v3/tasks/20250407-v3-vault-explorer-v2) | +| V3 ReClamm Pool | [`20250409-v3-reclamm-pool`](./v3/tasks/20250409-v3-reclamm-pool) | | V3 Wrapped BPT Factory | [`20250418-v3-wrapped-bpt`](./v3/tasks/20250418-v3-wrapped-bpt) | | V3 Pool Pause Helper | [`20250430-v3-pool-pause-helper`](./v3/tasks/20250430-v3-pool-pause-helper) | | V3 Pool Swap Fee Helper | [`20250430-v3-pool-swap-fee-helper`](./v3/tasks/20250430-v3-pool-swap-fee-helper) | diff --git a/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPool.json b/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPool.json new file mode 100644 index 000000000..da89f9f16 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPool.json @@ -0,0 +1,2337 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ReClammPool", + "sourceName": "contracts/ReClammPool.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "dailyPriceShiftExponent", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "centerednessMargin", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "initialMinPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialMaxPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialTargetPrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "tokenAPriceIncludesRate", + "type": "bool" + }, + { + "internalType": "bool", + "name": "tokenBPriceIncludesRate", + "type": "bool" + } + ], + "internalType": "struct ReClammPoolParams", + "name": "params", + "type": "tuple" + }, + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AmountOutGreaterThanBalance", + "type": "error" + }, + { + "inputs": [], + "name": "BalanceRatioExceedsTolerance", + "type": "error" + }, + { + "inputs": [], + "name": "BaseOutOfBounds", + "type": "error" + }, + { + "inputs": [], + "name": "DailyPriceShiftExponentTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "ECDSAInvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "ECDSAInvalidSignatureLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "ECDSAInvalidSignatureS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "ERC2612ExpiredSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "ERC2612InvalidSigner", + "type": "error" + }, + { + "inputs": [], + "name": "ExponentOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "currentNonce", + "type": "uint256" + } + ], + "name": "InvalidAccountNonce", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidCenterednessMargin", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidExponent", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialPrice", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidShortString", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "resolvedStartTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "InvalidStartTime", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidStartTime", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidToken", + "type": "error" + }, + { + "inputs": [], + "name": "NotImplemented", + "type": "error" + }, + { + "inputs": [], + "name": "PoolNotInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "PoolOutsideTargetRange", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fourthRootPriceRatioDelta", + "type": "uint256" + } + ], + "name": "PriceRatioDeltaBelowMin", + "type": "error" + }, + { + "inputs": [], + "name": "PriceRatioNotUpdating", + "type": "error" + }, + { + "inputs": [], + "name": "PriceRatioUpdateDurationTooShort", + "type": "error" + }, + { + "inputs": [], + "name": "PriceRatioUpdateTooFast", + "type": "error" + }, + { + "inputs": [], + "name": "ProductOutOfBounds", + "type": "error" + }, + { + "inputs": [], + "name": "ReClammPoolBptRateUnsupported", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderIsNotVault", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "StringTooLong", + "type": "error" + }, + { + "inputs": [], + "name": "VaultIsNotLocked", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotSet", + "type": "error" + }, + { + "inputs": [], + "name": "WrongInitializationPrices", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroDivision", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "centerednessMargin", + "type": "uint256" + } + ], + "name": "CenterednessMarginUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "dailyPriceShiftExponent", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "dailyPriceShiftBase", + "type": "uint256" + } + ], + "name": "DailyPriceShiftExponentUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "EIP712DomainChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "lastTimestamp", + "type": "uint32" + } + ], + "name": "LastTimestampUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "startFourthRootPriceRatio", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endFourthRootPriceRatio", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "priceRatioUpdateStartTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "priceRatioUpdateEndTime", + "type": "uint256" + } + ], + "name": "PriceRatioStateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "virtualBalanceA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "virtualBalanceB", + "type": "uint256" + } + ], + "name": "VirtualBalancesUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "computeBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentFourthRootPriceRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentPoolCenteredness", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentPriceRange", + "outputs": [ + { + "internalType": "uint256", + "name": "minPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentPriceRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentSpotPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "computeCurrentVirtualBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "currentVirtualBalanceA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentVirtualBalanceB", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "changed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "referenceToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "referenceAmountInRaw", + "type": "uint256" + } + ], + "name": "computeInitialBalancesRaw", + "outputs": [ + { + "internalType": "uint256[]", + "name": "initialBalancesRaw", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "enum Rounding", + "name": "rounding", + "type": "uint8" + } + ], + "name": "computeInvariant", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "eip712Domain", + "outputs": [ + { + "internalType": "bytes1", + "name": "fields", + "type": "bytes1" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + }, + { + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "emitApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "emitTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAggregateFeePercentages", + "outputs": [ + { + "internalType": "uint256", + "name": "aggregateSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "aggregateYieldFeePercentage", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCenterednessMargin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentLiveBalances", + "outputs": [ + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDailyPriceShiftBase", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDailyPriceShiftExponent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getHookFlags", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "enableHookAdjustedAmounts", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterInitialize", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallComputeDynamicSwapFee", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterAddLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallBeforeRemoveLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldCallAfterRemoveLiquidity", + "type": "bool" + } + ], + "internalType": "struct HookFlags", + "name": "hookFlags", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getLastTimestamp", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastVirtualBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "virtualBalanceA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "virtualBalanceB", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumInvariantRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMaximumSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumInvariantRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getPriceRatioState", + "outputs": [ + { + "components": [ + { + "internalType": "uint96", + "name": "startFourthRootPriceRatio", + "type": "uint96" + }, + { + "internalType": "uint96", + "name": "endFourthRootPriceRatio", + "type": "uint96" + }, + { + "internalType": "uint32", + "name": "priceRatioUpdateStartTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "priceRatioUpdateEndTime", + "type": "uint32" + } + ], + "internalType": "struct PriceRatioState", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getReClammPoolDynamicData", + "outputs": [ + { + "components": [ + { + "internalType": "uint256[]", + "name": "balancesLiveScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRates", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "staticSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "lastVirtualBalances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "dailyPriceShiftExponent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "dailyPriceShiftBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "centerednessMargin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentPriceRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentFourthRootPriceRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "startFourthRootPriceRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endFourthRootPriceRatio", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "priceRatioUpdateStartTime", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "priceRatioUpdateEndTime", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "isPoolInitialized", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isPoolInRecoveryMode", + "type": "bool" + } + ], + "internalType": "struct ReClammPoolDynamicData", + "name": "data", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getReClammPoolImmutableData", + "outputs": [ + { + "components": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "decimalScalingFactors", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "tokenAPriceIncludesRate", + "type": "bool" + }, + { + "internalType": "bool", + "name": "tokenBPriceIncludesRate", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "minSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialMinPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialMaxPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialTargetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialDailyPriceShiftExponent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialCenterednessMargin", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxDailyPriceShiftExponent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxDailyPriceRatioUpdateRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPriceRatioUpdateDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPriceRatioDelta", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balanceRatioAndPriceTolerance", + "type": "uint256" + } + ], + "internalType": "struct ReClammPoolImmutableData", + "name": "data", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getStaticSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokenInfo", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenInfo[]", + "name": "tokenInfo", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "balancesRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lastBalancesLiveScaled18", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementNonce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isPoolWithinTargetRange", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isPoolWithinTargetRangeUsingCurrentVirtualBalances", + "outputs": [ + { + "internalType": "bool", + "name": "isWithinTargetRange", + "type": "bool" + }, + { + "internalType": "bool", + "name": "virtualBalancesChanged", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsInRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOutRaw", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onAfterRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountInScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountOutScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenInBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenOutBalanceScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountCalculatedRaw", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct AfterSwapParams", + "name": "", + "type": "tuple" + } + ], + "name": "onAfterSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum AddLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "exactBptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeAddLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeInitialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "enum RemoveLiquidityKind", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "exactBptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onBeforeRemoveLiquidity", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "onBeforeSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "", + "type": "tuple" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "onComputeDynamicSwapFeePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokenConfig", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "name": "onRegister", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amountGivenScaled18", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balancesScaled18", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct PoolSwapParams", + "name": "request", + "type": "tuple" + } + ], + "name": "onSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "amountCalculatedScaled18", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newCenterednessMargin", + "type": "uint256" + } + ], + "name": "setCenterednessMargin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newDailyPriceShiftExponent", + "type": "uint256" + } + ], + "name": "setDailyPriceShiftExponent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "endPriceRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceRatioUpdateStartTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "priceRatioUpdateEndTime", + "type": "uint256" + } + ], + "name": "startPriceRatioUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "actualPriceRatioUpdateStartTime", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stopPriceRatioUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6103006040523461097b57616cb7803803809161001e8261030061097f565b6103003961030001604061030082031261097b5761030051906001600160401b03821161097b57610140826103000182031261097b576040519061014082016001600160401b0381118382101761079b576040526103008301516001600160401b03811161097b5781610096918561030001016109a2565b82526103208301516001600160401b03811161097b57816100bc918561030001016109a2565b6020830152610340830151906001600160401b03821161097b576100e5918461030001016109a2565b6040820181905261036083015160608301526103808301519092906001600160401b038116810361097b5760808301526103a081015160a08301526103c081015160c08301526103e081015160e083015261015b906101209061014b61040082016109f7565b61010085015261030001016109f7565b61012082015261032051916001600160a01b038316830361097b578151602083015160408051919592919081016001600160401b0381118282101761079b576040526001815260208101603160f81b81526101b583610a04565b610120526101c282610b87565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b0382111761079b576040525190206080523060c0526101608290528051906001600160401b03821161079b5760035490600182811c92168015610971575b602083101461077d5781601f849311610919575b50602090601f83116001146108a4575f92610899575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161079b57600454600181811c9116801561088f575b602082101461077d57601f8111610830575b506020601f82116001146107c95781929394955f926107be575b50508160011b915f199060031b1c1916176004555b610180819052336101a0526001600160a01b038116156107af576101c0528051906001600160401b03821161079b5760055490600182811c92168015610791575b602083101461077d5781601f84931161072f575b50602090601f83116001146106a7575f9261069c575b50508160011b915f199060031b1c1916176005555b60a0810151801590811561068f575b8115610682575b8115610673575b8115610661575b8115610652575b506106435760a08101516102205260c08101516102405260e08101516102605260608101516102805260808101516001600160401b03166102a05261010081015115156102c052610120015115156102e052676f05b59d3b21387661020052604051615fd9610cbe823960805181614955015260a05181614a21015260c05181614926015260e051816149a4015261010051816149ca01526101205181611709015261014051816117320152610160518181816103340152818161064b015281816108ce01528181610b1001528181610c6801528181610dea0152818161115f01528181611688015281816117f501528181611abe01528181611b0b01528181612099015281816124510152818161267b015281816126c8015281816127290152818161285601528181612b5a015281816135e101528181613b4d01528181613beb01528181613df801528181613e4e015281816141630152818161424801528181614556015281816146a1015281816147a20152818161487501528181614aa301528181614b1f0152614c62015261018051818181610a8501528181610ed401528181610f7901528181611091015261198801526101a05181613abc01526101c0518181816109a801528181610be001528181611214015281816131ad0152613ce701526101e051815050610200518181816112db0152611c850152610220518181816118db01528181611bb50152613f1c0152610240518181816118fc01528181611bdb0152613f4e015261026051818181611c010152613f75015261028051818181611c280152612de601526102a051818181611c4f0152612e1001526102c051818181611b4b0152613ec101526102e051818181611b730152613ee90152615fd990f35b6359e6ae3360e11b5f5260045ffd5b905060c082015111155f6103bb565b60e083015160c08401511091506103b4565b80915060e083015110906103ad565b60e08301511591506103a6565b60c083015115915061039f565b015190505f8061037b565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610714576001945083601f198116106106fc575b505050811b01600555610390565b01515f1960f88460031b161c191690555f80806106ee565b818101518355602094850194600190930192909101906106d3565b90915060055f5260205f20601f840160051c810160208510610776575b90849392915b601f830160051c82018110610768575050610365565b5f8155859450600101610752565b508061074c565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610351565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b015190505f806102fb565b60045f5260205f20905f5b601f1984168110610818575060019394959683601f19811610610800575b505050811b01600455610310565b01515f1960f88460031b161c191690555f80806107f2565b9091602060018192858b0151815501930191016107d4565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810160208410610888575b601f830160051c8201811061087d5750506102e1565b5f8155600101610867565b5080610867565b90607f16906102cf565b015190505f80610299565b60035f90815293505f516020616c975f395f51905f5291905b601f19841685106108fe576001945083601f198116106108e6575b505050811b016003556102ae565b01515f1960f88460031b161c191690555f80806108d8565b818101518355602094850194600190930192909101906108bd565b60035f529091505f516020616c975f395f51905f52601f840160051c81016020851061096a575b90849392915b601f830160051c8201811061095c575050610283565b5f8155859450600101610946565b5080610940565b91607f169161026f565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761079b57604052565b81601f8201121561097b578051906001600160401b03821161079b57604051926109d6601f8401601f19166020018561097f565b8284526020838301011161097b57815f9260208093018386015e8301015290565b5190811515820361097b57565b805160209081811015610a7a5750601f825111610a3c5780825192015190808310610a2e57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b03821161079b575f54926001938481811c91168015610b7d575b8382101461077d57601f8111610b4a575b5081601f8411600114610ae857509282939183925f94610add575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610ac8565b919083601f1981165f8052845f20945f905b88838310610b305750505010610b18575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610b0b565b858701518855909601959485019487935090810190610afa565b5f805284601f845f20920160051c820191601f860160051c015b828110610b72575050610aad565b5f8155018590610b64565b90607f1690610a9c565b805160209081811015610bb15750601f825111610a3c5780825192015190808310610a2e57501790565b9192916001600160401b03811161079b5760019182548381811c91168015610cb3575b8282101461077d57601f8111610c80575b5080601f8311600114610c205750819293945f92610c15575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610bfe565b90601f19831695845f52825f20925f905b888210610c695750508385969710610c51575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610c44565b808785968294968601518155019501930190610c31565b835f5283601f835f20920160051c820191601f850160051c015b828110610ca8575050610be5565b5f8155018490610c9a565b90607f1690610bd456fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b", + "deployedBytecode": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPoolFactory.json b/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPoolFactory.json new file mode 100644 index 000000000..bc0d05e29 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/artifact/ReClammPoolFactory.json @@ -0,0 +1,570 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ReClammPoolFactory", + "sourceName": "contracts/ReClammPoolFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pauseWindowDuration", + "type": "uint32" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "poolVersion", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CodeDeploymentFailed", + "type": "error" + }, + { + "inputs": [], + "name": "Create2EmptyBytecode", + "type": "error" + }, + { + "inputs": [], + "name": "Disabled", + "type": "error" + }, + { + "inputs": [], + "name": "FailedDeployment", + "type": "error" + }, + { + "inputs": [], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "InsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTokenType", + "type": "error" + }, + { + "inputs": [], + "name": "MaxTokens", + "type": "error" + }, + { + "inputs": [], + "name": "PoolPauseWindowDurationOverflow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "bits", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "SafeCastOverflowedUintDowncast", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "StandardPoolWithCreator", + "type": "error" + }, + { + "inputs": [], + "name": "VaultNotSet", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokens", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "initialMinPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialMaxPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialTargetPrice", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "tokenAPriceIncludesRate", + "type": "bool" + }, + { + "internalType": "bool", + "name": "tokenBPriceIncludesRate", + "type": "bool" + } + ], + "internalType": "struct ReClammPriceParams", + "name": "priceParams", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "dailyPriceShiftExponent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "centerednessMargin", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDefaultLiquidityManagement", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getDefaultPoolHooksContract", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "constructorArgs", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "getDeploymentAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewPoolPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOriginalPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseWindowDuration", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPools", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "getPoolsInRange", + "outputs": [ + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x610180604052346100aa5761001e61001561013d565b92919091610385565b6040516116ba90816105e38239608051818181610203015261124c015260a051816111d6015260c0518181816102270152611271015260e051816111f701526101005181610f140152610120518181816102f901528181610972015281816109e00152818161114801526114b2015261014051816108df015261016051818181610cf0015261119e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176100e757604052565b6100ae565b81601f820112156100aa578051906001600160401b0382116100e75761011b601f8301601f19166020016100c2565b92828452602083830101116100aa57815f9260208093018386015e8301015290565b618954908138038061014e816100c2565b9384398201906080838303126100aa578251906001600160a01b03821682036100aa5760208401519363ffffffff851685036100aa5760408101516001600160401b0394908581116100aa57816101a69184016100ec565b9460608301519081116100aa576101bd92016100ec565b9193929190565b90600182811c921680156101f2575b60208310146101de57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101d3565b601f8111610208575050565b60035f5260205f20906020601f840160051c83019310610242575b601f0160051c01905b818110610237575050565b5f815560010161022c565b9091508190610223565b601f8111610258575050565b60045f5260205f20906020601f840160051c83019310610292575b601f0160051c01905b818110610287575050565b5f815560010161027c565b9091508190610273565b80519091906001600160401b0381116100e7576102c3816102be6004546101c4565b61024c565b602080601f8311600114610304575081906102f493945f926102f9575b50508160011b915f199060031b1c19161790565b600455565b015190505f806102e0565b60045f52601f198316949091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f905b87821061036d575050836001959610610355575b505050811b01600455565b01515f1960f88460031b161c191690555f808061034a565b80600185968294968601518155019501930190610336565b929192616cb7610397602082016100c2565b90808252611c9d60208301398051908160011c918260a05282810392818411610450578360e0528083526103ca83610553565b60805282019182519383526103de836105a2565b60c052525230610100526001600160a01b03811615610441576101205263ffffffff9261040d84831642610464565b93808511610432576104309461042b93610140521661016052610476565b61029c565b565b6368755a1160e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b9190820180921161047157565b610450565b80519091906001600160401b0381116100e75761049d816104986003546101c4565b6101fc565b602080601f83116001146104d2575081906104cd93945f926102f95750508160011b915f199060031b1c19161790565b600355565b60035f52601f198316949091907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b925f905b87821061053b575050836001959610610523575b505050811b01600355565b01515f1960f88460031b161c191690555f8080610518565b80600185968294968601518155019501930190610504565b9081517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe835260208101835ff092526001600160a01b0382161561059357565b63fef8220760e01b5f5260045ffd5b9081517f60fe600053602038038060206001396001016000f3fefefefefefefefefefefe835260208101835ff092526001600160a01b038216156105935756fe60806040526004361015610011575f80fd5b5f3560e01c8062c194db14610153578063174481fa1461014e578063193ad50f146101495780632f2770db146101445780633f819b6f1461013f57806344f6fec71461013a57806353a72f7e1461013557806354fd4d50146101305780636634b7531461012b578063673a2a1f146101265780636c57f5a91461012157806378da80cb1461011c578063851c1bb3146101175780638d928af8146101125780638eec5d701461010d578063aaabadc514610108578063b3595be014610103578063db035ebc146100fe578063e9d56e19146100f95763ec888061146100f4575f80fd5b610d14565b610cd4565b610cac565b610bf9565b6109b3565b610996565b610953565b610903565b6108c3565b6108a1565b610813565b6107d3565b6106c1565b6105d5565b6104f0565b610408565b61029d565b61024e565b6101e4565b61018a565b5f91031261016257565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610162575f366003190112610162576040516020810181811067ffffffffffffffff8211176101df576101db916101c7916040525f81526111d3565b604051918291602083526020830190610166565b0390f35b610423565b34610162575f36600319011261016257604080516001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b34610162575f366003190112610162576080610268610d2e565b61029b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b34610162575f366003190112610162576102d95f357fffffffff0000000000000000000000000000000000000000000000000000000016610f0a565b60405163aaabadc560e01b81526020916001600160a01b039183816004817f000000000000000000000000000000000000000000000000000000000000000087165afa80156103c0578492610360925f926103c5575b506040516326f8aa2160e21b8152600481019190915233602482015230604482015293849283919082906064820190565b0392165afa9182156103c0575f92610393575b50501561038457610382610d52565b005b6323dada5360e01b5f5260045ffd5b6103b29250803d106103b9575b6103aa8183610467565b81019061166f565b5f80610373565b503d6103a0565b610f7c565b6103e6919250843d86116103ed575b6103de8183610467565b810190610f67565b905f61032f565b503d6103d4565b906020610405928181520190610166565b90565b34610162575f366003190112610162576101db6101c7610d8d565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176101df57604052565b67ffffffffffffffff81116101df57604052565b90601f8019910116810190811067ffffffffffffffff8211176101df57604052565b60405190610140820182811067ffffffffffffffff8211176101df57604052565b92919267ffffffffffffffff82116101df57604051916104d4601f8201601f191660200184610467565b829481845281830111610162578281602093845f960137010152565b346101625760403660031901126101625760043567ffffffffffffffff81116101625736602382011215610162576001600160a01b036055600b6105416101db9436906024816004013591016104aa565b61055561054f6024356112b4565b916111d3565b602081519101209060405191604083015260208201523081520160ff81532016604051918291829190916001600160a01b036020820193169052565b60209060206040818301928281528551809452019301915f5b8281106105b8575050505090565b83516001600160a01b0316855293810193928101926001016105aa565b346101625760403660031901126101625760043560243590600191600154808310156106b2578183018084116106ad57811061069c575b5061061681610a58565b916106246040519384610467565b818352601f1961063383610a58565b013660208501375f5b82811061065157604051806101db8682610591565b8061069661067e61066b610666899587610e7e565b610e9f565b90546001600160a01b039160031b1c1690565b6106888388610ef6565b906001600160a01b03169052565b0161063c565b828103915081116106ad575f61060c565b610e6a565b634e23d03560e01b5f5260045ffd5b34610162575f366003190112610162576040515f60035460018160011c91600181169182156107b8575b6020916020851084146107a4578487526020870193908115610785575060011461072c575b6101db8661072081880382610467565b604051918291826103f4565b60035f90815294509192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8386106107745750505091019050610720826101db5f610710565b805485870152948201948101610759565b60ff1916845250505090151560051b019050610720826101db5f610710565b634e487b7160e01b5f52602260045260245ffd5b92607f16926106eb565b6001600160a01b0381160361016257565b34610162576020366003190112610162576001600160a01b036004356107f8816107c2565b165f525f602052602060ff60405f2054166040519015158152f35b34610162575f36600319011261016257604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610883576101db86610877818a0382610467565b60405191829182610591565b84546001600160a01b03168752958601959383019390830190610860565b34610162575f36600319011261016257602060ff600254166040519015158152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162576020366003190112610162576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036101625761094b602091610f0a565b604051908152f35b34610162575f3660031901126101625760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f366003190112610162576020600154604051908152f35b34610162575f3660031901126101625760405163aaabadc560e01b81526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156103c0576020925f92610a1e575b5060405191168152f35b610a36919250833d85116103ed576103de8183610467565b905f610a14565b9080601f8301121561016257816020610405933591016104aa565b67ffffffffffffffff81116101df5760051b60200190565b8015150361016257565b9080601f83011215610162578135916020610a9484610a58565b93604093610aa56040519687610467565b818652828087019260071b85010193818511610162578301915b848310610acf5750505050505090565b60808383031261016257855190610ae582610437565b8335610af0816107c2565b8252848401359060028210156101625782869283608095015288860135610b16816107c2565b8982015260608087013590610b2a82610a70565b820152815201920191610abf565b606090606319011261016257604051906060820182811067ffffffffffffffff8211176101df5760405281606435610b6f816107c2565b8152608435610b7d816107c2565b6020820152604060a43591610b91836107c2565b0152565b60a09060e3190112610162576040519060a0820182811067ffffffffffffffff8211176101df576040528160e435815261010435602082015261012435604082015261014435610be481610a70565b606082015260806101643591610b9183610a70565b34610162576101e03660031901126101625767ffffffffffffffff60043581811161016257610c2c903690600401610a3d565b9060243581811161016257610c45903690600401610a3d565b91604435918211610162576101db92610c65610c92933690600401610a7a565b90610c6f36610b38565b92610c7936610b95565b906101c435946101a43594610184359460c43593611054565b6040516001600160a01b0390911681529081906020820190565b34610162575f366003190112610162576020610cc661119c565b63ffffffff60405191168152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f3660031901126101625760206040515f8152f35b60405190610d3b82610437565b5f6060838281528260208201528260408201520152565b610d5a611299565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1565b604051905f6004546001918160011c9260018316908115610e60575b6020906020861083146107a45785885287946020860193908115610e415750600114610de1575b505050610ddf92500383610467565b565b925093610e0f60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90565b945f935b828510610e2b57505050610ddf9350015f8080610dd0565b8654858501529586019588955093810193610e13565b92505050610ddf9491925060ff19168252151560051b015f8080610dd0565b93607f1693610da9565b634e487b7160e01b5f52601160045260245ffd5b919082018092116106ad57565b634e487b7160e01b5f52603260045260245ffd5b600154811015610ed45760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b610e8b565b805115610ed45760200190565b805160011015610ed45760400190565b8051821015610ed45760209160051b010190565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b166040820152602481526060810181811067ffffffffffffffff8211176101df5760405251902090565b908160209103126101625751610405816107c2565b6040513d5f823e3d90fd5b92916020610ddf92604086526110448151610fe3610fb3610140928360408c01526101808b0190610166565b85850151603f198b8303810160608d015291610fce91610166565b906040860151908b83030160808c0152610166565b606084015160a08a0152608084015167ffffffffffffffff1660c08a01529260a081015160e08a015261103860c08201519261010093848c015260e08301519361012094858d0152830151908b019015159052565b01511515610160880152565b9401906001600160a01b03169052565b969293989791946001600160a01b0361107760408701516001600160a01b031690565b1661118d57610ddf9761114061118495611136846110b59b611171976110a061117f988e611308565b6110a8610d2e565b5f6060820152600181529d565b825161111d6020850151926040860151946110e96110e360806110db60608b0151151590565b990151151590565b996113a0565b916110f2610489565b9b8c5260208c0152611102610d8d565b60408c015260608b015267ffffffffffffffff1660808a0152565b60a088015260c087015260e08601521515610100850152565b1515610120830152565b6040519283917f00000000000000000000000000000000000000000000000000000000000000009060208401610f87565b03601f198101835282610467565b6113cc565b958692836114a0565b63187b85d960e21b5f5260045ffd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156111ce5790565b505f90565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808201908183116106ad57845192838301958684116106ad5760209260018480946040519a82818d01016040528b52805f838d017f00000000000000000000000000000000000000000000000000000000000000003c8a01017f00000000000000000000000000000000000000000000000000000000000000003c01918501015e565b60ff600254166112a557565b633ac4266d60e11b5f5260045ffd5b60405160208101913383524660408301526060820152606081526112d781610437565b51902090565b600211156112e757565b634e487b7160e01b5f52602160045260245ffd5b5160028110156112e75790565b906002825111611391576060810151151580611370575b611337576080015115159081611346575b5061133757565b63a1e9dd9d60e01b5f5260045ffd5b60019150602061135861135f92610ee6565b51016112fb565b611368816112dd565b14155f611330565b506001611381602061135885610ed9565b61138a816112dd565b141561131f565b630e0f7beb60e31b5f5260045ffd5b67ffffffffffffffff908181116113b5571690565b6306dfcc6560e41b5f52604060045260245260445ffd5b9061054f6113d9916112b4565b805115611491576020815191015ff5903d1519821516610f7c576001600160a01b0391828116908115611482579261140f611299565b815f525f60205260405f20600160ff19825416179055600154680100000000000000008110156101df578060016114499201600155610e9f565b819291549060031b9184831b921b19161790557f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2565b63b06ebf3d60e01b5f5260045ffd5b631328927760e21b5f5260045ffd5b9294919390946001600160a01b0393847f000000000000000000000000000000000000000000000000000000000000000016956114db61119c565b91873b156101625797959493929190604095604051998a9863eeec802f60e01b8a526004836101a48c01931660048c015260246101a060248d015282518094526101c48c019a6020809401955f935b8685106115fe57505050505050505086946115a85f9997939561159788966115658d996115da9760448b015260648a019063ffffffff169052565b88608489015260a4880190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b6001600160a01b0316610104860152565b805115156101248501526020810151151561014485015260408101511515610164850152606001511515610184840152565b03925af180156103c0576115eb5750565b806115f8610ddf92610453565b80610158565b9193959798999a9b9c90929496809e505183815116825287810151600281101561165d5782899260809284600196015286888201511688830152606080910151151590820152019e0195019290918f9d9c9b9a9998979596949261152a565b86602185634e487b7160e01b5f52525ffd5b90816020910312610162575161040581610a7056fea2646970667358221220bcc086bfa8cf229b6f976634e41162488be79708c6a3a98d6b9628ae8ce31ee764736f6c634300081b00336103006040523461097b57616cb7803803809161001e8261030061097f565b6103003961030001604061030082031261097b5761030051906001600160401b03821161097b57610140826103000182031261097b576040519061014082016001600160401b0381118382101761079b576040526103008301516001600160401b03811161097b5781610096918561030001016109a2565b82526103208301516001600160401b03811161097b57816100bc918561030001016109a2565b6020830152610340830151906001600160401b03821161097b576100e5918461030001016109a2565b6040820181905261036083015160608301526103808301519092906001600160401b038116810361097b5760808301526103a081015160a08301526103c081015160c08301526103e081015160e083015261015b906101209061014b61040082016109f7565b61010085015261030001016109f7565b61012082015261032051916001600160a01b038316830361097b578151602083015160408051919592919081016001600160401b0381118282101761079b576040526001815260208101603160f81b81526101b583610a04565b610120526101c282610b87565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b0382111761079b576040525190206080523060c0526101608290528051906001600160401b03821161079b5760035490600182811c92168015610971575b602083101461077d5781601f849311610919575b50602090601f83116001146108a4575f92610899575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161079b57600454600181811c9116801561088f575b602082101461077d57601f8111610830575b506020601f82116001146107c95781929394955f926107be575b50508160011b915f199060031b1c1916176004555b610180819052336101a0526001600160a01b038116156107af576101c0528051906001600160401b03821161079b5760055490600182811c92168015610791575b602083101461077d5781601f84931161072f575b50602090601f83116001146106a7575f9261069c575b50508160011b915f199060031b1c1916176005555b60a0810151801590811561068f575b8115610682575b8115610673575b8115610661575b8115610652575b506106435760a08101516102205260c08101516102405260e08101516102605260608101516102805260808101516001600160401b03166102a05261010081015115156102c052610120015115156102e052676f05b59d3b21387661020052604051615fd9610cbe823960805181614955015260a05181614a21015260c05181614926015260e051816149a4015261010051816149ca01526101205181611709015261014051816117320152610160518181816103340152818161064b015281816108ce01528181610b1001528181610c6801528181610dea0152818161115f01528181611688015281816117f501528181611abe01528181611b0b01528181612099015281816124510152818161267b015281816126c8015281816127290152818161285601528181612b5a015281816135e101528181613b4d01528181613beb01528181613df801528181613e4e015281816141630152818161424801528181614556015281816146a1015281816147a20152818161487501528181614aa301528181614b1f0152614c62015261018051818181610a8501528181610ed401528181610f7901528181611091015261198801526101a05181613abc01526101c0518181816109a801528181610be001528181611214015281816131ad0152613ce701526101e051815050610200518181816112db0152611c850152610220518181816118db01528181611bb50152613f1c0152610240518181816118fc01528181611bdb0152613f4e015261026051818181611c010152613f75015261028051818181611c280152612de601526102a051818181611c4f0152612e1001526102c051818181611b4b0152613ec101526102e051818181611b730152613ee90152615fd990f35b6359e6ae3360e11b5f5260045ffd5b905060c082015111155f6103bb565b60e083015160c08401511091506103b4565b80915060e083015110906103ad565b60e08301511591506103a6565b60c083015115915061039f565b015190505f8061037b565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610714576001945083601f198116106106fc575b505050811b01600555610390565b01515f1960f88460031b161c191690555f80806106ee565b818101518355602094850194600190930192909101906106d3565b90915060055f5260205f20601f840160051c810160208510610776575b90849392915b601f830160051c82018110610768575050610365565b5f8155859450600101610752565b508061074c565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610351565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b015190505f806102fb565b60045f5260205f20905f5b601f1984168110610818575060019394959683601f19811610610800575b505050811b01600455610310565b01515f1960f88460031b161c191690555f80806107f2565b9091602060018192858b0151815501930191016107d4565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810160208410610888575b601f830160051c8201811061087d5750506102e1565b5f8155600101610867565b5080610867565b90607f16906102cf565b015190505f80610299565b60035f90815293505f516020616c975f395f51905f5291905b601f19841685106108fe576001945083601f198116106108e6575b505050811b016003556102ae565b01515f1960f88460031b161c191690555f80806108d8565b818101518355602094850194600190930192909101906108bd565b60035f529091505f516020616c975f395f51905f52601f840160051c81016020851061096a575b90849392915b601f830160051c8201811061095c575050610283565b5f8155859450600101610946565b5080610940565b91607f169161026f565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761079b57604052565b81601f8201121561097b578051906001600160401b03821161079b57604051926109d6601f8401601f19166020018561097f565b8284526020838301011161097b57815f9260208093018386015e8301015290565b5190811515820361097b57565b805160209081811015610a7a5750601f825111610a3c5780825192015190808310610a2e57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b03821161079b575f54926001938481811c91168015610b7d575b8382101461077d57601f8111610b4a575b5081601f8411600114610ae857509282939183925f94610add575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610ac8565b919083601f1981165f8052845f20945f905b88838310610b305750505010610b18575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610b0b565b858701518855909601959485019487935090810190610afa565b5f805284601f845f20920160051c820191601f860160051c015b828110610b72575050610aad565b5f8155018590610b64565b90607f1690610a9c565b805160209081811015610bb15750601f825111610a3c5780825192015190808310610a2e57501790565b9192916001600160401b03811161079b5760019182548381811c91168015610cb3575b8282101461077d57601f8111610c80575b5080601f8311600114610c205750819293945f92610c15575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610bfe565b90601f19831695845f52825f20925f905b888210610c695750508385969710610c51575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610c44565b808785968294968601518155019501930190610c31565b835f5283601f835f20920160051c820191601f850160051c015b828110610ca8575050610be5565b5f8155018490610c9a565b90607f1690610bd456fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b", + "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c8062c194db14610153578063174481fa1461014e578063193ad50f146101495780632f2770db146101445780633f819b6f1461013f57806344f6fec71461013a57806353a72f7e1461013557806354fd4d50146101305780636634b7531461012b578063673a2a1f146101265780636c57f5a91461012157806378da80cb1461011c578063851c1bb3146101175780638d928af8146101125780638eec5d701461010d578063aaabadc514610108578063b3595be014610103578063db035ebc146100fe578063e9d56e19146100f95763ec888061146100f4575f80fd5b610d14565b610cd4565b610cac565b610bf9565b6109b3565b610996565b610953565b610903565b6108c3565b6108a1565b610813565b6107d3565b6106c1565b6105d5565b6104f0565b610408565b61029d565b61024e565b6101e4565b61018a565b5f91031261016257565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610162575f366003190112610162576040516020810181811067ffffffffffffffff8211176101df576101db916101c7916040525f81526111d3565b604051918291602083526020830190610166565b0390f35b610423565b34610162575f36600319011261016257604080516001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b34610162575f366003190112610162576080610268610d2e565b61029b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b34610162575f366003190112610162576102d95f357fffffffff0000000000000000000000000000000000000000000000000000000016610f0a565b60405163aaabadc560e01b81526020916001600160a01b039183816004817f000000000000000000000000000000000000000000000000000000000000000087165afa80156103c0578492610360925f926103c5575b506040516326f8aa2160e21b8152600481019190915233602482015230604482015293849283919082906064820190565b0392165afa9182156103c0575f92610393575b50501561038457610382610d52565b005b6323dada5360e01b5f5260045ffd5b6103b29250803d106103b9575b6103aa8183610467565b81019061166f565b5f80610373565b503d6103a0565b610f7c565b6103e6919250843d86116103ed575b6103de8183610467565b810190610f67565b905f61032f565b503d6103d4565b906020610405928181520190610166565b90565b34610162575f366003190112610162576101db6101c7610d8d565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176101df57604052565b67ffffffffffffffff81116101df57604052565b90601f8019910116810190811067ffffffffffffffff8211176101df57604052565b60405190610140820182811067ffffffffffffffff8211176101df57604052565b92919267ffffffffffffffff82116101df57604051916104d4601f8201601f191660200184610467565b829481845281830111610162578281602093845f960137010152565b346101625760403660031901126101625760043567ffffffffffffffff81116101625736602382011215610162576001600160a01b036055600b6105416101db9436906024816004013591016104aa565b61055561054f6024356112b4565b916111d3565b602081519101209060405191604083015260208201523081520160ff81532016604051918291829190916001600160a01b036020820193169052565b60209060206040818301928281528551809452019301915f5b8281106105b8575050505090565b83516001600160a01b0316855293810193928101926001016105aa565b346101625760403660031901126101625760043560243590600191600154808310156106b2578183018084116106ad57811061069c575b5061061681610a58565b916106246040519384610467565b818352601f1961063383610a58565b013660208501375f5b82811061065157604051806101db8682610591565b8061069661067e61066b610666899587610e7e565b610e9f565b90546001600160a01b039160031b1c1690565b6106888388610ef6565b906001600160a01b03169052565b0161063c565b828103915081116106ad575f61060c565b610e6a565b634e23d03560e01b5f5260045ffd5b34610162575f366003190112610162576040515f60035460018160011c91600181169182156107b8575b6020916020851084146107a4578487526020870193908115610785575060011461072c575b6101db8661072081880382610467565b604051918291826103f4565b60035f90815294509192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8386106107745750505091019050610720826101db5f610710565b805485870152948201948101610759565b60ff1916845250505090151560051b019050610720826101db5f610710565b634e487b7160e01b5f52602260045260245ffd5b92607f16926106eb565b6001600160a01b0381160361016257565b34610162576020366003190112610162576001600160a01b036004356107f8816107c2565b165f525f602052602060ff60405f2054166040519015158152f35b34610162575f36600319011261016257604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610883576101db86610877818a0382610467565b60405191829182610591565b84546001600160a01b03168752958601959383019390830190610860565b34610162575f36600319011261016257602060ff600254166040519015158152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162576020366003190112610162576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036101625761094b602091610f0a565b604051908152f35b34610162575f3660031901126101625760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f366003190112610162576020600154604051908152f35b34610162575f3660031901126101625760405163aaabadc560e01b81526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156103c0576020925f92610a1e575b5060405191168152f35b610a36919250833d85116103ed576103de8183610467565b905f610a14565b9080601f8301121561016257816020610405933591016104aa565b67ffffffffffffffff81116101df5760051b60200190565b8015150361016257565b9080601f83011215610162578135916020610a9484610a58565b93604093610aa56040519687610467565b818652828087019260071b85010193818511610162578301915b848310610acf5750505050505090565b60808383031261016257855190610ae582610437565b8335610af0816107c2565b8252848401359060028210156101625782869283608095015288860135610b16816107c2565b8982015260608087013590610b2a82610a70565b820152815201920191610abf565b606090606319011261016257604051906060820182811067ffffffffffffffff8211176101df5760405281606435610b6f816107c2565b8152608435610b7d816107c2565b6020820152604060a43591610b91836107c2565b0152565b60a09060e3190112610162576040519060a0820182811067ffffffffffffffff8211176101df576040528160e435815261010435602082015261012435604082015261014435610be481610a70565b606082015260806101643591610b9183610a70565b34610162576101e03660031901126101625767ffffffffffffffff60043581811161016257610c2c903690600401610a3d565b9060243581811161016257610c45903690600401610a3d565b91604435918211610162576101db92610c65610c92933690600401610a7a565b90610c6f36610b38565b92610c7936610b95565b906101c435946101a43594610184359460c43593611054565b6040516001600160a01b0390911681529081906020820190565b34610162575f366003190112610162576020610cc661119c565b63ffffffff60405191168152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f3660031901126101625760206040515f8152f35b60405190610d3b82610437565b5f6060838281528260208201528260408201520152565b610d5a611299565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1565b604051905f6004546001918160011c9260018316908115610e60575b6020906020861083146107a45785885287946020860193908115610e415750600114610de1575b505050610ddf92500383610467565b565b925093610e0f60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90565b945f935b828510610e2b57505050610ddf9350015f8080610dd0565b8654858501529586019588955093810193610e13565b92505050610ddf9491925060ff19168252151560051b015f8080610dd0565b93607f1693610da9565b634e487b7160e01b5f52601160045260245ffd5b919082018092116106ad57565b634e487b7160e01b5f52603260045260245ffd5b600154811015610ed45760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b610e8b565b805115610ed45760200190565b805160011015610ed45760400190565b8051821015610ed45760209160051b010190565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b166040820152602481526060810181811067ffffffffffffffff8211176101df5760405251902090565b908160209103126101625751610405816107c2565b6040513d5f823e3d90fd5b92916020610ddf92604086526110448151610fe3610fb3610140928360408c01526101808b0190610166565b85850151603f198b8303810160608d015291610fce91610166565b906040860151908b83030160808c0152610166565b606084015160a08a0152608084015167ffffffffffffffff1660c08a01529260a081015160e08a015261103860c08201519261010093848c015260e08301519361012094858d0152830151908b019015159052565b01511515610160880152565b9401906001600160a01b03169052565b969293989791946001600160a01b0361107760408701516001600160a01b031690565b1661118d57610ddf9761114061118495611136846110b59b611171976110a061117f988e611308565b6110a8610d2e565b5f6060820152600181529d565b825161111d6020850151926040860151946110e96110e360806110db60608b0151151590565b990151151590565b996113a0565b916110f2610489565b9b8c5260208c0152611102610d8d565b60408c015260608b015267ffffffffffffffff1660808a0152565b60a088015260c087015260e08601521515610100850152565b1515610120830152565b6040519283917f00000000000000000000000000000000000000000000000000000000000000009060208401610f87565b03601f198101835282610467565b6113cc565b958692836114a0565b63187b85d960e21b5f5260045ffd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156111ce5790565b505f90565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808201908183116106ad57845192838301958684116106ad5760209260018480946040519a82818d01016040528b52805f838d017f00000000000000000000000000000000000000000000000000000000000000003c8a01017f00000000000000000000000000000000000000000000000000000000000000003c01918501015e565b60ff600254166112a557565b633ac4266d60e11b5f5260045ffd5b60405160208101913383524660408301526060820152606081526112d781610437565b51902090565b600211156112e757565b634e487b7160e01b5f52602160045260245ffd5b5160028110156112e75790565b906002825111611391576060810151151580611370575b611337576080015115159081611346575b5061133757565b63a1e9dd9d60e01b5f5260045ffd5b60019150602061135861135f92610ee6565b51016112fb565b611368816112dd565b14155f611330565b506001611381602061135885610ed9565b61138a816112dd565b141561131f565b630e0f7beb60e31b5f5260045ffd5b67ffffffffffffffff908181116113b5571690565b6306dfcc6560e41b5f52604060045260245260445ffd5b9061054f6113d9916112b4565b805115611491576020815191015ff5903d1519821516610f7c576001600160a01b0391828116908115611482579261140f611299565b815f525f60205260405f20600160ff19825416179055600154680100000000000000008110156101df578060016114499201600155610e9f565b819291549060031b9184831b921b19161790557f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2565b63b06ebf3d60e01b5f5260045ffd5b631328927760e21b5f5260045ffd5b9294919390946001600160a01b0393847f000000000000000000000000000000000000000000000000000000000000000016956114db61119c565b91873b156101625797959493929190604095604051998a9863eeec802f60e01b8a526004836101a48c01931660048c015260246101a060248d015282518094526101c48c019a6020809401955f935b8685106115fe57505050505050505086946115a85f9997939561159788966115658d996115da9760448b015260648a019063ffffffff169052565b88608489015260a4880190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b6001600160a01b0316610104860152565b805115156101248501526020810151151561014485015260408101511515610164850152606001511515610184840152565b03925af180156103c0576115eb5750565b806115f8610ddf92610453565b80610158565b9193959798999a9b9c90929496809e505183815116825287810151600281101561165d5782899260809284600196015286888201511688830152606080910151151590820152019e0195019290918f9d9c9b9a9998979596949261152a565b86602185634e487b7160e01b5f52525ffd5b90816020910312610162575161040581610a7056fea2646970667358221220bcc086bfa8cf229b6f976634e41162488be79708c6a3a98d6b9628ae8ce31ee764736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/tasks/20250409-v3-reclamm-pool/build-info/ReClammPoolFactory.json b/v3/tasks/20250409-v3-reclamm-pool/build-info/ReClammPoolFactory.json new file mode 100644 index 000000000..79e223d25 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/build-info/ReClammPoolFactory.json @@ -0,0 +1 @@ +{"id":"84b74ded53d2c026e827f55bf881f205","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenInfo } from \"../vault/VaultTypes.sol\";\n\n/**\n * @notice Convenience interface for pools, to get easy access to information stored in the Vault.\n * Intended mostly for off-chain requests; pools do not need to implement this to work properly.\n */\ninterface IPoolInfo {\n /**\n * @notice Gets the tokens registered in the pool.\n * @return tokens List of tokens in the pool, sorted in registration order\n */\n function getTokens() external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\n * @return tokens Pool tokens, sorted in token registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getTokenInfo()\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets the current live balances of the pool as fixed point, 18-decimal numbers.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode.\n * Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances),\n * so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances() external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Fetches the static swap fee percentage for the pool.\n * @return staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n */\n function getStaticSwapFeePercentage() external view returns (uint256 staticSwapFeePercentage);\n\n /**\n * @notice Gets the aggregate swap and yield fee percentages for a pool.\n * @dev These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\n * @return aggregateSwapFeePercentage The aggregate percentage fee applied to swaps\n * @return aggregateYieldFeePercentage The aggregate percentage fee applied to yield\n */\n function getAggregateFeePercentages()\n external\n view\n returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of pools deployed by a pool factory.\ninterface IPoolVersion {\n /**\n * @notice Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n * @dev This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know\n * about each other. Note that this value will only be set at factory creation time.\n *\n * @return poolVersion A string representation of the pool version\n */\n function getPoolVersion() external view returns (string memory poolVersion);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IUnbalancedLiquidityInvariantRatioBounds } from \"./IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { ISwapFeePercentageBounds } from \"./ISwapFeePercentageBounds.sol\";\nimport { PoolSwapParams, Rounding, SwapKind } from \"./VaultTypes.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool.\n * @dev All pool types should implement this interface. Note that it also requires implementation of:\n * - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n * - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n * liquidity operation.\n */\ninterface IBasePool is ISwapFeePercentageBounds, IUnbalancedLiquidityInvariantRatioBounds {\n /***************************************************************************\n Invariant\n ***************************************************************************/\n\n /**\n * @notice Computes the pool's invariant.\n * @dev This function computes the invariant based on current balances (and potentially other pool state).\n * The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n * If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n * returned for both rounding directions.\n *\n * You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n * (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n *\n * 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n * effectively add liquidity after the swap - but it should never decrease.\n *\n * 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n * the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n *\n * Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n * Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n * the total value should not change.\n *\n * Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n * the same total value would get a different number of LP shares. In that case, LP shares would not be\n * interchangeable, as they must be in a fair DEX.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The calculated invariant of the pool, represented as a uint256\n */\n function computeInvariant(\n uint256[] memory balancesLiveScaled18,\n Rounding rounding\n ) external view returns (uint256 invariant);\n\n /**\n * @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n * @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n * The pool must round up for the Vault to round in the protocol's favor when calling this function.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @return newBalance The new balance of the selected token, after the operation\n */\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view returns (uint256 newBalance);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Execute a swap in the pool.\n * @param params Swap parameters (see above for struct definition)\n * @return amountCalculatedScaled18 Calculated amount for the swap operation\n */\n function onSwap(PoolSwapParams calldata params) external returns (uint256 amountCalculatedScaled18);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum swap fee percentages for a pool.\n * @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n * that new pool developers think about and set these bounds according to their specific pool type.\n *\n * A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n * function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n * a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n * LVR/MEV strategies, where a very high fee makes sense.\n *\n * Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n * more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n * the highest value below 100% that satisfies the precision requirements.\n */\ninterface ISwapFeePercentageBounds {\n /// @return minimumSwapFeePercentage The minimum swap fee percentage for a pool\n function getMinimumSwapFeePercentage() external view returns (uint256 minimumSwapFeePercentage);\n\n /// @return maximumSwapFeePercentage The maximum swap fee percentage for a pool\n function getMaximumSwapFeePercentage() external view returns (uint256 maximumSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n * @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n * and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n * `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n * to their pool type's math.\n *\n * For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n * logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n * used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\n */\ninterface IUnbalancedLiquidityInvariantRatioBounds {\n /// @return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity\n function getMinimumInvariantRatio() external view returns (uint256 minimumInvariantRatio);\n\n /// @return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity\n function getMaximumInvariantRatio() external view returns (uint256 maximumInvariantRatio);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract BasePoolAuthentication is CommonAuthentication {\n IVault private immutable _vault;\n\n /**\n * @dev Pools should use the pool factory as the disambiguator passed into the base Authentication contract.\n * Otherwise, permissions would conflict if different pools reused function names.\n */\n constructor(IVault vault, address factory) CommonAuthentication(vault, bytes32(uint256(uint160(factory)))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n TokenConfig,\n PoolRoleAccounts,\n LiquidityManagement\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BaseSplitCodeFactory } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\";\nimport { FactoryWidePauseWindow } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\";\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice Base contract for Pool factories.\n *\n * Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have\n * arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts\n * created by the factory) is very powerful.\n *\n * Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook\n * contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty\n * factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token\n * count and weights are fixed).\n *\n * Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n * become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n * prevent the creation of any future pools from the factory.\n *\n * Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault\n * could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious\n * parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by\n * deploying and registering in a single `create` function.\n *\n * It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended\n * initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not\n * initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the\n * deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious\n * consequences, beyond being a DoS.\n *\n * Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning,\n * the best practice would be to create (i.e., deploy and register) and initialize in the same transaction.\n */\nabstract contract BasePoolFactory is\n IBasePoolFactory,\n BaseSplitCodeFactory,\n SingletonAuthentication,\n FactoryWidePauseWindow\n{\n mapping(address pool => bool isFromFactory) private _isPoolFromFactory;\n address[] private _pools;\n\n bool private _disabled;\n\n /// @notice A pool creator was specified for a pool from a Balancer core pool type.\n error StandardPoolWithCreator();\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n bytes memory creationCode\n ) BaseSplitCodeFactory(creationCode) SingletonAuthentication(vault) FactoryWidePauseWindow(pauseWindowDuration) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc IBasePoolFactory\n function isPoolFromFactory(address pool) external view returns (bool) {\n return _isPoolFromFactory[pool];\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPoolCount() external view returns (uint256) {\n return _pools.length;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPools() external view returns (address[] memory) {\n return _pools;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools) {\n uint256 length = _pools.length;\n if (start >= length) {\n revert IndexOutOfBounds();\n }\n\n // If `count` requests more pools than we have available, stop at the end of the array.\n uint256 end = start + count;\n if (end > length) {\n count = length - start;\n }\n\n pools = new address[](count);\n for (uint256 i = 0; i < count; i++) {\n pools[i] = _pools[start + i];\n }\n }\n\n /// @inheritdoc IBasePoolFactory\n function isDisabled() public view returns (bool) {\n return _disabled;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getDeploymentAddress(bytes memory constructorArgs, bytes32 salt) public view returns (address) {\n bytes32 finalSalt = _computeFinalSalt(salt);\n\n return _getDeploymentAddress(constructorArgs, finalSalt);\n }\n\n /// @inheritdoc IBasePoolFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _disabled = true;\n\n emit FactoryDisabled();\n }\n\n function _ensureEnabled() internal view {\n if (isDisabled()) {\n revert Disabled();\n }\n }\n\n function _registerPoolWithFactory(address pool) internal virtual {\n _ensureEnabled();\n\n _isPoolFromFactory[pool] = true;\n _pools.push(pool);\n\n emit PoolCreated(pool);\n }\n\n /**\n * @dev Factories that require a custom-calculated salt can override to replace this default salt processing.\n * By default, the pool address determinants include the sender and chain id, as well as the user-provided salt,\n * so contracts will generally not have the same address on different L2s.\n */\n function _computeFinalSalt(bytes32 salt) internal view virtual returns (bytes32) {\n return keccak256(abi.encode(msg.sender, block.chainid, salt));\n }\n\n function _create(bytes memory constructorArgs, bytes32 salt) internal returns (address pool) {\n bytes32 finalSalt = _computeFinalSalt(salt);\n pool = _create2(constructorArgs, finalSalt);\n\n _registerPoolWithFactory(pool);\n }\n\n function _registerPoolWithVault(\n address pool,\n TokenConfig[] memory tokens,\n uint256 swapFeePercentage,\n bool protocolFeeExempt,\n PoolRoleAccounts memory roleAccounts,\n address poolHooksContract,\n LiquidityManagement memory liquidityManagement\n ) internal {\n getVault().registerPool(\n pool,\n tokens,\n swapFeePercentage,\n getNewPoolPauseWindowEndTime(),\n protocolFeeExempt,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n /// @notice A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\n function getDefaultPoolHooksContract() public pure returns (address) {\n return address(0);\n }\n\n /**\n * @notice Convenience function for constructing a LiquidityManagement object.\n * @dev Users can call this to create a structure with all false arguments, then set the ones they need to true.\n * @return liquidityManagement Liquidity management flags, all initialized to false\n */\n function getDefaultLiquidityManagement() public pure returns (LiquidityManagement memory liquidityManagement) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenInfo, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IPoolInfo } from \"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/**\n * @notice Standard implementation of the `IPoolInfo` interface.\n * @dev Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for\n * commonly requested data.\n */\ncontract PoolInfo is IPoolInfo {\n IVault private immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n /// @inheritdoc IPoolInfo\n function getTokens() external view returns (IERC20[] memory tokens) {\n return _vault.getPoolTokens(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getTokenInfo()\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n )\n {\n return _vault.getPoolTokenInfo(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getCurrentLiveBalances() external view returns (uint256[] memory balancesLiveScaled18) {\n return _vault.getCurrentLiveBalances(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getStaticSwapFeePercentage() external view returns (uint256) {\n return _vault.getStaticSwapFeePercentage((address(this)));\n }\n\n /// @inheritdoc IPoolInfo\n function getAggregateFeePercentages()\n external\n view\n returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage)\n {\n PoolConfig memory poolConfig = _vault.getPoolConfig(address(this));\n\n aggregateSwapFeePercentage = poolConfig.aggregateSwapFeePercentage;\n aggregateYieldFeePercentage = poolConfig.aggregateYieldFeePercentage;\n }\n}\n"},"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\npragma solidity ^0.8.24;\n\n// solhint-disable not-rely-on-time\n\nlibrary GradualValueChange {\n /// @dev Indicates that the start time is after the end time\n error InvalidStartTime(uint256 resolvedStartTime, uint256 endTime);\n\n using FixedPoint for uint256;\n\n function getInterpolatedValue(\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n ) internal view returns (uint256) {\n uint256 pctProgress = calculateValueChangeProgress(startTime, endTime);\n\n return interpolateValue(startValue, endValue, pctProgress);\n }\n\n function resolveStartTime(uint256 startTime, uint256 endTime) internal view returns (uint256 resolvedStartTime) {\n // If the start time is in the past, \"fast forward\" to start now\n // This avoids discontinuities in the value curve. Otherwise, if you set the start/end times with\n // only 10% of the period in the future, the value would immediately jump 90%\n resolvedStartTime = Math.max(block.timestamp, startTime);\n\n if (resolvedStartTime > endTime) {\n revert InvalidStartTime(resolvedStartTime, endTime);\n }\n }\n\n function interpolateValue(\n uint256 startValue,\n uint256 endValue,\n uint256 pctProgress\n ) internal pure returns (uint256) {\n if (pctProgress >= FixedPoint.ONE || startValue == endValue) {\n return endValue;\n }\n\n if (pctProgress == 0) {\n return startValue;\n }\n\n unchecked {\n if (startValue > endValue) {\n uint256 delta = pctProgress.mulDown(startValue - endValue);\n return startValue - delta;\n } else {\n uint256 delta = pctProgress.mulDown(endValue - startValue);\n return startValue + delta;\n }\n }\n }\n\n /**\n * @dev Returns a fixed-point number representing how far along the current value change is, where 0 means the\n * change has not yet started, and FixedPoint.ONE means it has fully completed.\n */\n function calculateValueChangeProgress(uint256 startTime, uint256 endTime) internal view returns (uint256) {\n if (block.timestamp >= endTime) {\n return FixedPoint.ONE;\n } else if (block.timestamp <= startTime) {\n return 0;\n }\n\n // No need for checked math as the magnitudes are verified above: endTime > block.timestamp > startTime\n uint256 totalSeconds;\n uint256 secondsElapsed;\n\n unchecked {\n totalSeconds = endTime - startTime;\n secondsElapsed = block.timestamp - startTime;\n }\n\n // We don't need to consider zero division here as the code would never reach this point in that case.\n // If startTime == endTime:\n // - Progress = 1 if block.timestamp >= endTime (== startTime)\n // - Progress = 0 if block.timestamp < startTime (== endTime)\n return secondsElapsed.divDown(totalSeconds);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"./CodeDeployer.sol\";\nimport { Create2 } from \"@openzeppelin/contracts/utils/Create2.sol\";\n\n/**\n * @dev Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when\n * the contract's creation code grows close to 24kB.\n *\n * Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB.\n */\ncontract BaseSplitCodeFactory {\n // The contract's creation code is stored as code in two separate addresses, and retrieved via `extcodecopy`. This\n // means this factory supports contracts with creation code of up to 48kB.\n // We rely on inline-assembly to achieve this, both to make the entire operation highly gas efficient, and because\n // `extcodecopy` is not available in Solidity.\n\n // solhint-disable no-inline-assembly\n\n address private immutable _creationCodeContractA;\n uint256 private immutable _creationCodeSizeA;\n\n address private immutable _creationCodeContractB;\n uint256 private immutable _creationCodeSizeB;\n\n /**\n * @dev The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`.\n */\n constructor(bytes memory creationCode) {\n uint256 creationCodeSize = creationCode.length;\n\n // We are going to deploy two contracts: one with approximately the first half of `creationCode`'s contents\n // (A), and another with the remaining half (B).\n // We store the lengths in both immutable and stack variables, since immutable variables cannot be read during\n // construction.\n uint256 creationCodeSizeA = creationCodeSize / 2;\n _creationCodeSizeA = creationCodeSizeA;\n\n uint256 creationCodeSizeB = creationCodeSize - creationCodeSizeA;\n _creationCodeSizeB = creationCodeSizeB;\n\n // To deploy the contracts, we're going to use `CodeDeployer.deploy()`, which expects a memory array with\n // the code to deploy. Note that we cannot simply create arrays for A and B's code by copying or moving\n // `creationCode`'s contents as they are expected to be very large (> 24kB), so we must operate in-place.\n\n // Memory: [ code length ] [ A.data ] [ B.data ]\n\n // Creating A's array is simple: we simply replace `creationCode`'s length with A's length. We'll later restore\n // the original length.\n\n bytes memory creationCodeA;\n assembly {\n creationCodeA := creationCode\n mstore(creationCodeA, creationCodeSizeA)\n }\n\n // Memory: [ A.length ] [ A.data ] [ B.data ]\n // ^ creationCodeA\n\n // The first half is the beginning of the real contract (as opposed to the second half, which could be\n // anything), so we don't strictly need to protect the A contract. Fork tests should test both,\n // for completeness.\n bool preventExecution = false;\n\n _creationCodeContractA = CodeDeployer.deploy(creationCodeA, preventExecution);\n\n // Creating B's array is a bit more involved: since we cannot move B's contents, we are going to create a 'new'\n // memory array starting at A's last 32 bytes, which will be replaced with B's length. We'll back-up this last\n // byte to later restore it.\n\n bytes memory creationCodeB;\n bytes32 lastByteA;\n\n assembly {\n // `creationCode` points to the array's length, not data, so by adding A's length to it we arrive at A's\n // last 32 bytes.\n creationCodeB := add(creationCode, creationCodeSizeA)\n lastByteA := mload(creationCodeB)\n mstore(creationCodeB, creationCodeSizeB)\n }\n\n // Memory: [ A.length ] [ A.data[ : -1] ] [ B.length ][ B.data ]\n // ^ creationCodeA ^ creationCodeB\n\n // The code for contract B starts at a random point, and could accidentally contain valid opcodes.\n // The `preventExecution` flag prepends an invalid opcode to ensure the \"contract\" cannot be accidentally\n // (or maliciously) executed. We need to remove this extra byte when reassembling the creation code.\n preventExecution = true;\n _creationCodeContractB = CodeDeployer.deploy(creationCodeB, preventExecution);\n\n // We now restore the original contents of `creationCode` by writing back the original length and A's last byte.\n assembly {\n mstore(creationCodeA, creationCodeSize)\n mstore(creationCodeB, lastByteA)\n }\n }\n\n /// @dev Returns the two addresses where the creation code of the contract created by this factory is stored.\n function getCreationCodeContracts() public view returns (address contractA, address contractB) {\n return (_creationCodeContractA, _creationCodeContractB);\n }\n\n /// @dev Returns the creation code of the contract this factory creates.\n function getCreationCode() public view returns (bytes memory) {\n return _getCreationCodeWithArgs(\"\");\n }\n\n /**\n * @dev Returns the creation code that will result in a contract being deployed with `constructorArgs`.\n */\n function _getCreationCodeWithArgs(bytes memory constructorArgs) private view returns (bytes memory code) {\n // This function exists because `abi.encode()` cannot be instructed to place its result at a specific address.\n // We need for the ABI-encoded constructor arguments to be located immediately after the creation code, but\n // cannot rely on `abi.encodePacked()` to perform concatenation as that would involve copying the creation code,\n // which would be prohibitively expensive.\n // Instead, we compute the creation code in a pre-allocated array that is large enough to hold *both* the\n // creation code and the constructor arguments, and then copy the ABI-encoded arguments (which should not be\n // overly long) right after the end of the creation code.\n\n // Immutable variables cannot be used in assembly, so we store them in the stack first.\n address creationCodeContractA = _creationCodeContractA;\n uint256 creationCodeSizeA = _creationCodeSizeA;\n address creationCodeContractB = _creationCodeContractB;\n uint256 creationCodeSizeB = _creationCodeSizeB;\n\n uint256 creationCodeSize = creationCodeSizeA + creationCodeSizeB;\n uint256 constructorArgsSize = constructorArgs.length;\n\n uint256 codeSize = creationCodeSize + constructorArgsSize;\n\n assembly {\n // First, we allocate memory for `code` by retrieving the free memory pointer and then moving it ahead of\n // `code` by the size of the creation code plus constructor arguments, and 32 bytes for the array length.\n code := mload(0x40)\n mstore(0x40, add(code, add(codeSize, 32)))\n\n // We now store the length of the code plus constructor arguments.\n mstore(code, codeSize)\n\n // Next, we concatenate the creation code stored in A and B.\n let dataStart := add(code, 32)\n extcodecopy(creationCodeContractA, dataStart, 0, creationCodeSizeA)\n // Start at offset 1 in contract B, to skip the inserted invalid opcode.\n extcodecopy(creationCodeContractB, add(dataStart, creationCodeSizeA), 1, creationCodeSizeB)\n }\n\n // Finally, we copy the constructorArgs to the end of the array. Unfortunately there is no way to avoid this\n // copy, as it is not possible to tell Solidity where to store the result of `abi.encode()`.\n uint256 constructorArgsDataPtr;\n uint256 constructorArgsCodeDataPtr;\n assembly {\n constructorArgsDataPtr := add(constructorArgs, 32)\n constructorArgsCodeDataPtr := add(add(code, 32), creationCodeSize)\n }\n\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n mcopy(constructorArgsCodeDataPtr, constructorArgsDataPtr, constructorArgsSize)\n }\n }\n\n /**\n * @dev Deploys a contract with constructor arguments and a user-provided salt, using the create2 opcode.\n * To create `constructorArgs`, call `abi.encode()` with the contract's constructor arguments, in order.\n */\n function _create2(bytes memory constructorArgs, bytes32 salt) internal virtual returns (address) {\n bytes memory creationCode = _getCreationCodeWithArgs(constructorArgs);\n\n return Create2.deploy(0, salt, creationCode);\n }\n\n function _getDeploymentAddress(bytes memory constructorArgs, bytes32 salt) internal view returns (address) {\n bytes memory creationCode = _getCreationCodeWithArgs(constructorArgs);\n\n return Create2.computeAddress(salt, keccak256(creationCode));\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @dev Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as\n * contract code, which can be retrieved via the `extcodecopy` opcode.\n */\nlibrary CodeDeployer {\n error CodeDeploymentFailed();\n\n // During contract construction, the full code supplied exists as code, and can be accessed via `codesize` and\n // `codecopy`. This is not the contract's final code however: whatever the constructor returns is what will be\n // stored as its code.\n //\n // We use this mechanism to have a simple constructor that stores whatever is appended to it. The following opcode\n // sequence corresponds to the creation code of the following equivalent Solidity contract, plus padding to make the\n // full code 32 bytes long:\n //\n // contract CodeDeployer {\n // constructor() payable {\n // uint256 size;\n // assembly {\n // size := sub(codesize(), 32) // size of appended data, as constructor is 32 bytes long\n // codecopy(0, 32, size) // copy all appended data to memory at position 0\n // return(0, size) // return appended data for it to be stored as code\n // }\n // }\n // }\n //\n // More specifically, it is composed of the following opcodes (plus padding):\n //\n // [1] PUSH1 0x20\n // [2] CODESIZE\n // [3] SUB\n // [4] DUP1\n // [6] PUSH1 0x20\n // [8] PUSH1 0x00\n // [9] CODECOPY\n // [11] PUSH1 0x00\n // [12] RETURN\n //\n // The padding is just the 0xfe sequence (invalid opcode). It is important as it lets us work in-place, avoiding\n // memory allocation and copying.\n\n bytes32 private constant _DEPLOYER_CREATION_CODE =\n 0x602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe;\n\n // Sometimes (e.g., when deploying the second or \"B\" half of the creation code in BaseSplitCodeFactory), we need to\n // protect the bare contract from being accidentally (or maliciously) executed, in case the bytes at the boundary\n // happen to be valid opcodes. It's especially dangerous if the bytes contained the selfdestruct opcode, which would\n // destroy the contract (and, if it's a factory, effectively disable it and prevent further pool creation).\n //\n // To guard against this, if the \"preventExecution\" flag is set, we prepend an invalid opcode to the contract,\n // to ensure that it cannot be executed, regardless of its content.\n //\n // This corresponds to the following contract:\n //\n // contract CodeDeployer {\n // constructor() payable {\n // uint256 size;\n // assembly {\n // mstore8(0, 0xfe) // store invalid opcode at position 0\n // size := sub(codesize(), 32) // size of appended data, as constructor is 32 bytes long\n // codecopy(1, 32, size) // copy all appended data to memory at position 1\n // return(0, add(size, 1)) // return appended data (plus the extra byte) for it to be stored as code\n // }\n // }\n // }\n //\n // More specifically, it is composed of the following opcodes (plus padding, described above):\n //\n // [1] PUSH1 0xfe\n // [3] PUSH1 0x00\n // [4] MSTORE8\n // [6] PUSH1 0x20\n // [7] CODESIZE\n // [8] SUB\n // [9] DUP1\n // [11] PUSH1 0x20\n // [13] PUSH1 0x01\n // [14] CODECOPY\n // [16] PUSH1 0x01\n // [17] ADD\n // [19] PUSH1 0x00\n // [20] RETURN\n\n // solhint-disable max-line-length\n bytes32 private constant _PROTECTED_DEPLOYER_CREATION_CODE =\n 0x60fe600053602038038060206001396001016000f3fefefefefefefefefefefe;\n\n /**\n * @dev Deploys a contract with `code` as its code, returning the destination address.\n * If preventExecution is set, prepend an invalid opcode to ensure the \"contract\" cannot be executed.\n * Rather than add a flag, we could simply always prepend the opcode, but there might be use cases where fidelity\n * is required.\n *\n * Reverts if deployment fails.\n */\n function deploy(bytes memory code, bool preventExecution) internal returns (address destination) {\n bytes32 deployerCreationCode = preventExecution ? _PROTECTED_DEPLOYER_CREATION_CODE : _DEPLOYER_CREATION_CODE;\n\n // We need to concatenate the deployer creation code and `code` in memory, but want to avoid copying all of\n // `code` (which could be quite long) into a new memory location. Therefore, we operate in-place using\n // assembly.\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let codeLength := mload(code)\n\n // `code` is composed of length and data. We've already stored its length in `codeLength`, so we simply\n // replace it with the deployer creation code (which is exactly 32 bytes long).\n mstore(code, deployerCreationCode)\n\n // At this point, `code` now points to the deployer creation code immediately followed by `code`'s data\n // contents. This is exactly what the deployer expects to receive when created.\n destination := create(0, code, add(codeLength, 32))\n\n // Finally, we restore the original length in order to not mutate `code`.\n mstore(code, codeLength)\n }\n\n // The create opcode returns the zero address when contract creation fails, so we revert if this happens.\n if (destination == address(0)) {\n revert CodeDeploymentFailed();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\n * @dev Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory\n * will share the same Pause Window end time, after which both old and new Pools will not be pausable.\n *\n * All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer\n * period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused\n * through this buffer period, and cannot be unpaused.\n *\n * When the buffer period expires, it will unpause automatically, and remain permissionless forever after.\n */\ncontract FactoryWidePauseWindow {\n // This contract relies on timestamps - the usual caveats apply.\n // solhint-disable not-rely-on-time\n\n // The pause window end time is stored in 32 bits.\n uint32 private constant _MAX_TIMESTAMP = type(uint32).max;\n\n uint32 private immutable _pauseWindowDuration;\n\n // Time when the pause window for all created Pools expires.\n uint32 private immutable _poolsPauseWindowEndTime;\n\n /// @notice The factory deployer gave a duration that would overflow the Unix timestamp.\n error PoolPauseWindowDurationOverflow();\n\n constructor(uint32 pauseWindowDuration) {\n uint256 pauseWindowEndTime = block.timestamp + pauseWindowDuration;\n\n if (pauseWindowEndTime > _MAX_TIMESTAMP) {\n revert PoolPauseWindowDurationOverflow();\n }\n\n _pauseWindowDuration = pauseWindowDuration;\n\n // Direct cast is safe, as it was checked above.\n _poolsPauseWindowEndTime = uint32(pauseWindowEndTime);\n }\n\n /**\n * @notice Return the pause window duration. This is the time pools will be pausable after factory deployment.\n * @return pauseWindowDuration The duration in seconds\n */\n function getPauseWindowDuration() external view returns (uint32) {\n return _pauseWindowDuration;\n }\n\n /**\n * @notice Returns the original factory pauseWindowEndTime, regardless of the current time.\n * @return pauseWindowEndTime The end time as a timestamp\n */\n function getOriginalPauseWindowEndTime() external view returns (uint32) {\n return _poolsPauseWindowEndTime;\n }\n\n /**\n * @notice Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\n * @dev We intend for all pools deployed by this factory to have the same pause window end time (i.e., after\n * this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime`\n * until it passes, after which it will return 0.\n *\n * @return pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\n */\n function getNewPoolPauseWindowEndTime() public view returns (uint32) {\n // We know _poolsPauseWindowEndTime <= _MAX_TIMESTAMP (checked above).\n // Do not truncate timestamp; it should still return 0 after _MAX_TIMESTAMP.\n return (block.timestamp < _poolsPauseWindowEndTime) ? _poolsPauseWindowEndTime : 0;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FixedPoint } from \"../math/FixedPoint.sol\";\nimport { InputHelpers } from \"./InputHelpers.sol\";\n\n/**\n * @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n * @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n * 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n * represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n * math, simplifying it greatly.\n *\n * The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n * or tokens that do not implement `IERC20Metadata.decimals`.\n *\n * These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\n */\nlibrary ScalingHelpers {\n using FixedPoint for *;\n using ScalingHelpers for uint256;\n\n /***************************************************************************\n Single Value Functions\n ***************************************************************************/\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded down\n */\n function toScaled18ApplyRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulDown(tokenRate);\n }\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded up\n */\n function toScaled18ApplyRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulUp(tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded down\n */\n function toRawUndoRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divDown(amount, scalingFactor * tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded up\n */\n function toRawUndoRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divUp(amount, scalingFactor * tokenRate);\n }\n\n /***************************************************************************\n Array Functions\n ***************************************************************************/\n\n function copyToArray(uint256[] memory from, uint256[] memory to) internal pure {\n uint256 length = from.length;\n InputHelpers.ensureInputLengthMatch(length, to.length);\n\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n mcopy(add(to, 0x20), add(from, 0x20), mul(length, 0x20))\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded down\n */\n function copyToScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded up\n */\n function copyToScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Rounds up a rate informed by a rate provider.\n * @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n * rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n * downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n * @param rate The original rate\n * @return roundedRate The final rate, with rounding applied\n */\n function computeRateRoundUp(uint256 rate) internal pure returns (uint256) {\n uint256 roundedRate;\n // If rate is divisible by FixedPoint.ONE, roundedRate and rate will be equal. It means that rate has 18 zeros,\n // so there's no rounding issue and the rate should not be rounded up.\n unchecked {\n roundedRate = (rate / FixedPoint.ONE) * FixedPoint.ONE;\n }\n return roundedRate == rate ? rate : rate + 1;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { IERC20Permit } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Nonces } from \"@openzeppelin/contracts/utils/Nonces.sol\";\n\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n * with all the data and implementation delegated to the ERC20Multitoken contract.\n\n * @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n */\ncontract BalancerPoolToken is IERC20, IERC20Metadata, IERC20Permit, IRateProvider, EIP712, Nonces, ERC165, VaultGuard {\n bytes32 public constant PERMIT_TYPEHASH =\n keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n /**\n * @notice Operation failed due to an expired permit signature.\n * @param deadline The permit deadline that expired\n */\n error ERC2612ExpiredSignature(uint256 deadline);\n\n /**\n * @notice Operation failed due to a non-matching signature.\n * @param signer The address corresponding to the signature provider\n * @param owner The address of the owner (expected value of the signature provider)\n */\n error ERC2612InvalidSigner(address signer, address owner);\n\n // EIP712 also defines _name.\n string private _bptName;\n string private _bptSymbol;\n\n constructor(IVault vault_, string memory bptName, string memory bptSymbol) EIP712(bptName, \"1\") VaultGuard(vault_) {\n _bptName = bptName;\n _bptSymbol = bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function name() external view returns (string memory) {\n return _bptName;\n }\n\n /// @inheritdoc IERC20Metadata\n function symbol() external view returns (string memory) {\n return _bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function decimals() external pure returns (uint8) {\n // Always 18 decimals for BPT.\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view returns (uint256) {\n return _vault.totalSupply(address(this));\n }\n\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) external view returns (uint256) {\n return _vault.balanceOf(address(this), account);\n }\n\n /// @inheritdoc IERC20\n function transfer(address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transfer(msg.sender, to, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) external view returns (uint256) {\n return _vault.allowance(address(this), owner, spender);\n }\n\n /// @inheritdoc IERC20\n function approve(address spender, uint256 amount) external returns (bool) {\n // Vault will perform the approval and call emitApproval to emit the event from this contract.\n _vault.approve(msg.sender, spender, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transferFrom(msg.sender, from, to, amount);\n return true;\n }\n\n /**\n * Accounting is centralized in the MultiToken contract, and the actual transfers and approvals are done there.\n * Operations can be initiated from either the token contract or the MultiToken.\n *\n * To maintain compliance with the ERC-20 standard, and conform to the expectations of off-chain processes,\n * the MultiToken calls `emitTransfer` and `emitApproval` during those operations, so that the event is emitted\n * only from the token contract. These events are NOT defined in the MultiToken contract.\n */\n\n /// @dev Emit the Transfer event. This function can only be called by the MultiToken.\n function emitTransfer(address from, address to, uint256 amount) external onlyVault {\n emit Transfer(from, to, amount);\n }\n\n /// @dev Emit the Approval event. This function can only be called by the MultiToken.\n function emitApproval(address owner, address spender, uint256 amount) external onlyVault {\n emit Approval(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function permit(\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > deadline) {\n revert ERC2612ExpiredSignature(deadline);\n }\n\n bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _useNonce(owner), deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSA.recover(hash, v, r, s);\n if (signer != owner) {\n revert ERC2612InvalidSigner(signer, owner);\n }\n\n _vault.approve(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n /// @notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\n function incrementNonce() external {\n _useNonce(msg.sender);\n }\n\n // @inheritdoc IERC20Permit\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /**\n * @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n * @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n * of any given pool, which should be sufficient in nearly all cases.\n *\n * @return rate Rate of the pool's BPT\n */\n function getRate() public view virtual returns (uint256) {\n return getVault().getBptRate(address(this));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport {\n AddLiquidityKind,\n HookFlags,\n LiquidityManagement,\n RemoveLiquidityKind,\n TokenConfig,\n PoolSwapParams,\n AfterSwapParams\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\n/**\n * @notice Base for pool hooks contracts.\n * @dev Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks,\n * and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used\n * in this abstract contract, but should be used in real derived hook contracts.\n */\nabstract contract BaseHooks is IHooks {\n /// @inheritdoc IHooks\n function onRegister(\n address,\n address,\n TokenConfig[] memory,\n LiquidityManagement calldata\n ) public virtual returns (bool) {\n // By default, deny all factories. This method must be overwritten by the hook contract.\n return false;\n }\n\n /// @inheritdoc IHooks\n function getHookFlags() public view virtual returns (HookFlags memory);\n\n /// @inheritdoc IHooks\n function onBeforeInitialize(uint256[] memory, bytes memory) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterInitialize(uint256[] memory, uint256, bytes memory) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onBeforeAddLiquidity(\n address,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterAddLiquidity(\n address,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256[] memory amountsInRaw,\n uint256,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool, uint256[] memory) {\n return (false, amountsInRaw);\n }\n\n /// @inheritdoc IHooks\n function onBeforeRemoveLiquidity(\n address,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterRemoveLiquidity(\n address,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory amountsOutRaw,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool, uint256[] memory) {\n return (false, amountsOutRaw);\n }\n\n /// @inheritdoc IHooks\n function onBeforeSwap(PoolSwapParams calldata, address) public virtual returns (bool) {\n // return false to trigger an error if shouldCallBeforeSwap is true but this function is not overridden.\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterSwap(AfterSwapParams calldata) public virtual returns (bool, uint256) {\n // return false to trigger an error if shouldCallAfterSwap is true but this function is not overridden.\n // The second argument is not used.\n return (false, 0);\n }\n\n /// @inheritdoc IHooks\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata,\n address,\n uint256\n ) public view virtual returns (bool, uint256) {\n return (false, 0);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n /// @dev Vault cannot be address(0).\n error VaultNotSet();\n\n IVault private immutable _vault;\n\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n if (address(vault) == address(0)) {\n revert VaultNotSet();\n }\n\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0).\n function _ensureAuthenticatedByExclusiveRole(address where, address roleAccount) internal view {\n if (roleAccount == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAccount) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive).\n function _ensureAuthenticatedByRole(address where, address roleAccount) internal view {\n // If the sender is not the delegated manager for the role, defer to governance.\n if (msg.sender != roleAccount) {\n if (_canPerform(getActionId(msg.sig), msg.sender, where) == false) {\n revert SenderNotAllowed();\n }\n }\n // (else) if the sender is the delegated manager, proceed.\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"./CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/utils/Create2.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Create2.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev There's no code to deploy.\n */\n error Create2EmptyBytecode();\n\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n if (bytecode.length == 0) {\n revert Create2EmptyBytecode();\n }\n assembly (\"memory-safe\") {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n // if no address was created, and returndata is not empty, bubble revert\n if and(iszero(addr), not(iszero(returndatasize()))) {\n let p := mload(0x40)\n returndatacopy(p, 0, returndatasize())\n revert(p, returndatasize())\n }\n }\n if (addr == address(0)) {\n revert Errors.FailedDeployment();\n }\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) {\n assembly (\"memory-safe\") {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := and(keccak256(start, 85), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(\n bytes32 hash,\n bytes memory signature\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n assembly (\"memory-safe\") {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]\n */\n function tryRecover(\n bytes32 hash,\n bytes32 r,\n bytes32 vs\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"./MessageHashUtils.sol\";\nimport {ShortStrings, ShortString} from \"../ShortStrings.sol\";\nimport {IERC5267} from \"../../interfaces/IERC5267.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP-712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP-712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n *\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\n */\nabstract contract EIP712 is IERC5267 {\n using ShortStrings for *;\n\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _cachedDomainSeparator;\n uint256 private immutable _cachedChainId;\n address private immutable _cachedThis;\n\n bytes32 private immutable _hashedName;\n bytes32 private immutable _hashedVersion;\n\n ShortString private immutable _name;\n ShortString private immutable _version;\n string private _nameFallback;\n string private _versionFallback;\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP-712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _name = name.toShortStringWithFallback(_nameFallback);\n _version = version.toShortStringWithFallback(_versionFallback);\n _hashedName = keccak256(bytes(name));\n _hashedVersion = keccak256(bytes(version));\n\n _cachedChainId = block.chainid;\n _cachedDomainSeparator = _buildDomainSeparator();\n _cachedThis = address(this);\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\n return _cachedDomainSeparator;\n } else {\n return _buildDomainSeparator();\n }\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _name which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Name() internal view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _version which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Version() internal view returns (string memory) {\n return _version.toStringWithFallback(_versionFallback);\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[ERC-191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an ERC-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n assembly (\"memory-safe\") {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an ERC-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an ERC-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (ERC-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Errors.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n"},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an success flag (no overflow).\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an success flag (no overflow).\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an success flag (no overflow).\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * SafeCast.toUint(condition));\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n\n // The following calculation ensures accurate ceiling division without overflow.\n // Since a is non-zero, (a - 1) / b will not overflow.\n // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n // but the largest value we can obtain is type(uint256).max - 1, which happens\n // when a = type(uint256).max and b = 1.\n unchecked {\n return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n }\n }\n\n /**\n * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n *\n * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2²⁵⁶ + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n if (denominator <= prod1) {\n Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n inverse *= 2 - denominator * inverse; // inverse mod 2³²\n inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n }\n\n /**\n * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n *\n * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n *\n * If the input value is not inversible, 0 is returned.\n *\n * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n */\n function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n unchecked {\n if (n == 0) return 0;\n\n // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n // ax + ny = 1\n // ax = 1 + (-y)n\n // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n // If the remainder is 0 the gcd is n right away.\n uint256 remainder = a % n;\n uint256 gcd = n;\n\n // Therefore the initial coefficients are:\n // ax + ny = gcd(a, n) = n\n // 0a + 1n = n\n int256 x = 0;\n int256 y = 1;\n\n while (remainder != 0) {\n uint256 quotient = gcd / remainder;\n\n (gcd, remainder) = (\n // The old remainder is the next gcd to try.\n remainder,\n // Compute the next remainder.\n // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n // where gcd is at most n (capped to type(uint256).max)\n gcd - remainder * quotient\n );\n\n (x, y) = (\n // Increment the coefficient of a.\n y,\n // Decrement the coefficient of n.\n // Can overflow, but the result is casted to uint256 so that the\n // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n x - y * int256(quotient)\n );\n }\n\n if (gcd != 1) return 0; // No inverse exists.\n return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n }\n }\n\n /**\n * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n *\n * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n *\n * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n */\n function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n unchecked {\n return Math.modExp(a, p - 2, p);\n }\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n *\n * Requirements:\n * - modulus can't be zero\n * - underlying staticcall to precompile must succeed\n *\n * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n * interpreted as 0.\n */\n function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n (bool success, uint256 result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n * to operate modulo 0 or if the underlying precompile reverted.\n *\n * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n * of a revert, but the result may be incorrectly interpreted as 0.\n */\n function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n if (m == 0) return (false, 0);\n assembly (\"memory-safe\") {\n let ptr := mload(0x40)\n // | Offset | Content | Content (Hex) |\n // |-----------|------------|--------------------------------------------------------------------|\n // | 0x00:0x1f | size of b | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x20:0x3f | size of e | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x40:0x5f | size of m | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n mstore(ptr, 0x20)\n mstore(add(ptr, 0x20), 0x20)\n mstore(add(ptr, 0x40), 0x20)\n mstore(add(ptr, 0x60), b)\n mstore(add(ptr, 0x80), e)\n mstore(add(ptr, 0xa0), m)\n\n // Given the result < m, it's guaranteed to fit in 32 bytes,\n // so we can use the memory scratch space located at offset 0.\n success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n result := mload(0x00)\n }\n }\n\n /**\n * @dev Variant of {modExp} that supports inputs of arbitrary length.\n */\n function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n (bool success, bytes memory result) = tryModExp(b, e, m);\n if (!success) {\n Panic.panic(Panic.DIVISION_BY_ZERO);\n }\n return result;\n }\n\n /**\n * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n */\n function tryModExp(\n bytes memory b,\n bytes memory e,\n bytes memory m\n ) internal view returns (bool success, bytes memory result) {\n if (_zeroBytes(m)) return (false, new bytes(0));\n\n uint256 mLen = m.length;\n\n // Encode call args in result and move the free memory pointer\n result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n assembly (\"memory-safe\") {\n let dataPtr := add(result, 0x20)\n // Write result on top of args to avoid allocating extra memory.\n success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n // Overwrite the length.\n // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n mstore(result, mLen)\n // Set the memory pointer after the returned data.\n mstore(0x40, add(dataPtr, mLen))\n }\n }\n\n /**\n * @dev Returns whether the provided byte array is zero.\n */\n function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n for (uint256 i = 0; i < byteArray.length; ++i) {\n if (byteArray[i] != 0) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n * using integer operations.\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n unchecked {\n // Take care of easy edge cases when a == 0 or a == 1\n if (a <= 1) {\n return a;\n }\n\n // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n // the current value as `ε_n = | x_n - sqrt(a) |`.\n //\n // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n // bigger than any uint256.\n //\n // By noticing that\n // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n // to the msb function.\n uint256 aa = a;\n uint256 xn = 1;\n\n if (aa >= (1 << 128)) {\n aa >>= 128;\n xn <<= 64;\n }\n if (aa >= (1 << 64)) {\n aa >>= 64;\n xn <<= 32;\n }\n if (aa >= (1 << 32)) {\n aa >>= 32;\n xn <<= 16;\n }\n if (aa >= (1 << 16)) {\n aa >>= 16;\n xn <<= 8;\n }\n if (aa >= (1 << 8)) {\n aa >>= 8;\n xn <<= 4;\n }\n if (aa >= (1 << 4)) {\n aa >>= 4;\n xn <<= 2;\n }\n if (aa >= (1 << 2)) {\n xn <<= 1;\n }\n\n // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n //\n // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n // This is going to be our x_0 (and ε_0)\n xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n // From here, Newton's method give us:\n // x_{n+1} = (x_n + a / x_n) / 2\n //\n // One should note that:\n // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n // = ((x_n² + a) / (2 * x_n))² - a\n // = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n // = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n // = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n // = (x_n² - a)² / (2 * x_n)²\n // = ((x_n² - a) / (2 * x_n))²\n // ≥ 0\n // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n //\n // This gives us the proof of quadratic convergence of the sequence:\n // ε_{n+1} = | x_{n+1} - sqrt(a) |\n // = | (x_n + a / x_n) / 2 - sqrt(a) |\n // = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n // = | (x_n - sqrt(a))² / (2 * x_n) |\n // = | ε_n² / (2 * x_n) |\n // = ε_n² / | (2 * x_n) |\n //\n // For the first iteration, we have a special case where x_0 is known:\n // ε_1 = ε_0² / | (2 * x_0) |\n // ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n // ≤ 2**(2*e-4) / (3 * 2**(e-1))\n // ≤ 2**(e-3) / 3\n // ≤ 2**(e-3-log2(3))\n // ≤ 2**(e-4.5)\n //\n // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n // ε_{n+1} = ε_n² / | (2 * x_n) |\n // ≤ (2**(e-k))² / (2 * 2**(e-1))\n // ≤ 2**(2*e-2*k) / 2**e\n // ≤ 2**(e-2*k)\n xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above\n xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5\n xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9\n xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18\n xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36\n xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72\n\n // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n // sqrt(a) or sqrt(a) + 1.\n return xn - SafeCast.toUint(xn > a / xn);\n }\n }\n\n /**\n * @dev Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n uint256 exp;\n unchecked {\n exp = 128 * SafeCast.toUint(value > (1 << 128) - 1);\n value >>= exp;\n result += exp;\n\n exp = 64 * SafeCast.toUint(value > (1 << 64) - 1);\n value >>= exp;\n result += exp;\n\n exp = 32 * SafeCast.toUint(value > (1 << 32) - 1);\n value >>= exp;\n result += exp;\n\n exp = 16 * SafeCast.toUint(value > (1 << 16) - 1);\n value >>= exp;\n result += exp;\n\n exp = 8 * SafeCast.toUint(value > (1 << 8) - 1);\n value >>= exp;\n result += exp;\n\n exp = 4 * SafeCast.toUint(value > (1 << 4) - 1);\n value >>= exp;\n result += exp;\n\n exp = 2 * SafeCast.toUint(value > (1 << 2) - 1);\n value >>= exp;\n result += exp;\n\n result += SafeCast.toUint(value > 1);\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n uint256 isGt;\n unchecked {\n isGt = SafeCast.toUint(value > (1 << 128) - 1);\n value >>= isGt * 128;\n result += isGt * 16;\n\n isGt = SafeCast.toUint(value > (1 << 64) - 1);\n value >>= isGt * 64;\n result += isGt * 8;\n\n isGt = SafeCast.toUint(value > (1 << 32) - 1);\n value >>= isGt * 32;\n result += isGt * 4;\n\n isGt = SafeCast.toUint(value > (1 << 16) - 1);\n value >>= isGt * 16;\n result += isGt * 2;\n\n result += SafeCast.toUint(value > (1 << 8) - 1);\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n\n /**\n * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n */\n function toUint(bool b) internal pure returns (uint256 u) {\n assembly (\"memory-safe\") {\n u := iszero(iszero(b))\n }\n }\n}\n"},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n *\n * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n * one branch when needed, making this function more expensive.\n */\n function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {\n unchecked {\n // branchless ternary works because:\n // b ^ (a ^ b) == a\n // b ^ 0 == b\n return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));\n }\n }\n\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return ternary(a > b, a, b);\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return ternary(a < b, a, b);\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // Formula from the \"Bit Twiddling Hacks\" by Sean Eron Anderson.\n // Since `n` is a signed integer, the generated bytecode will use the SAR opcode to perform the right shift,\n // taking advantage of the most significant (or \"sign\" bit) in two's complement representation.\n // This opcode adds new most significant bits set to the value of the previous most significant bit. As a result,\n // the mask will either be `bytes32(0)` (if n is positive) or `~bytes32(0)` (if n is negative).\n int256 mask = n >> 255;\n\n // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.\n return uint256((n + mask) ^ mask);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Nonces.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides tracking nonces for addresses. Nonces will only increment.\n */\nabstract contract Nonces {\n /**\n * @dev The nonce used for an `account` is not the expected current nonce.\n */\n error InvalidAccountNonce(address account, uint256 currentNonce);\n\n mapping(address account => uint256) private _nonces;\n\n /**\n * @dev Returns the next unused nonce for an address.\n */\n function nonces(address owner) public view virtual returns (uint256) {\n return _nonces[owner];\n }\n\n /**\n * @dev Consumes a nonce.\n *\n * Returns the current value and increments nonce.\n */\n function _useNonce(address owner) internal virtual returns (uint256) {\n // For each account, the nonce has an initial value of 0, can only be incremented by one, and cannot be\n // decremented or reset. This guarantees that the nonce never overflows.\n unchecked {\n // It is important to do x++ and not ++x here.\n return _nonces[owner]++;\n }\n }\n\n /**\n * @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.\n */\n function _useCheckedNonce(address owner, uint256 nonce) internal virtual {\n uint256 current = _useNonce(owner);\n if (nonce != current) {\n revert InvalidAccountNonce(owner, current);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Panic.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n * using Panic for uint256;\n *\n * // Use any of the declared internal constants\n * function foo() { Panic.GENERIC.panic(); }\n *\n * // Alternatively\n * function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n /// @dev generic / unspecified error\n uint256 internal constant GENERIC = 0x00;\n /// @dev used by the assert() builtin\n uint256 internal constant ASSERT = 0x01;\n /// @dev arithmetic underflow or overflow\n uint256 internal constant UNDER_OVERFLOW = 0x11;\n /// @dev division or modulo by zero\n uint256 internal constant DIVISION_BY_ZERO = 0x12;\n /// @dev enum conversion error\n uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n /// @dev invalid encoding in storage\n uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n /// @dev empty array pop\n uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n /// @dev array out of bounds access\n uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n /// @dev resource error (too large allocation or too large array)\n uint256 internal constant RESOURCE_ERROR = 0x41;\n /// @dev calling invalid internal function\n uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n /// @dev Reverts with a panic code. Recommended to use with\n /// the internal constants with predefined codes.\n function panic(uint256 code) internal pure {\n assembly (\"memory-safe\") {\n mstore(0x00, 0x4e487b71)\n mstore(0x20, code)\n revert(0x1c, 0x24)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/ShortStrings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/ShortStrings.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\n// | length | 0x BB |\ntype ShortString is bytes32;\n\n/**\n * @dev This library provides functions to convert short memory strings\n * into a `ShortString` type that can be used as an immutable variable.\n *\n * Strings of arbitrary length can be optimized using this library if\n * they are short enough (up to 31 bytes) by packing them with their\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\n * fallback mechanism can be used for every other case.\n *\n * Usage example:\n *\n * ```solidity\n * contract Named {\n * using ShortStrings for *;\n *\n * ShortString private immutable _name;\n * string private _nameFallback;\n *\n * constructor(string memory contractName) {\n * _name = contractName.toShortStringWithFallback(_nameFallback);\n * }\n *\n * function name() external view returns (string memory) {\n * return _name.toStringWithFallback(_nameFallback);\n * }\n * }\n * ```\n */\nlibrary ShortStrings {\n // Used as an identifier for strings longer than 31 bytes.\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\n\n error StringTooLong(string str);\n error InvalidShortString();\n\n /**\n * @dev Encode a string of at most 31 chars into a `ShortString`.\n *\n * This will trigger a `StringTooLong` error is the input string is too long.\n */\n function toShortString(string memory str) internal pure returns (ShortString) {\n bytes memory bstr = bytes(str);\n if (bstr.length > 31) {\n revert StringTooLong(str);\n }\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\n }\n\n /**\n * @dev Decode a `ShortString` back to a \"normal\" string.\n */\n function toString(ShortString sstr) internal pure returns (string memory) {\n uint256 len = byteLength(sstr);\n // using `new string(len)` would work locally but is not memory safe.\n string memory str = new string(32);\n assembly (\"memory-safe\") {\n mstore(str, len)\n mstore(add(str, 0x20), sstr)\n }\n return str;\n }\n\n /**\n * @dev Return the length of a `ShortString`.\n */\n function byteLength(ShortString sstr) internal pure returns (uint256) {\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\n if (result > 31) {\n revert InvalidShortString();\n }\n return result;\n }\n\n /**\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\n */\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\n if (bytes(value).length < 32) {\n return toShortString(value);\n } else {\n StorageSlot.getStringSlot(store).value = value;\n return ShortString.wrap(FALLBACK_SENTINEL);\n }\n }\n\n /**\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\n */\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return toString(value);\n } else {\n return store;\n }\n }\n\n /**\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n * {setWithFallback}.\n *\n * WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\n */\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return byteLength(value);\n } else {\n return bytes(store).length;\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct Int256Slot {\n int256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n */\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns a `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n assembly (\"memory-safe\") {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.2.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SafeCast} from \"./math/SafeCast.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n using SafeCast for *;\n\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev The string being parsed contains characters that are not in scope of the given base.\n */\n error StringsInvalidChar();\n\n /**\n * @dev The string being parsed is not a properly formatted address.\n */\n error StringsInvalidAddressFormat();\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n assembly (\"memory-safe\") {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n assembly (\"memory-safe\") {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n * representation, according to EIP-55.\n */\n function toChecksumHexString(address addr) internal pure returns (string memory) {\n bytes memory buffer = bytes(toHexString(addr));\n\n // hash the hex part of buffer (skip length + 2 bytes, length 40)\n uint256 hashValue;\n assembly (\"memory-safe\") {\n hashValue := shr(96, keccak256(add(buffer, 0x22), 40))\n }\n\n for (uint256 i = 41; i > 1; --i) {\n // possible values for buffer[i] are 48 (0) to 57 (9) and 97 (a) to 102 (f)\n if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {\n // case shift by xoring with 0x20\n buffer[i] ^= 0x20;\n }\n hashValue >>= 4;\n }\n return string(buffer);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n\n /**\n * @dev Parse a decimal string and returns the value as a `uint256`.\n *\n * Requirements:\n * - The string must be formatted as `[0-9]*`\n * - The result must fit into an `uint256` type\n */\n function parseUint(string memory input) internal pure returns (uint256) {\n return parseUint(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseUint} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `[0-9]*`\n * - The result must fit into an `uint256` type\n */\n function parseUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n (bool success, uint256 value) = tryParseUint(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseUint(string memory input) internal pure returns (bool success, uint256 value) {\n return _tryParseUintUncheckedBounds(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n * character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseUint(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, uint256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseUintUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseUint} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseUintUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, uint256 value) {\n bytes memory buffer = bytes(input);\n\n uint256 result = 0;\n for (uint256 i = begin; i < end; ++i) {\n uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n if (chr > 9) return (false, 0);\n result *= 10;\n result += chr;\n }\n return (true, result);\n }\n\n /**\n * @dev Parse a decimal string and returns the value as a `int256`.\n *\n * Requirements:\n * - The string must be formatted as `[-+]?[0-9]*`\n * - The result must fit in an `int256` type.\n */\n function parseInt(string memory input) internal pure returns (int256) {\n return parseInt(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `[-+]?[0-9]*`\n * - The result must fit in an `int256` type.\n */\n function parseInt(string memory input, uint256 begin, uint256 end) internal pure returns (int256) {\n (bool success, int256 value) = tryParseInt(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n * the result does not fit in a `int256`.\n *\n * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n */\n function tryParseInt(string memory input) internal pure returns (bool success, int256 value) {\n return _tryParseIntUncheckedBounds(input, 0, bytes(input).length);\n }\n\n uint256 private constant ABS_MIN_INT256 = 2 ** 255;\n\n /**\n * @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n * character or if the result does not fit in a `int256`.\n *\n * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n */\n function tryParseInt(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, int256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseIntUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseInt} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseIntUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, int256 value) {\n bytes memory buffer = bytes(input);\n\n // Check presence of a negative sign.\n bytes1 sign = begin == end ? bytes1(0) : bytes1(_unsafeReadBytesOffset(buffer, begin)); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n bool positiveSign = sign == bytes1(\"+\");\n bool negativeSign = sign == bytes1(\"-\");\n uint256 offset = (positiveSign || negativeSign).toUint();\n\n (bool absSuccess, uint256 absValue) = tryParseUint(input, begin + offset, end);\n\n if (absSuccess && absValue < ABS_MIN_INT256) {\n return (true, negativeSign ? -int256(absValue) : int256(absValue));\n } else if (absSuccess && negativeSign && absValue == ABS_MIN_INT256) {\n return (true, type(int256).min);\n } else return (false, 0);\n }\n\n /**\n * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n *\n * Requirements:\n * - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n * - The result must fit in an `uint256` type.\n */\n function parseHexUint(string memory input) internal pure returns (uint256) {\n return parseHexUint(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseHexUint} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n * - The result must fit in an `uint256` type.\n */\n function parseHexUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n (bool success, uint256 value) = tryParseHexUint(input, begin, end);\n if (!success) revert StringsInvalidChar();\n return value;\n }\n\n /**\n * @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseHexUint(string memory input) internal pure returns (bool success, uint256 value) {\n return _tryParseHexUintUncheckedBounds(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n * invalid character.\n *\n * NOTE: This function will revert if the result does not fit in a `uint256`.\n */\n function tryParseHexUint(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, uint256 value) {\n if (end > bytes(input).length || begin > end) return (false, 0);\n return _tryParseHexUintUncheckedBounds(input, begin, end);\n }\n\n /**\n * @dev Implementation of {tryParseHexUint} that does not check bounds. Caller should make sure that\n * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n */\n function _tryParseHexUintUncheckedBounds(\n string memory input,\n uint256 begin,\n uint256 end\n ) private pure returns (bool success, uint256 value) {\n bytes memory buffer = bytes(input);\n\n // skip 0x prefix if present\n bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(buffer, begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n uint256 offset = hasPrefix.toUint() * 2;\n\n uint256 result = 0;\n for (uint256 i = begin + offset; i < end; ++i) {\n uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n if (chr > 15) return (false, 0);\n result *= 16;\n unchecked {\n // Multiplying by 16 is equivalent to a shift of 4 bits (with additional overflow check).\n // This guaratees that adding a value < 16 will not cause an overflow, hence the unchecked.\n result += chr;\n }\n }\n return (true, result);\n }\n\n /**\n * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n *\n * Requirements:\n * - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`\n */\n function parseAddress(string memory input) internal pure returns (address) {\n return parseAddress(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseAddress} that parses a substring of `input` located between position `begin` (included) and\n * `end` (excluded).\n *\n * Requirements:\n * - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`\n */\n function parseAddress(string memory input, uint256 begin, uint256 end) internal pure returns (address) {\n (bool success, address value) = tryParseAddress(input, begin, end);\n if (!success) revert StringsInvalidAddressFormat();\n return value;\n }\n\n /**\n * @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n * formatted address. See {parseAddress} requirements.\n */\n function tryParseAddress(string memory input) internal pure returns (bool success, address value) {\n return tryParseAddress(input, 0, bytes(input).length);\n }\n\n /**\n * @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n * formatted address. See {parseAddress} requirements.\n */\n function tryParseAddress(\n string memory input,\n uint256 begin,\n uint256 end\n ) internal pure returns (bool success, address value) {\n if (end > bytes(input).length || begin > end) return (false, address(0));\n\n bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(bytes(input), begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n uint256 expectedLength = 40 + hasPrefix.toUint() * 2;\n\n // check that input is the correct length\n if (end - begin == expectedLength) {\n // length guarantees that this does not overflow, and value is at most type(uint160).max\n (bool s, uint256 v) = _tryParseHexUintUncheckedBounds(input, begin, end);\n return (s, address(uint160(v)));\n } else {\n return (false, address(0));\n }\n }\n\n function _tryParseChr(bytes1 chr) private pure returns (uint8) {\n uint8 value = uint8(chr);\n\n // Try to parse `chr`:\n // - Case 1: [0-9]\n // - Case 2: [a-f]\n // - Case 3: [A-F]\n // - otherwise not supported\n unchecked {\n if (value > 47 && value < 58) value -= 48;\n else if (value > 96 && value < 103) value -= 87;\n else if (value > 64 && value < 71) value -= 55;\n else return type(uint8).max;\n }\n\n return value;\n }\n\n /**\n * @dev Reads a bytes32 from a bytes array without bounds checking.\n *\n * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n * assembly block as such would prevent some optimizations.\n */\n function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {\n // This is not memory safe in the general case, but all calls to this private function are within bounds.\n assembly (\"memory-safe\") {\n value := mload(add(buffer, add(0x20, offset)))\n }\n }\n}\n"},"contracts/interfaces/IReClammPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\n\nimport { PriceRatioState } from \"../lib/ReClammMath.sol\";\n\n/// @dev Struct with data for deploying a new ReClammPool.\nstruct ReClammPoolParams {\n string name;\n string symbol;\n string version;\n uint256 dailyPriceShiftExponent;\n uint64 centerednessMargin;\n uint256 initialMinPrice;\n uint256 initialMaxPrice;\n uint256 initialTargetPrice;\n bool tokenAPriceIncludesRate;\n bool tokenBPriceIncludesRate;\n}\n\n/**\n * @notice ReClamm Pool data that cannot change after deployment.\n * @dev Note that the initial prices are used only during pool initialization. After the initialization, the prices\n * will shift according to price ratio and pool centeredness.\n *\n * @param tokens Pool tokens, sorted in token registration order\n * @param decimalScalingFactors Adjust for token decimals to retain calculation precision. FP(1) for 18-decimal tokens\n * @param tokenAPriceIncludesRate True if the prices incorporate a rate for token A\n * @param tokenBPriceIncludesRate True if the prices incorporate a rate for token B\n * @param minSwapFeePercentage The minimum allowed static swap fee percentage; mitigates precision loss due to rounding\n * @param maxSwapFeePercentage The maximum allowed static swap fee percentage\n * @param initialMinPrice The initial minimum price of token A in terms of token B (possibly applying rates)\n * @param initialMaxPrice The initial maximum price of token A in terms of token B (possibly applying rates)\n * @param initialTargetPrice The initial target price of token A in terms of token B (possibly applying rates)\n * @param initialDailyPriceShiftExponent The initial daily price shift exponent\n * @param initialCenterednessMargin The initial centeredness margin (threshold for initiating a range update)\n * @param maxDailyPriceShiftExponent The maximum exponent for the pool's price shift, as an 18-decimal FP percentage\n * @param maxDailyPriceRatioUpdateRate The maximum percentage the price range can expand/contract per day\n * @param minPriceRatioUpdateDuration The minimum duration for the price ratio update, expressed in seconds\n * @param minPriceRatioDelta The minimum absolute difference between current and new fourth root price ratio\n * @param balanceRatioAndPriceTolerance The maximum amount initialized pool parameters can deviate from ideal values\n */\nstruct ReClammPoolImmutableData {\n // Base Pool\n IERC20[] tokens;\n uint256[] decimalScalingFactors;\n bool tokenAPriceIncludesRate;\n bool tokenBPriceIncludesRate;\n uint256 minSwapFeePercentage;\n uint256 maxSwapFeePercentage;\n // Initialization\n uint256 initialMinPrice;\n uint256 initialMaxPrice;\n uint256 initialTargetPrice;\n uint256 initialDailyPriceShiftExponent;\n uint256 initialCenterednessMargin;\n // Operating Limits\n uint256 maxDailyPriceShiftExponent;\n uint256 maxDailyPriceRatioUpdateRate;\n uint256 minPriceRatioUpdateDuration;\n uint256 minPriceRatioDelta;\n uint256 balanceRatioAndPriceTolerance;\n}\n\n/**\n * @notice Snapshot of current ReClamm Pool data that can change.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n * in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n * there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * Base Pool:\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n * @param totalSupply The current total supply of the pool tokens (BPT)\n *\n * ReClamm:\n * @param lastTimestamp The timestamp of the last user interaction\n * @param lastVirtualBalances The last virtual balances of the pool\n * @param dailyPriceShiftExponent Virtual balances will change by 2^(dailyPriceShiftExponent) per day\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n * @param centerednessMargin The centeredness margin of the pool\n * @param currentPriceRatio The current price ratio, an interpolation of the price ratio state\n * @param currentFourthRootPriceRatio The current fourth root price ratio (stored in the price ratio state)\n * @param startFourthRootPriceRatio The fourth root price ratio at the start of an update\n * @param endFourthRootPriceRatio The fourth root price ratio at the end of an update\n * @param priceRatioUpdateStartTime The timestamp when the update begins\n * @param priceRatioUpdateEndTime The timestamp when the update ends\n *\n * Pool State:\n * @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n * @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n * @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate\n */\nstruct ReClammPoolDynamicData {\n // Base Pool\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256 staticSwapFeePercentage;\n uint256 totalSupply;\n // ReClamm\n uint256 lastTimestamp;\n uint256[] lastVirtualBalances;\n uint256 dailyPriceShiftExponent;\n uint256 dailyPriceShiftBase;\n uint256 centerednessMargin;\n uint256 currentPriceRatio;\n uint256 currentFourthRootPriceRatio;\n uint256 startFourthRootPriceRatio;\n uint256 endFourthRootPriceRatio;\n uint32 priceRatioUpdateStartTime;\n uint32 priceRatioUpdateEndTime;\n // Pool State\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\ninterface IReClammPool is IBasePool {\n /********************************************************\n Events\n ********************************************************/\n\n /**\n * @notice The Price Ratio State was updated.\n * @dev This event will be emitted on initialization, and when governance initiates a price ratio update.\n * @param startFourthRootPriceRatio The fourth root price ratio at the start of an update\n * @param endFourthRootPriceRatio The fourth root price ratio at the end of an update\n * @param priceRatioUpdateStartTime The timestamp when the update begins\n * @param priceRatioUpdateEndTime The timestamp when the update ends\n */\n event PriceRatioStateUpdated(\n uint256 startFourthRootPriceRatio,\n uint256 endFourthRootPriceRatio,\n uint256 priceRatioUpdateStartTime,\n uint256 priceRatioUpdateEndTime\n );\n\n /**\n * @notice The virtual balances were updated after a user interaction (swap or liquidity operation).\n * @dev Unless the price range is changing, the virtual balances remain in proportion to the real balances.\n * These balances will also be updated when the centeredness margin or daily price shift exponent is changed.\n *\n * @param virtualBalanceA Offset to the real balance reserves\n * @param virtualBalanceB Offset to the real balance reserves\n */\n event VirtualBalancesUpdated(uint256 virtualBalanceA, uint256 virtualBalanceB);\n\n /**\n * @notice The daily price shift exponent was updated.\n * @dev This will be emitted on deployment, and when changed by governance or the swap manager.\n * @param dailyPriceShiftExponent The new daily price shift exponent\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n */\n event DailyPriceShiftExponentUpdated(uint256 dailyPriceShiftExponent, uint256 dailyPriceShiftBase);\n\n /**\n * @notice The centeredness margin was updated.\n * @dev This will be emitted on deployment, and when changed by governance or the swap manager.\n * @param centerednessMargin The new centeredness margin\n */\n event CenterednessMarginUpdated(uint256 centerednessMargin);\n\n /**\n * @notice The timestamp of the last user interaction.\n * @dev This is emitted on every swap or liquidity operation.\n * @param lastTimestamp The timestamp of the operation\n */\n event LastTimestampUpdated(uint32 lastTimestamp);\n\n /******************************************************** \n Errors\n ********************************************************/\n\n /// @notice The function is not implemented.\n error NotImplemented();\n\n /// @notice The centeredness margin is above 100% (Fixed point 1).\n error InvalidCenterednessMargin();\n\n /// @notice The vault is not locked, so the pool balances are manipulable.\n error VaultIsNotLocked();\n\n /// @notice The pool is outside the target price range before or after the operation.\n error PoolOutsideTargetRange();\n\n /// @notice The start time for the price ratio update is invalid (either in the past or after the given end time).\n error InvalidStartTime();\n\n /// @notice\n error InvalidInitialPrice();\n\n /// @notice The daily price shift exponent is too high.\n error DailyPriceShiftExponentTooHigh();\n\n /// @notice The difference between end time and start time is too short for the price ratio update.\n error PriceRatioUpdateDurationTooShort();\n\n /// @notice The rate of change exceeds the maximum daily price ratio rate.\n error PriceRatioUpdateTooFast();\n\n /// @dev The price ratio being set is too close to the current one.\n error PriceRatioDeltaBelowMin(uint256 fourthRootPriceRatioDelta);\n\n /// @dev An attempt was made to stop the price ratio update while no update was in progress.\n error PriceRatioNotUpdating();\n\n /**\n * @notice `getRate` from `IRateProvider` was called on a ReClamm Pool.\n * @dev ReClamm Pools should never be nested. This is because the invariant of the pool is only used to calculate\n * swaps. When tracking the market price or shrinking or expanding the liquidity concentration, the invariant can\n * can decrease or increase independent of the balances, which makes the BPT rate meaningless.\n */\n error ReClammPoolBptRateUnsupported();\n\n /// @dev Function called before initializing the pool.\n error PoolNotInitialized();\n\n /**\n * @notice The initial balances of the ReClamm Pool must respect the initialization ratio bounds.\n * @dev On pool creation, a theoretical balance ratio is computed from the min, max, and target prices. During\n * initialization, the actual balance ratio is compared to this theoretical value, and must fall within a fixed,\n * symmetrical tolerance range, or initialization reverts. If it were outside this range, the initial price would\n * diverge too far from the target price, and the pool would be vulnerable to arbitrage.\n */\n error BalanceRatioExceedsTolerance();\n\n /// @notice The current price interval or spot price is outside the initialization price range.\n error WrongInitializationPrices();\n\n /********************************************************\n Pool State Getters\n ********************************************************/\n\n /**\n * @notice Compute the initialization amounts, given a reference token and amount.\n * @dev Convenience function to compute the initial funding amount for the second token, given the first. It\n * returns the amount of tokens in raw amounts, which can be used as-is to initialize the pool using a standard\n * router.\n *\n * @param referenceToken The token whose amount is known\n * @param referenceAmountInRaw The amount of the reference token to be used for initialization, in raw amounts\n * @return initialBalancesRaw Initialization raw balances sorted in token registration order, including the given\n * amount and a calculated raw amount for the other token\n */\n function computeInitialBalancesRaw(\n IERC20 referenceToken,\n uint256 referenceAmountInRaw\n ) external view returns (uint256[] memory initialBalancesRaw);\n\n /**\n * @notice Computes the current total price range.\n * @dev Prices represent the value of token A denominated in token B (i.e., how many B tokens equal the value of\n * one A token).\n *\n * The \"target\" range is then defined as a subset of this total price range, with the margin trimmed symmetrically\n * from each side. The pool endeavors to adjust this range as necessary to keep the current market price within it.\n *\n * The computation involves the current live balances (though it should not be sensitive to them), so manipulating\n * the result of this function is theoretically possible while the Vault is unlocked. Ensure that the Vault is\n * locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\n *\n * @return minPrice The lower limit of the current total price range\n * @return maxPrice The upper limit of the current total price range\n */\n function computeCurrentPriceRange() external view returns (uint256 minPrice, uint256 maxPrice);\n\n /**\n * @notice Computes the current virtual balances and a flag indicating whether they have changed.\n * @dev The current virtual balances are calculated based on the last virtual balances. If the pool is within the\n * target range and the price ratio is not updating, the virtual balances will not change. If the pool is outside\n * the target range, or the price ratio is updating, this function will calculate the new virtual balances based on\n * the timestamp of the last user interaction. Note that virtual balances are always scaled18 values.\n *\n * Current virtual balances might change as a result of an operation, manipulating the value to some degree.\n * Ensure that the vault is locked before calling this function if this side effect is undesired.\n *\n * @return currentVirtualBalanceA The current virtual balance of token A\n * @return currentVirtualBalanceB The current virtual balance of token B\n * @return changed Whether the current virtual balances are different from `lastVirtualBalances`\n */\n function computeCurrentVirtualBalances()\n external\n view\n returns (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed);\n\n /**\n * @notice Computes the current target price. This is the ratio of the total (i.e., real + virtual) balances (B/A).\n * @dev Given the nature of the internal pool maths (particularly when virtual balances are shifting), it is not\n * recommended to use this pool as a price oracle.\n * @return currentTargetPrice Target price at the current pool state (real and virtual balances)\n */\n function computeCurrentSpotPrice() external view returns (uint256 currentTargetPrice);\n\n /**\n * @notice Getter for the timestamp of the last user interaction.\n * @return lastTimestamp The timestamp of the operation\n */\n function getLastTimestamp() external view returns (uint32 lastTimestamp);\n\n /**\n * @notice Getter for the last virtual balances.\n * @return lastVirtualBalanceA The last virtual balance of token A\n * @return lastVirtualBalanceB The last virtual balance of token B\n */\n function getLastVirtualBalances() external view returns (uint256 lastVirtualBalanceA, uint256 lastVirtualBalanceB);\n\n /**\n * @notice Returns the centeredness margin.\n * @dev The centeredness margin defines how closely an unbalanced pool can approach the limits of the total price\n * range and still be considered within the target range. The margin is symmetrical. If it's 20%, the target\n * range is defined as >= 20% above the lower bound and <= 20% below the upper bound.\n *\n * @return centerednessMargin The current centeredness margin\n */\n function getCenterednessMargin() external view returns (uint256 centerednessMargin);\n\n /**\n * @notice Returns the daily price shift exponent as an 18-decimal FP.\n * @dev At 100% (FixedPoint.ONE), the price range doubles (or halves) within a day.\n * @return dailyPriceShiftExponent The daily price shift exponent\n */\n function getDailyPriceShiftExponent() external view returns (uint256 dailyPriceShiftExponent);\n\n /**\n * @notice Returns the internal time constant representation for the daily price shift exponent (tau).\n * @dev Equals dailyPriceShiftExponent / _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT.\n * @return dailyPriceShiftBase The internal representation for the daily price shift exponent\n */\n function getDailyPriceShiftBase() external view returns (uint256 dailyPriceShiftBase);\n\n /**\n * @notice Returns the current price ratio state.\n * @dev This includes start and end values for the fourth root price ratio, and start and end times for the update.\n * @return priceRatioState The current price ratio state\n */\n function getPriceRatioState() external view returns (PriceRatioState memory priceRatioState);\n\n /**\n * @notice Computes the current fourth root of price ratio.\n * @dev The price ratio is the ratio of the max price to the min price, according to current real and virtual\n * balances. This function returns its fourth root.\n *\n * @return currentFourthRootPriceRatio The current fourth root of price ratio\n */\n function computeCurrentFourthRootPriceRatio() external view returns (uint256 currentFourthRootPriceRatio);\n\n /**\n * @notice Computes the current price ratio.\n * @dev The price ratio is the ratio of the max price to the min price, according to current real and virtual\n * balances.\n *\n * @return currentPriceRatio The current price ratio\n */\n function computeCurrentPriceRatio() external view returns (uint256 currentPriceRatio);\n\n /**\n * @notice Compute whether the pool is within the target price range.\n * @dev The pool is considered to be in the target range when the centeredness is greater than or equal to the\n * centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness\n * margin).\n *\n * Note that this function reports the state *after* the last operation. It is not very meaningful during or\n * outside an operation, as the current or next operation could change it. If this is unlikely (e.g., for high-\n * liquidity pools with high centeredness and small swaps), it may nonetheless be useful for some applications,\n * such as off-chain indicators.\n *\n * The state depends on the current balances and centeredness margin, and it uses the *last* virtual balances in\n * the calculation. This is fine because the real balances can only change during an operation, and the margin can\n * only change through the permissioned setter - both of which update the virtual balances. So it is not possible\n * for the current and last virtual balances to get out-of-sync.\n *\n * The range calculation is affected by the current live balances, so manipulating the result of this function\n * is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this\n * side effect is undesired (does not apply to off-chain calls).\n *\n * @return isWithinTargetRange True if pool centeredness is greater than or equal to the centeredness margin\n */\n function isPoolWithinTargetRange() external view returns (bool isWithinTargetRange);\n\n /**\n * @notice Compute whether the pool is within the target price range, recomputing the virtual balances.\n * @dev The pool is considered to be in the target range when the centeredness is greater than the centeredness\n * margin (i.e., the price is within the subset of the total price range defined by the centeredness margin.)\n *\n * This function is identical to `isPoolWithinTargetRange` above, except that it recomputes and uses the current\n * instead of the last virtual balances. As noted above, these should normally give the same result.\n *\n * @return isWithinTargetRange True if pool centeredness is greater than the centeredness margin\n * @return virtualBalancesChanged True if the current virtual balances would not match the last virtual balances\n */\n function isPoolWithinTargetRangeUsingCurrentVirtualBalances()\n external\n view\n returns (bool isWithinTargetRange, bool virtualBalancesChanged);\n\n /**\n * @notice Compute the current pool centeredness (a measure of how unbalanced the pool is).\n * @dev A value of 0 means the pool is at the edge of the price range (i.e., one of the real balances is zero).\n * A value of FixedPoint.ONE means the balances (and market price) are exactly in the middle of the range.\n *\n * The centeredness margin is affected by the current live balances, so manipulating the result of this function\n * is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this\n * side effect is undesired (does not apply to off-chain calls).\n *\n * @return poolCenteredness The current centeredness margin (as a 18-decimal FP value)\n * @return isPoolAboveCenter True if the pool is above the center, false otherwise\n */\n function computeCurrentPoolCenteredness() external view returns (uint256 poolCenteredness, bool isPoolAboveCenter);\n\n /**\n * @notice Get dynamic pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all dynamic ReClamm pool parameters\n */\n function getReClammPoolDynamicData() external view returns (ReClammPoolDynamicData memory data);\n\n /**\n * @notice Get immutable pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all immutable ReClamm pool parameters\n */\n function getReClammPoolImmutableData() external view returns (ReClammPoolImmutableData memory data);\n\n /********************************************************\n Pool State Setters\n ********************************************************/\n\n /**\n * @notice Initiates a price ratio update by setting a new ending price ratio and time interval.\n * @dev The price ratio is calculated by interpolating between the start and end times. The start price ratio will\n * be set to the current fourth root price ratio of the pool. This is a permissioned function.\n *\n * @param endPriceRatio The new ending value of the price ratio, as a floating point value (e.g., 8 = 8e18)\n * @param priceRatioUpdateStartTime The timestamp when the price ratio update will start\n * @param priceRatioUpdateEndTime The timestamp when the price ratio update will end\n * @return actualPriceRatioUpdateStartTime The actual start time for the price ratio update (min: block.timestamp).\n */\n function startPriceRatioUpdate(\n uint256 endPriceRatio,\n uint256 priceRatioUpdateStartTime,\n uint256 priceRatioUpdateEndTime\n ) external returns (uint256 actualPriceRatioUpdateStartTime);\n\n /**\n * @notice Stops an ongoing price ratio update.\n * @dev The price ratio is calculated by interpolating between the start and end times. The new end price ratio\n * will be set to the current one at the current timestamp, effectively pausing the update.\n * This is a permissioned function.\n */\n function stopPriceRatioUpdate() external;\n\n /**\n * @notice Updates the daily price shift exponent, as a 18-decimal FP percentage.\n * @dev This function is considered a user interaction, and therefore recalculates the virtual balances and sets\n * the last timestamp. This is a permissioned function.\n *\n * A percentage of 100% will make the price range double (or halve) within a day.\n * A percentage of 200% will make the price range quadruple (or quartered) within a day.\n *\n * More generically, the new price range will be either\n * Range_old * 2^(newDailyPriceShiftExponent / 100), or\n * Range_old / 2^(newDailyPriceShiftExponent / 100)\n *\n * @param newDailyPriceShiftExponent The new daily price shift exponent\n * @return actualNewDailyPriceShiftExponent The actual new daily price shift exponent, after accounting for\n * precision loss incurred when dealing with the internal representation of the exponent\n */\n function setDailyPriceShiftExponent(\n uint256 newDailyPriceShiftExponent\n ) external returns (uint256 actualNewDailyPriceShiftExponent);\n\n /**\n * @notice Set the centeredness margin.\n * @dev This function is considered a user action, so it will update the last timestamp and virtual balances.\n * This is a permissioned function.\n *\n * @param newCenterednessMargin The new centeredness margin\n */\n function setCenterednessMargin(uint256 newCenterednessMargin) external;\n}\n"},"contracts/lib/ReClammMath.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n// solhint-disable not-rely-on-time\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nstruct PriceRatioState {\n uint96 startFourthRootPriceRatio;\n uint96 endFourthRootPriceRatio;\n uint32 priceRatioUpdateStartTime;\n uint32 priceRatioUpdateEndTime;\n}\n\n// ReClamm pools are always 2-token pools, and the documentation assigns the first token (in sorted order) the\n// subscript `a`, and the second token `b`. Define these here to make the code more readable and self-documenting.\nuint256 constant a = 0;\nuint256 constant b = 1;\n\nlibrary ReClammMath {\n using FixedPoint for uint256;\n using SafeCast for *;\n using ReClammMath for bool;\n\n /// @notice The swap result is greater than the real balance of the token (i.e., the balance would drop below zero).\n error AmountOutGreaterThanBalance();\n\n // When a pool is outside the target range, we start adjusting the price range by altering the virtual balances,\n // which affects the price. At a DailyPriceShiftExponent of 100%, we want to be able to change the price by a factor\n // of two: either doubling or halving it over the course of a day (86,400 seconds). The virtual balances must\n // change at the same rate. Therefore, if we want to double it in a day:\n //\n // 1. `V_next = 2*V_current`\n // 2. In the equation `V_next = V_current * (1 - tau)^(n+1)`, isolate tau.\n // 3. Replace `V_next` with `2*V_current` and `n` with `86400` to get `tau = 1 - pow(2, 1/(86400+1))`.\n // 4. Since `tau = dailyPriceShiftExponent/x`, then `x = dailyPriceShiftExponent/tau`.\n // Since dailyPriceShiftExponent = 100%, then `x = 100%/(1 - pow(2, 1/(86400+1)))`, which is 124649.\n //\n // This constant shall be used to scale the dailyPriceShiftExponent, which is a percentage, to the actual value of\n // tau that will be used in the formula.\n uint256 private constant _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT = 124649;\n\n // We need to use a random number to calculate the initial virtual and real balances. This number will be scaled\n // later, during initialization, according to the actual liquidity added. Choosing a large number will maintain\n // precision when the pool is initialized with large amounts.\n uint256 private constant _INITIALIZATION_MAX_BALANCE_A = 1e6 * 1e18;\n\n /**\n * @notice Get the current virtual balances and compute the invariant of the pool using constant product.\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param lastVirtualBalanceA The last virtual balance of token A\n * @param lastVirtualBalanceB The last virtual balance of token B\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n * @param lastTimestamp The timestamp of the last user interaction with the pool\n * @param centerednessMargin A symmetrical measure of how closely an unbalanced pool can approach the limits of the\n * price range before it is considered outside the target range\n * @param priceRatioState A struct containing start and end price ratios and a time interval\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The invariant of the pool\n */\n function computeInvariant(\n uint256[] memory balancesScaled18,\n uint256 lastVirtualBalanceA,\n uint256 lastVirtualBalanceB,\n uint256 dailyPriceShiftBase,\n uint32 lastTimestamp,\n uint64 centerednessMargin,\n PriceRatioState storage priceRatioState,\n Rounding rounding\n ) internal view returns (uint256 invariant) {\n (uint256 virtualBalanceA, uint256 virtualBalanceB, ) = computeCurrentVirtualBalances(\n balancesScaled18,\n lastVirtualBalanceA,\n lastVirtualBalanceB,\n dailyPriceShiftBase,\n lastTimestamp,\n centerednessMargin,\n priceRatioState\n );\n\n return computeInvariant(balancesScaled18, virtualBalanceA, virtualBalanceB, rounding);\n }\n\n /**\n * @notice Compute the invariant of the pool using constant product.\n * @dev Note that the invariant is computed as (x+a)(y+b), without a square root. This is because the calculations\n * of virtual balance updates are easier with this invariant. Unlike most other pools, the ReClamm invariant will\n * change over time, if the pool is outside the target range, or the price ratio is updating, so these pools are\n * not composable. Therefore, the BPT value is meaningless.\n *\n * Consequently, liquidity can only be added or removed proportionally, as these operations do not depend on the\n * invariant. Therefore, it does not matter that the relationship between the invariant and liquidity is non-\n * linear; the invariant is only used to calculate swaps.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA The last virtual balance of token A\n * @param virtualBalanceB The last virtual balance of token B\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The invariant of the pool\n */\n function computeInvariant(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB,\n Rounding rounding\n ) internal pure returns (uint256) {\n function(uint256, uint256) pure returns (uint256) _mulUpOrDown = rounding == Rounding.ROUND_DOWN\n ? FixedPoint.mulDown\n : FixedPoint.mulUp;\n\n return _mulUpOrDown((balancesScaled18[a] + virtualBalanceA), (balancesScaled18[b] + virtualBalanceB));\n }\n\n /**\n * @notice Compute the `amountOut` of tokenOut in a swap, given the current balances and virtual balances.\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceAе The last virtual balance of token A\n * @param virtualBalanceB The last virtual balance of token B\n * @param tokenInIndex Index of the token being swapped in\n * @param tokenOutIndex Index of the token being swapped out\n * @param amountInScaled18 The exact amount of `tokenIn` (i.e., the amount given in an ExactIn swap)\n * @return amountOutScaled18 The calculated amount of `tokenOut` returned in an ExactIn swap\n */\n function computeOutGivenIn(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB,\n uint256 tokenInIndex,\n uint256 tokenOutIndex,\n uint256 amountInScaled18\n ) internal pure returns (uint256 amountOutScaled18) {\n // `amountOutScaled18 = currentTotalTokenOutPoolBalance - newTotalTokenOutPoolBalance`,\n // where `currentTotalTokenOutPoolBalance = balancesScaled18[tokenOutIndex] + virtualBalanceTokenOut`\n // and `newTotalTokenOutPoolBalance = invariant / (currentTotalTokenInPoolBalance + amountInScaled18)`.\n // In other words,\n // +--------------------------------------------------+\n // | L |\n // | Ao = Bo + Vo - --------------------- |\n // | (Bi + Vi + Ai) |\n // +--------------------------------------------------+\n // Simplify by:\n // - replacing `L = (Bo + Vo) (Bi + Vi)`, and\n // - multiplying `(Bo + Vo)` by `(Bi + Vi + Ai) / (Bi + Vi + Ai)`:\n // +--------------------------------------------------+\n // | (Bo + Vo) Ai |\n // | Ao = ------------------------------ |\n // | (Bi + Vi + Ai) |\n // +--------------------------------------------------+\n // | Where: |\n // | Ao = Amount out |\n // | Bo = Balance token out |\n // | Vo = Virtual balance token out |\n // | Ai = Amount in |\n // | Bi = Balance token in |\n // | Vi = Virtual balance token in |\n // +--------------------------------------------------+\n (uint256 virtualBalanceTokenIn, uint256 virtualBalanceTokenOut) = tokenInIndex == a\n ? (virtualBalanceA, virtualBalanceB)\n : (virtualBalanceB, virtualBalanceA);\n\n amountOutScaled18 =\n ((balancesScaled18[tokenOutIndex] + virtualBalanceTokenOut) * amountInScaled18) /\n (balancesScaled18[tokenInIndex] + virtualBalanceTokenIn + amountInScaled18);\n\n if (amountOutScaled18 > balancesScaled18[tokenOutIndex]) {\n // Amount out cannot be greater than the real balance of the token in the pool.\n revert AmountOutGreaterThanBalance();\n }\n }\n\n /**\n * @notice Compute the `amountIn` of tokenIn in a swap, given the current balances and virtual balances.\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA The last virtual balances of token A\n * @param virtualBalanceB The last virtual balances of token B\n * @param tokenInIndex Index of the token being swapped in\n * @param tokenOutIndex Index of the token being swapped out\n * @param amountOutScaled18 The exact amount of `tokenOut` (i.e., the amount given in an ExactOut swap)\n * @return amountInScaled18 The calculated amount of `tokenIn` returned in an ExactOut swap\n */\n function computeInGivenOut(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB,\n uint256 tokenInIndex,\n uint256 tokenOutIndex,\n uint256 amountOutScaled18\n ) internal pure returns (uint256 amountInScaled18) {\n // `amountInScaled18 = newTotalTokenOutPoolBalance - currentTotalTokenInPoolBalance`,\n // where `newTotalTokenOutPoolBalance = invariant / (currentTotalTokenOutPoolBalance - amountOutScaled18)`\n // and `currentTotalTokenInPoolBalance = balancesScaled18[tokenInIndex] + virtualBalanceTokenIn`.\n // In other words,\n // +--------------------------------------------------+\n // | L |\n // | Ai = --------------------- - (Bi + Vi) |\n // | (Bo + Vo - Ao) |\n // +--------------------------------------------------+\n // Simplify by:\n // - replacing `L = (Bo + Vo) (Bi + Vi)`, and\n // - multiplying `(Bi + Vi)` by `(Bo + Vo - Ao) / (Bo + Vo - Ao)`:\n // +--------------------------------------------------+\n // | (Bi + Vi) Ao |\n // | Ai = ------------------------------ |\n // | (Bo + Vo - Ao) |\n // +--------------------------------------------------+\n // | Where: |\n // | Ao = Amount out |\n // | Bo = Balance token out |\n // | Vo = Virtual balance token out |\n // | Ai = Amount in |\n // | Bi = Balance token in |\n // | Vi = Virtual balance token in |\n // +--------------------------------------------------+\n\n if (amountOutScaled18 > balancesScaled18[tokenOutIndex]) {\n // Amount out cannot be greater than the real balance of the token in the pool.\n revert AmountOutGreaterThanBalance();\n }\n\n (uint256 virtualBalanceTokenIn, uint256 virtualBalanceTokenOut) = tokenInIndex == a\n ? (virtualBalanceA, virtualBalanceB)\n : (virtualBalanceB, virtualBalanceA);\n\n // Round up to favor the vault (i.e. request larger amount in from the user).\n amountInScaled18 = FixedPoint.mulDivUp(\n balancesScaled18[tokenInIndex] + virtualBalanceTokenIn,\n amountOutScaled18,\n balancesScaled18[tokenOutIndex] + virtualBalanceTokenOut - amountOutScaled18\n );\n }\n\n /**\n * @notice Computes the theoretical initial state of a ReClamm pool based on its price parameters.\n * @dev This function calculates three key components needed to initialize a ReClamm pool:\n * 1. Initial real token balances - Using a reference value (_INITIALIZATION_MAX_BALANCE_A) that will be\n * scaled later during actual pool initialization based on the actual tokens provided\n * 2. Initial virtual balances - Additional balances used to control the pool's price range\n * 3. Price ratio - The ratio between the pool's minimum and maximum price boundaries\n *\n * Note: The actual balances used in pool initialization will be proportionally scaled versions\n * of these theoretical values, maintaining the same ratios but adjusted to the actual amount of\n * liquidity provided.\n *\n * Price is defined as (balanceB + virtualBalanceB) / (balanceA + virtualBalanceA),\n * where A and B are the pool tokens, sorted by address (A is the token with the lowest address).\n * For example, if the pool is ETH/USDC, and USDC has an address that is smaller than ETH, this price will\n * be defined as ETH/USDC (meaning, how much ETH is required to buy 1 USDC).\n *\n * @param minPriceScaled18 The minimum price limit of the pool\n * @param maxPriceScaled18 The maximum price limit of the pool\n * @param targetPriceScaled18 The desired initial price point within the total price range (i.e., the midpoint)\n * @return realBalancesScaled18 Array of theoretical initial token balances [tokenA, tokenB]\n * @return virtualBalanceAScaled18 The theoretical initial virtual balance of token A [virtualA]\n * @return virtualBalanceBScaled18 The theoretical initial virtual balance of token B [virtualB]\n * @return priceRatio The ratio of the max price to the min price\n */\n function computeTheoreticalPriceRatioAndBalances(\n uint256 minPriceScaled18,\n uint256 maxPriceScaled18,\n uint256 targetPriceScaled18\n )\n internal\n pure\n returns (\n uint256[] memory realBalancesScaled18,\n uint256 virtualBalanceAScaled18,\n uint256 virtualBalanceBScaled18,\n uint256 priceRatio\n )\n {\n priceRatio = maxPriceScaled18.divDown(minPriceScaled18);\n // In the formulas below, Ra_max is a random number that defines the maximum real balance of token A, and\n // consequently a random initial liquidity. We will scale all balances according to the actual amount of\n // liquidity provided during initialization.\n uint256 sqrtPriceRatio = sqrtScaled18(priceRatio);\n\n // Va = Ra_max / (sqrtPriceRatio - 1)\n virtualBalanceAScaled18 = _INITIALIZATION_MAX_BALANCE_A.divDown(sqrtPriceRatio - FixedPoint.ONE);\n // Vb = minPrice * (Va + Ra_max)\n virtualBalanceBScaled18 = minPriceScaled18.mulDown(virtualBalanceAScaled18 + _INITIALIZATION_MAX_BALANCE_A);\n\n realBalancesScaled18 = new uint256[](2);\n // Rb = sqrt(targetPrice * Vb * (Ra_max + Va)) - Vb\n realBalancesScaled18[b] =\n sqrtScaled18(\n targetPriceScaled18.mulUp(virtualBalanceBScaled18).mulUp(\n _INITIALIZATION_MAX_BALANCE_A + virtualBalanceAScaled18\n )\n ) -\n virtualBalanceBScaled18;\n // Ra = (Rb + Vb - (Va * targetPrice)) / targetPrice\n realBalancesScaled18[a] = (realBalancesScaled18[b] +\n virtualBalanceBScaled18 -\n virtualBalanceAScaled18.mulDown(targetPriceScaled18)).divDown(targetPriceScaled18);\n }\n\n /**\n * @notice Calculate the current virtual balances of the pool.\n * @dev If the pool is within the target range, or the price ratio is not updating, the virtual balances do not\n * change, and we return lastVirtualBalances. Otherwise, follow these three steps:\n *\n * 1. Calculate the current fourth root of price ratio.\n * 2. Shrink/Expand the price interval considering the current fourth root of price ratio (if the price ratio\n * is updating).\n * 3. Track the market price by moving the price interval (if the pool is outside the target range).\n *\n * Note: Virtual balances will be rounded down so that the swap result favors the Vault.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param lastVirtualBalanceA The last virtual balance of token A\n * @param lastVirtualBalanceB The last virtual balance of token B\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n * @param lastTimestamp The timestamp of the last user interaction with the pool\n * @param centerednessMargin A limit of the pool centeredness that defines if pool is outside the target range\n * @param storedPriceRatioState A struct containing start and end price ratios and a time interval\n * @return currentVirtualBalanceA The current virtual balance of token A\n * @return currentVirtualBalanceB The current virtual balance of token B\n * @return changed Whether the virtual balances have changed and must be updated in the pool\n */\n function computeCurrentVirtualBalances(\n uint256[] memory balancesScaled18,\n uint256 lastVirtualBalanceA,\n uint256 lastVirtualBalanceB,\n uint256 dailyPriceShiftBase,\n uint32 lastTimestamp,\n uint64 centerednessMargin,\n PriceRatioState storage storedPriceRatioState\n ) internal view returns (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed) {\n uint32 currentTimestamp = block.timestamp.toUint32();\n\n // If the last timestamp is the same as the current timestamp, virtual balances were already reviewed in the\n // current block.\n if (lastTimestamp == currentTimestamp) {\n return (lastVirtualBalanceA, lastVirtualBalanceB, false);\n }\n\n currentVirtualBalanceA = lastVirtualBalanceA;\n currentVirtualBalanceB = lastVirtualBalanceB;\n\n {\n // stack-too-deep\n PriceRatioState memory priceRatioState = storedPriceRatioState;\n\n uint256 currentFourthRootPriceRatio = computeFourthRootPriceRatio(\n currentTimestamp,\n priceRatioState.startFourthRootPriceRatio,\n priceRatioState.endFourthRootPriceRatio,\n priceRatioState.priceRatioUpdateStartTime,\n priceRatioState.priceRatioUpdateEndTime\n );\n\n // If the price ratio is updating, shrink/expand the price interval by recalculating the virtual balances.\n if (\n currentTimestamp > priceRatioState.priceRatioUpdateStartTime &&\n lastTimestamp < priceRatioState.priceRatioUpdateEndTime\n ) {\n (currentVirtualBalanceA, currentVirtualBalanceB) = computeVirtualBalancesUpdatingPriceRatio(\n currentFourthRootPriceRatio,\n balancesScaled18,\n lastVirtualBalanceA,\n lastVirtualBalanceB\n );\n\n changed = true;\n }\n }\n\n (uint256 centeredness, bool isPoolAboveCenter) = computeCenteredness(\n balancesScaled18,\n currentVirtualBalanceA,\n currentVirtualBalanceB\n );\n\n // If the pool is outside the target range, track the market price by moving the price interval.\n if (centeredness < centerednessMargin) {\n (currentVirtualBalanceA, currentVirtualBalanceB) = computeVirtualBalancesUpdatingPriceRange(\n balancesScaled18,\n currentVirtualBalanceA,\n currentVirtualBalanceB,\n isPoolAboveCenter,\n dailyPriceShiftBase,\n currentTimestamp,\n lastTimestamp\n );\n\n changed = true;\n }\n }\n\n /**\n * @notice Compute the virtual balances of the pool when the price ratio is updating.\n * @dev This function uses a Bhaskara formula to shrink/expand the price interval by recalculating the virtual\n * balances. It'll keep the pool centeredness constant, and track the desired price ratio. To derive this formula,\n * we need to solve the following simultaneous equations:\n *\n * 1. centeredness = (Ra * Vb) / (Rb * Va)\n * 2. PriceRatio = invariant^2/(Va * Vb)^2 (maxPrice / minPrice)\n * 3. invariant = (Va + Ra) * (Vb + Rb)\n *\n * Substitute [3] in [2]. Then, isolate one of the V's. Finally, replace the isolated V in [1]. We get a quadratic\n * equation that will be solved in this function.\n *\n * @param currentFourthRootPriceRatio The current fourth root of the price ratio of the pool\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param lastVirtualBalanceA The last virtual balance of token A\n * @param lastVirtualBalanceB The last virtual balance of token B\n * @return virtualBalanceA The virtual balance of token A\n * @return virtualBalanceB The virtual balance of token B\n */\n function computeVirtualBalancesUpdatingPriceRatio(\n uint256 currentFourthRootPriceRatio,\n uint256[] memory balancesScaled18,\n uint256 lastVirtualBalanceA,\n uint256 lastVirtualBalanceB\n ) internal pure returns (uint256 virtualBalanceA, uint256 virtualBalanceB) {\n // Compute the current pool centeredness, which will remain constant.\n (uint256 poolCenteredness, bool isPoolAboveCenter) = computeCenteredness(\n balancesScaled18,\n lastVirtualBalanceA,\n lastVirtualBalanceB\n );\n\n // The overvalued token is the one with a lower token balance (therefore, rarer and more valuable).\n (\n uint256 balanceTokenUndervalued,\n uint256 lastVirtualBalanceUndervalued,\n uint256 lastVirtualBalanceOvervalued\n ) = isPoolAboveCenter\n ? (balancesScaled18[a], lastVirtualBalanceA, lastVirtualBalanceB)\n : (balancesScaled18[b], lastVirtualBalanceB, lastVirtualBalanceA);\n\n // The original formula for Vu (Virtual balance undervalued) was a quadratic equation, with terms:\n // a = Q0 - 1\n // b = - Ru (1 + C)\n // c = - Ru^2 C\n // where Q0 is the square root of the price ratio, Ru is the undervalued token balance, and C is the\n // centeredness. Applying Bhaskara, we'd have: Vu = (-b + sqrt(b^2 - 4ac)) / 2a.\n // The Bhaskara above can be simplified by replacing a, b and c with the terms above, which leads to:\n // +--------------------------------------------------------+\n // | |\n // | Ru * (1 + C + √(1 + C (C + 4 * Q0 - 2))) |\n // | Vu = ---------------------------------------- |\n // | 2 * (Q0 - 1) |\n // | |\n // +--------------------------------------------------------+\n uint256 sqrtPriceRatio = currentFourthRootPriceRatio.mulDown(currentFourthRootPriceRatio);\n\n // Using FixedPoint math as little as possible to improve the precision of the result.\n // Note: The input of Math.sqrt must be a 36-decimal number, so that the final result is 18 decimals.\n uint256 virtualBalanceUndervalued = (balanceTokenUndervalued *\n (FixedPoint.ONE +\n poolCenteredness +\n Math.sqrt(poolCenteredness * (poolCenteredness + 4 * sqrtPriceRatio - 2e18) + 1e36))) /\n (2 * (sqrtPriceRatio - FixedPoint.ONE));\n\n uint256 virtualBalanceOvervalued = (virtualBalanceUndervalued * lastVirtualBalanceOvervalued) /\n lastVirtualBalanceUndervalued;\n\n (virtualBalanceA, virtualBalanceB) = isPoolAboveCenter\n ? (virtualBalanceUndervalued, virtualBalanceOvervalued)\n : (virtualBalanceOvervalued, virtualBalanceUndervalued);\n }\n\n /**\n * @notice Compute new virtual balances when the pool is outside the target range.\n * @dev This function will track the market price by moving the price interval. Note that it will increase the\n * pool centeredness and change the token prices.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA The last virtual balance of token A\n * @param virtualBalanceB The last virtual balance of token B\n * @param isPoolAboveCenter Whether the pool is above or below the center of the price range\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n * @param currentTimestamp The current timestamp\n * @param lastTimestamp The timestamp of the last user interaction with the pool\n * @return newVirtualBalanceA The new virtual balance of token A\n * @return newVirtualBalanceB The new virtual balance of token B\n */\n function computeVirtualBalancesUpdatingPriceRange(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB,\n bool isPoolAboveCenter,\n uint256 dailyPriceShiftBase,\n uint32 currentTimestamp,\n uint32 lastTimestamp\n ) internal pure returns (uint256 newVirtualBalanceA, uint256 newVirtualBalanceB) {\n uint256 sqrtPriceRatio = Math.sqrt(\n computePriceRatio(balancesScaled18, virtualBalanceA, virtualBalanceB) * FixedPoint.ONE\n );\n\n // The overvalued token is the one with a lower token balance (therefore, rarer and more valuable).\n (uint256 balancesScaledUndervalued, uint256 balancesScaledOvervalued) = isPoolAboveCenter\n ? (balancesScaled18[a], balancesScaled18[b])\n : (balancesScaled18[b], balancesScaled18[a]);\n (uint256 virtualBalanceUndervalued, uint256 virtualBalanceOvervalued) = isPoolAboveCenter\n ? (virtualBalanceA, virtualBalanceB)\n : (virtualBalanceB, virtualBalanceA);\n\n // +-----------------------------------------+\n // | (Tc - Tl) |\n // | Vo = Vo * (Psb)^ |\n // +-----------------------------------------+\n // | Where: |\n // | Vo = Virtual balance overvalued |\n // | Psb = Price shift daily rate base |\n // | Tc = Current timestamp |\n // | Tl = Last timestamp |\n // +-----------------------------------------+\n // | Ru * (Vo + Bo) |\n // | Vu = ---------------------- |\n // | (Qo - 1) * Vo - Bo |\n // +-----------------------------------------+\n // | Where: |\n // | Vu = Virtual balance undervalued |\n // | Vo = Virtual balance overvalued |\n // | Ru = Real balance undervalued |\n // | Bo = Virtual balance overvalued |\n // | Qo = Square root of price ratio |\n // +-----------------------------------------+\n virtualBalanceOvervalued = virtualBalanceOvervalued.mulDown(\n dailyPriceShiftBase.powDown((currentTimestamp - lastTimestamp) * FixedPoint.ONE)\n );\n virtualBalanceUndervalued =\n (balancesScaledUndervalued * (virtualBalanceOvervalued + balancesScaledOvervalued)) /\n ((sqrtPriceRatio - FixedPoint.ONE).mulDown(virtualBalanceOvervalued) - balancesScaledOvervalued);\n\n (newVirtualBalanceA, newVirtualBalanceB) = isPoolAboveCenter\n ? (virtualBalanceUndervalued, virtualBalanceOvervalued)\n : (virtualBalanceOvervalued, virtualBalanceUndervalued);\n }\n\n /**\n * @notice Check whether the pool is in range.\n * @dev The pool is in range if the centeredness is greater than or equal to the centeredness margin.\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA The last virtual balances of token A\n * @param virtualBalanceB The last virtual balances of token B\n * @param centerednessMargin A symmetrical measure of how closely an unbalanced pool can approach the limits of the\n * price range before it is considered out of range\n * @return isWithinTargetRange Whether the pool is within the target price range\n */\n function isPoolWithinTargetRange(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB,\n uint256 centerednessMargin\n ) internal pure returns (bool) {\n (uint256 centeredness, ) = computeCenteredness(balancesScaled18, virtualBalanceA, virtualBalanceB);\n return centeredness >= centerednessMargin;\n }\n\n /**\n * @notice Compute the centeredness of the pool.\n * @dev The centeredness is calculated as the ratio of the real balances divided by the ratio of the virtual\n * balances. It's a percentage value, where 100% means that the token prices are centered, and 0% means that the\n * token prices are at the edge of the price interval.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA The last virtual balances of token A\n * @param virtualBalanceB The last virtual balances of token B\n * @return poolCenteredness The centeredness of the pool\n * @return isPoolAboveCenter True if the pool is above the center, false otherwise\n */\n function computeCenteredness(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB\n ) internal pure returns (uint256 poolCenteredness, bool isPoolAboveCenter) {\n if (balancesScaled18[a] == 0) {\n // Also return false if both are 0 to be consistent with the logic below.\n return (0, false);\n } else if (balancesScaled18[b] == 0) {\n return (0, true);\n }\n\n uint256 numerator = balancesScaled18[a] * virtualBalanceB;\n uint256 denominator = virtualBalanceA * balancesScaled18[b];\n\n // The centeredness is defined between 0 and 1. If the numerator is greater than the denominator, we compute\n // the inverse ratio.\n if (numerator <= denominator) {\n poolCenteredness = numerator.divDown(denominator);\n isPoolAboveCenter = false;\n } else {\n poolCenteredness = denominator.divDown(numerator);\n isPoolAboveCenter = true;\n }\n\n return (poolCenteredness, isPoolAboveCenter);\n }\n\n /**\n * @notice Compute the fourth root of the price ratio of the pool.\n * @dev The current fourth root of price ratio is an interpolation of the price ratio between the start and end\n * values in the price ratio state, using the percentage elapsed between the start and end times.\n *\n * @param currentTime The current timestamp\n * @param startFourthRootPriceRatio The start fourth root of price ratio of the pool\n * @param endFourthRootPriceRatio The end fourth root of price ratio of the pool\n * @param priceRatioUpdateStartTime The timestamp of the last user interaction with the pool\n * @param priceRatioUpdateEndTime The timestamp of the next user interaction with the pool\n * @return fourthRootPriceRatio The fourth root of price ratio of the pool\n */\n function computeFourthRootPriceRatio(\n uint32 currentTime,\n uint96 startFourthRootPriceRatio,\n uint96 endFourthRootPriceRatio,\n uint32 priceRatioUpdateStartTime,\n uint32 priceRatioUpdateEndTime\n ) internal pure returns (uint96) {\n // if start and end time are the same, return end value.\n if (currentTime >= priceRatioUpdateEndTime) {\n return endFourthRootPriceRatio;\n } else if (currentTime <= priceRatioUpdateStartTime) {\n return startFourthRootPriceRatio;\n }\n\n // +-------------------------------------------------+\n // | / Tc - Ts \\ |\n // | ( ------- ) |\n // | \\ Te - Ts / |\n // | ( Pe )^ |\n // | Pc = Ps * (----) |\n // | ( Ps ) |\n // +-------------------------------------------------+\n // | Where: |\n // | Pc = Current fourth root price ratio |\n // | Ps = Starting fourth root price ratio |\n // | Pe = Ending fourth root price ratio |\n // | Tc = Current time |\n // | Ts = Start time |\n // | Te = End time |\n // +-------------------------------------------------+\n\n uint256 exponent = uint256(currentTime - priceRatioUpdateStartTime).divDown(\n priceRatioUpdateEndTime - priceRatioUpdateStartTime\n );\n\n uint256 currentFourthRootPriceRatio = uint256(startFourthRootPriceRatio).mulDown(\n (uint256(endFourthRootPriceRatio).divDown(uint256(startFourthRootPriceRatio))).powDown(exponent)\n );\n\n // Since we're rounding current fourth root price ratio down, we only need to check the lower boundary.\n uint256 minimumFourthRootPriceRatio = Math.min(startFourthRootPriceRatio, endFourthRootPriceRatio);\n return Math.max(minimumFourthRootPriceRatio, currentFourthRootPriceRatio).toUint96();\n }\n\n /**\n * @notice Compute the price ratio of the pool by dividing the maximum price by the minimum price.\n * @dev The price ratio is calculated as maxPrice/minPrice, where maxPrice and minPrice are obtained\n * from computePriceRange.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA Virtual balance of token A\n * @param virtualBalanceB Virtual balance of token B\n * @return priceRatio The ratio between the maximum and minimum prices of the pool\n */\n function computePriceRatio(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB\n ) internal pure returns (uint256 priceRatio) {\n (uint256 minPrice, uint256 maxPrice) = computePriceRange(balancesScaled18, virtualBalanceA, virtualBalanceB);\n\n return maxPrice.divUp(minPrice);\n }\n\n /**\n * @notice Compute the minimum and maximum prices for the pool based on virtual balances and current invariant.\n * @dev The minimum price is calculated as Vb^2/invariant, where Vb is the virtual balance of token B.\n * The maximum price is calculated as invariant/Va^2, where Va is the virtual balance of token A.\n * These calculations are derived from the invariant equation: invariant = (Ra + Va)(Rb + Vb),\n * where Ra and Rb are the real balances of tokens A and B respectively.\n *\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param virtualBalanceA Virtual balance of token A\n * @param virtualBalanceB Virtual balance of token B\n * @return minPrice The minimum price of token A in terms of token B\n * @return maxPrice The maximum price of token A in terms of token B\n */\n function computePriceRange(\n uint256[] memory balancesScaled18,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB\n ) internal pure returns (uint256 minPrice, uint256 maxPrice) {\n uint256 currentInvariant = ReClammMath.computeInvariant(\n balancesScaled18,\n virtualBalanceA,\n virtualBalanceB,\n Rounding.ROUND_DOWN\n );\n\n // P_min(a) = Vb / (Va + Ra_max)\n // We don't have Ra_max, but: invariant = (Ra_max + Va) * Vb\n // Then, (Va + Ra_max) = invariant / Vb, and:\n // P_min(a) = Vb^2 / invariant\n minPrice = (virtualBalanceB * virtualBalanceB) / currentInvariant;\n\n // Similarly, P_max(a) = (Rb_max + Vb) / Va\n // We don't have Rb_max, but: invariant = (Rb_max + Vb) * Va\n // Then, (Rb_max + Vb) = invariant / Va, and:\n // P_max(a) = invariant / Va^2\n maxPrice = currentInvariant.divDown(virtualBalanceA.mulDown(virtualBalanceA));\n }\n\n /**\n * @notice Convert from the external to the internal representation of the daily price shift exponent.\n * @param dailyPriceShiftExponent The daily price shift exponent as an 18-decimal FP\n * @return dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n */\n function toDailyPriceShiftBase(uint256 dailyPriceShiftExponent) internal pure returns (uint256) {\n return FixedPoint.ONE - dailyPriceShiftExponent / _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT;\n }\n\n /**\n * @notice Convert from the internal to the external representation of the daily price shift exponent.\n * @dev The result is an 18-decimal FP percentage.\n * @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n * @return dailyPriceShiftExponent The daily price shift exponent as an 18-decimal FP percentage\n */\n function toDailyPriceShiftExponent(uint256 dailyPriceShiftBase) internal pure returns (uint256) {\n return (FixedPoint.ONE - dailyPriceShiftBase) * _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT;\n }\n\n /**\n * @notice Calculate the square root of a value scaled by 18 decimals.\n * @param valueScaled18 The value to calculate the square root of, scaled by 18 decimals\n * @return sqrtValueScaled18 The square root of the value scaled by 18 decimals\n */\n function sqrtScaled18(uint256 valueScaled18) internal pure returns (uint256) {\n return Math.sqrt(valueScaled18 * FixedPoint.ONE);\n }\n\n /**\n * @notice Calculate the fourth root of a value scaled by 18 decimals.\n * @param valueScaled18 The value to calculate the fourth root of, scaled by 18 decimals\n * @return fourthRootValueScaled18 The fourth root of the value scaled by 18 decimals\n */\n function fourthRootScaled18(uint256 valueScaled18) internal pure returns (uint256) {\n return Math.sqrt(Math.sqrt(valueScaled18 * FixedPoint.ONE) * FixedPoint.ONE);\n }\n}\n"},"contracts/lib/ReClammPoolFactoryLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { TokenConfig, TokenType } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\n\n/**\n * @notice ReClammPool initialization parameters.\n * @dev ReClamm pools may contain wrapped tokens (with rate providers), in which case there are two options for\n * providing the initialization prices (and the initialization balances can be calculated in terms of either\n * token). If the price is that of the wrapped token, we should not apply the rate, so the flag for that token\n * should be false. If the price is given in terms of the underlying, we do need to apply the rate when computing\n * the initialization balances.\n *\n * @param initialMinPrice The initial minimum price of token A in terms of token B as an 18-decimal FP value\n * @param initialMaxPrice The initial maximum price of token A in terms of token B as an 18-decimal FP value\n * @param initialTargetPrice The initial target price of token A in terms of token B as an 18-decimal FP value\n * @param tokenAPriceIncludesRate Whether the amount of token A is scaled by the rate when calculating the price\n * @param tokenBPriceIncludesRate Whether the amount of token B is scaled by the rate when calculating the price\n */\nstruct ReClammPriceParams {\n uint256 initialMinPrice;\n uint256 initialMaxPrice;\n uint256 initialTargetPrice;\n bool tokenAPriceIncludesRate;\n bool tokenBPriceIncludesRate;\n}\n\nlibrary ReClammPoolFactoryLib {\n function validateTokenConfig(TokenConfig[] memory tokens, ReClammPriceParams memory priceParams) internal pure {\n // The ReClammPool only supports 2 tokens.\n if (tokens.length > 2) {\n revert IVaultErrors.MaxTokens();\n }\n\n if (priceParams.tokenAPriceIncludesRate && tokens[0].tokenType != TokenType.WITH_RATE) {\n revert IVaultErrors.InvalidTokenType();\n }\n if (priceParams.tokenBPriceIncludesRate && tokens[1].tokenType != TokenType.WITH_RATE) {\n revert IVaultErrors.InvalidTokenType();\n }\n }\n}\n"},"contracts/ReClammPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n// solhint-disable not-rely-on-time\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ISwapFeePercentageBounds } from \"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolAuthentication } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\";\nimport { GradualValueChange } from \"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { BalancerPoolToken } from \"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport { PoolInfo } from \"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\";\nimport { BaseHooks } from \"@balancer-labs/v3-vault/contracts/BaseHooks.sol\";\n\nimport { PriceRatioState, ReClammMath, a, b } from \"./lib/ReClammMath.sol\";\nimport {\n ReClammPoolParams,\n ReClammPoolDynamicData,\n ReClammPoolImmutableData,\n IReClammPool\n} from \"./interfaces/IReClammPool.sol\";\n\ncontract ReClammPool is IReClammPool, BalancerPoolToken, PoolInfo, BasePoolAuthentication, Version, BaseHooks {\n using FixedPoint for uint256;\n using ScalingHelpers for uint256;\n using SafeCast for *;\n using ReClammMath for *;\n\n // Fees are 18-decimal, floating point values, which will be stored in the Vault using 24 bits.\n // This means they have 0.00001% resolution (i.e., any non-zero bits < 1e11 will cause precision loss).\n // Minimum values help make the math well-behaved (i.e., the swap fee should overwhelm any rounding error).\n // Maximum values protect users by preventing permissioned actors from setting excessively high swap fees.\n uint256 private constant _MIN_SWAP_FEE_PERCENTAGE = 0.001e16; // 0.001%\n uint256 internal constant _MAX_SWAP_FEE_PERCENTAGE = 10e16; // 10%\n\n // The daily price shift exponent is a percentage that defines the speed at which the virtual balances will change\n // over the course of one day. A value of 100% (i.e, FP 1) means that the min and max prices will double (or halve)\n // every day, until the pool price is within the range defined by the margin. This constant defines the maximum\n // \"price shift\" velocity.\n uint256 internal constant _MAX_DAILY_PRICE_SHIFT_EXPONENT = 300e16; // 300%\n\n // Price ratio updates must have both a minimum duration and a maximum daily rate. For instance, an update rate of\n // FP 2 means the ratio one day later must be at least half and at most double the rate at the start of the update.\n uint256 internal constant _MIN_PRICE_RATIO_UPDATE_DURATION = 1 days;\n uint256 internal immutable _MAX_DAILY_PRICE_RATIO_UPDATE_RATE;\n\n // There is also a minimum delta, to keep the math well-behaved.\n uint256 internal constant _MIN_PRICE_RATIO_DELTA = 1e6;\n\n uint256 internal constant _MAX_TOKEN_DECIMALS = 18;\n // This represents the maximum deviation from the ideal state (i.e., at target price and near centered) after\n // initialization, to prevent arbitration losses.\n uint256 internal constant _BALANCE_RATIO_AND_PRICE_TOLERANCE = 0.01e16; // 0.01%\n\n // These immutables are only used during initialization, to set the virtual balances and price ratio in a more\n // user-friendly manner.\n uint256 private immutable _INITIAL_MIN_PRICE;\n uint256 private immutable _INITIAL_MAX_PRICE;\n uint256 private immutable _INITIAL_TARGET_PRICE;\n uint256 private immutable _INITIAL_DAILY_PRICE_SHIFT_EXPONENT;\n uint256 private immutable _INITIAL_CENTEREDNESS_MARGIN;\n\n // ReClamm pools do not need to know the tokens on deployment. The factory deploys the pool, then registers it, at\n // which point the Vault knows the tokens and rate providers. Finally, the user initializes the pool through the\n // router, using the `computeInitialBalancesRaw` helper function to compute the correct initial raw balances.\n //\n // The twist here is that the pool may contain wrapped tokens (e.g., wstETH), and the initial prices given might be\n // in terms of either the wrapped or the underlying token. If the price is that of the actual token being supplied\n // (e.g., the wrapped token), the initialization helper should *not* apply the rate, and the flag should be false.\n // If the price is given in terms of the underlying token, the initialization helper *should* apply the rate, so\n // the flag should be true. Since the prices are stored on initialization, these flags are as well (vs. passing\n // them in at initialization time, when they might be out-of-sync with the prices).\n bool private immutable _TOKEN_A_PRICE_INCLUDES_RATE;\n bool private immutable _TOKEN_B_PRICE_INCLUDES_RATE;\n\n PriceRatioState internal _priceRatioState;\n\n // Timestamp of the last user interaction.\n uint32 internal _lastTimestamp;\n\n // Internal representation of the speed at which the pool moves the virtual balances when outside the target range.\n uint128 internal _dailyPriceShiftBase;\n\n // Used to define the target price range of the pool (i.e., where the pool centeredness >= centeredness margin).\n uint64 internal _centerednessMargin;\n\n // The virtual balances at the time of the last user interaction.\n uint128 internal _lastVirtualBalanceA;\n uint128 internal _lastVirtualBalanceB;\n\n // Protect functions that would otherwise be vulnerable to manipulation through transient liquidity.\n modifier onlyWhenVaultIsLocked() {\n _ensureVaultIsLocked();\n _;\n }\n\n function _ensureVaultIsLocked() internal view {\n if (_vault.isUnlocked()) {\n revert VaultIsNotLocked();\n }\n }\n\n modifier onlyWhenInitialized() {\n _ensureVaultIsInitialized();\n _;\n }\n\n function _ensureVaultIsInitialized() internal view {\n if (_vault.isPoolInitialized(address(this)) == false) {\n revert PoolNotInitialized();\n }\n }\n\n modifier onlyWithinTargetRange() {\n _ensurePoolWithinTargetRange();\n _;\n _ensurePoolWithinTargetRange();\n }\n\n constructor(\n ReClammPoolParams memory params,\n IVault vault\n )\n BalancerPoolToken(vault, params.name, params.symbol)\n PoolInfo(vault)\n BasePoolAuthentication(vault, msg.sender)\n Version(params.version)\n {\n if (\n params.initialMinPrice == 0 ||\n params.initialMaxPrice == 0 ||\n params.initialTargetPrice == 0 ||\n params.initialTargetPrice < params.initialMinPrice ||\n params.initialTargetPrice > params.initialMaxPrice ||\n params.initialMinPrice >= params.initialMaxPrice\n ) {\n // If any of these prices were 0, pool initialization would revert with a numerical error.\n // For good measure, we also ensure the target is within the range.\n revert InvalidInitialPrice();\n }\n\n // Initialize immutable params. These are only used during pool initialization.\n _INITIAL_MIN_PRICE = params.initialMinPrice;\n _INITIAL_MAX_PRICE = params.initialMaxPrice;\n _INITIAL_TARGET_PRICE = params.initialTargetPrice;\n\n _INITIAL_DAILY_PRICE_SHIFT_EXPONENT = params.dailyPriceShiftExponent;\n _INITIAL_CENTEREDNESS_MARGIN = params.centerednessMargin;\n\n _TOKEN_A_PRICE_INCLUDES_RATE = params.tokenAPriceIncludesRate;\n _TOKEN_B_PRICE_INCLUDES_RATE = params.tokenBPriceIncludesRate;\n\n // The maximum daily price ratio change rate is given by 2^_MAX_DAILY_PRICE_SHIFT_EXPONENT.\n // This is somewhat arbitrary, but it makes sense to link these rates; i.e., we are setting the maximum speed\n // of expansion or contraction to equal the maximum speed of the price shift. It is expressed as a multiple;\n // i.e., 8e18 means it can change by 8x per day.\n _MAX_DAILY_PRICE_RATIO_UPDATE_RATE = FixedPoint.powUp(2e18, _MAX_DAILY_PRICE_SHIFT_EXPONENT);\n }\n\n /********************************************************\n Base Pool Functions\n ********************************************************/\n\n /// @inheritdoc IBasePool\n function computeInvariant(uint256[] memory balancesScaled18, Rounding rounding) public view returns (uint256) {\n return\n ReClammMath.computeInvariant(\n balancesScaled18,\n _lastVirtualBalanceA,\n _lastVirtualBalanceB,\n _dailyPriceShiftBase,\n _lastTimestamp,\n _centerednessMargin,\n _priceRatioState,\n rounding\n );\n }\n\n /// @inheritdoc IBasePool\n function computeBalance(uint256[] memory, uint256, uint256) external pure returns (uint256) {\n // The pool does not allow unbalanced adds and removes, so this function does not need to be implemented.\n revert NotImplemented();\n }\n\n /// @inheritdoc IBasePool\n function onSwap(PoolSwapParams memory request) public virtual onlyVault returns (uint256 amountCalculatedScaled18) {\n (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed) = _computeCurrentVirtualBalances(\n request.balancesScaled18\n );\n\n if (changed) {\n _setLastVirtualBalances(currentVirtualBalanceA, currentVirtualBalanceB);\n }\n\n _updateTimestamp();\n\n // Calculate swap result.\n if (request.kind == SwapKind.EXACT_IN) {\n amountCalculatedScaled18 = ReClammMath.computeOutGivenIn(\n request.balancesScaled18,\n currentVirtualBalanceA,\n currentVirtualBalanceB,\n request.indexIn,\n request.indexOut,\n request.amountGivenScaled18\n );\n } else {\n amountCalculatedScaled18 = ReClammMath.computeInGivenOut(\n request.balancesScaled18,\n currentVirtualBalanceA,\n currentVirtualBalanceB,\n request.indexIn,\n request.indexOut,\n request.amountGivenScaled18\n );\n }\n }\n\n /// @inheritdoc ISwapFeePercentageBounds\n function getMinimumSwapFeePercentage() external pure returns (uint256) {\n return _MIN_SWAP_FEE_PERCENTAGE;\n }\n\n /// @inheritdoc ISwapFeePercentageBounds\n function getMaximumSwapFeePercentage() external pure returns (uint256) {\n return _MAX_SWAP_FEE_PERCENTAGE;\n }\n\n /// @inheritdoc IUnbalancedLiquidityInvariantRatioBounds\n function getMinimumInvariantRatio() external pure returns (uint256) {\n // The invariant ratio bounds are required by `IBasePool`, but are unused in this pool type, as liquidity can\n // only be added or removed proportionally.\n return 0;\n }\n\n /// @inheritdoc IUnbalancedLiquidityInvariantRatioBounds\n function getMaximumInvariantRatio() external pure returns (uint256) {\n // The invariant ratio bounds are required by `IBasePool`, but are unused in this pool type, as liquidity can\n // only be added or removed proportionally.\n return 0;\n }\n\n /// @inheritdoc IRateProvider\n function getRate() public pure override returns (uint256) {\n revert ReClammPoolBptRateUnsupported();\n }\n\n /********************************************************\n Hook Functions\n ********************************************************/\n\n /// @inheritdoc IHooks\n function getHookFlags() public pure override returns (HookFlags memory hookFlags) {\n hookFlags.shouldCallBeforeInitialize = true;\n hookFlags.shouldCallBeforeAddLiquidity = true;\n hookFlags.shouldCallBeforeRemoveLiquidity = true;\n }\n\n /// @inheritdoc IHooks\n function onRegister(\n address,\n address,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) public view override onlyVault returns (bool) {\n return\n tokenConfig.length == 2 &&\n liquidityManagement.disableUnbalancedLiquidity &&\n liquidityManagement.enableDonation == false;\n }\n\n struct InitializeLocals {\n uint256 rateA;\n uint256 rateB;\n uint256 minPriceScaled18;\n uint256 maxPriceScaled18;\n uint256 targetPriceScaled18;\n uint256[] theoreticalBalances;\n uint256 theoreticalVirtualBalanceA;\n uint256 theoreticalVirtualBalanceB;\n uint256 priceRatio;\n }\n\n /// @inheritdoc IHooks\n function onBeforeInitialize(\n uint256[] memory balancesScaled18,\n bytes memory\n ) public override onlyVault returns (bool) {\n InitializeLocals memory locals;\n (locals.rateA, locals.rateB) = _getTokenRates();\n\n (\n locals.minPriceScaled18,\n locals.maxPriceScaled18,\n locals.targetPriceScaled18\n ) = _getPriceSettingsAdjustedByRates(locals.rateA, locals.rateB);\n\n (\n locals.theoreticalBalances,\n locals.theoreticalVirtualBalanceA,\n locals.theoreticalVirtualBalanceB,\n locals.priceRatio\n ) = ReClammMath.computeTheoreticalPriceRatioAndBalances(\n locals.minPriceScaled18,\n locals.maxPriceScaled18,\n locals.targetPriceScaled18\n );\n\n _checkInitializationBalanceRatio(balancesScaled18, locals.theoreticalBalances);\n\n uint256 scale = balancesScaled18[a].divDown(locals.theoreticalBalances[a]);\n\n uint256 virtualBalanceA = locals.theoreticalVirtualBalanceA.mulDown(scale);\n uint256 virtualBalanceB = locals.theoreticalVirtualBalanceB.mulDown(scale);\n\n _checkInitializationPrices(\n balancesScaled18,\n locals.minPriceScaled18,\n locals.maxPriceScaled18,\n locals.targetPriceScaled18,\n virtualBalanceA,\n virtualBalanceB\n );\n\n _setLastVirtualBalances(virtualBalanceA, virtualBalanceB);\n _startPriceRatioUpdate(locals.priceRatio, block.timestamp, block.timestamp);\n // Set dynamic parameters.\n _setDailyPriceShiftExponent(_INITIAL_DAILY_PRICE_SHIFT_EXPONENT);\n _setCenterednessMargin(_INITIAL_CENTEREDNESS_MARGIN);\n _updateTimestamp();\n\n return true;\n }\n\n /// @inheritdoc IHooks\n function onBeforeAddLiquidity(\n address,\n address pool,\n AddLiquidityKind,\n uint256[] memory,\n uint256 exactBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory\n ) public override onlyVault returns (bool) {\n // This hook makes sure that the virtual balances are increased in the same proportion as the real balances\n // after adding liquidity. This is needed to keep the pool centeredness and price ratio constant.\n\n uint256 poolTotalSupply = _vault.totalSupply(pool);\n uint256 newPoolTotalSupply = exactBptAmountOut + poolTotalSupply;\n\n (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, ) = _computeCurrentVirtualBalances(\n balancesScaled18\n );\n // When adding/removing liquidity, round down the virtual balances. This favors the vault in swap operations.\n // The virtual balances are not used in proportional add/remove calculations.\n currentVirtualBalanceA = (currentVirtualBalanceA * newPoolTotalSupply) / poolTotalSupply;\n currentVirtualBalanceB = (currentVirtualBalanceB * newPoolTotalSupply) / poolTotalSupply;\n _setLastVirtualBalances(currentVirtualBalanceA, currentVirtualBalanceB);\n _updateTimestamp();\n\n return true;\n }\n\n /// @inheritdoc IHooks\n function onBeforeRemoveLiquidity(\n address,\n address pool,\n RemoveLiquidityKind,\n uint256 exactBptAmountIn,\n uint256[] memory,\n uint256[] memory balancesScaled18,\n bytes memory\n ) public override onlyVault returns (bool) {\n // This hook makes sure that the virtual balances are decreased in the same proportion as the real balances\n // after removing liquidity. This is needed to keep the pool centeredness and price ratio constant.\n\n uint256 poolTotalSupply = _vault.totalSupply(pool);\n uint256 bptDelta = poolTotalSupply - exactBptAmountIn;\n\n (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, ) = _computeCurrentVirtualBalances(\n balancesScaled18\n );\n\n // When adding/removing liquidity, round down the virtual balances. This favors the vault in swap operations.\n // The virtual balances are not used in proportional add/remove calculations.\n currentVirtualBalanceA = (currentVirtualBalanceA * bptDelta) / poolTotalSupply;\n currentVirtualBalanceB = (currentVirtualBalanceB * bptDelta) / poolTotalSupply;\n\n _setLastVirtualBalances(currentVirtualBalanceA, currentVirtualBalanceB);\n _updateTimestamp();\n\n return true;\n }\n\n /********************************************************\n Pool State Getters\n ********************************************************/\n\n /// @inheritdoc IReClammPool\n function computeInitialBalancesRaw(\n IERC20 referenceToken,\n uint256 referenceAmountInRaw\n ) external view returns (uint256[] memory initialBalancesRaw) {\n IERC20[] memory tokens = _vault.getPoolTokens(address(this));\n\n (uint256 referenceTokenIdx, uint256 otherTokenIdx) = tokens[a] == referenceToken ? (a, b) : (b, a);\n\n if (referenceTokenIdx == b && referenceToken != tokens[b]) {\n revert IVaultErrors.InvalidToken();\n }\n\n (uint256 rateA, uint256 rateB) = _getTokenRates();\n uint256 balanceRatioScaled18 = _computeInitialBalanceRatioScaled18(rateA, rateB);\n (uint256 rateReferenceToken, uint256 rateOtherToken) = tokens[a] == referenceToken\n ? (rateA, rateB)\n : (rateB, rateA);\n\n uint8 decimalsReferenceToken = IERC20Metadata(address(tokens[referenceTokenIdx])).decimals();\n uint8 decimalsOtherToken = IERC20Metadata(address(tokens[otherTokenIdx])).decimals();\n\n uint256 referenceAmountInScaled18 = referenceAmountInRaw.toScaled18ApplyRateRoundDown(\n 10 ** (_MAX_TOKEN_DECIMALS - decimalsReferenceToken),\n rateReferenceToken\n );\n\n // Since the ratio is defined as b/a, multiply if we're given a, and divide if we're given b.\n // If the theoretical virtual balances were a=50 and b=100, then the ratio would be 100/50 = 2.\n // If we're given 100 a tokens, b = a * 2 = 200. If we're given 200 b tokens, a = b / 2 = 100.\n initialBalancesRaw = new uint256[](2);\n initialBalancesRaw[referenceTokenIdx] = referenceAmountInRaw;\n\n function(uint256, uint256) pure returns (uint256) _mulOrDiv = referenceTokenIdx == a\n ? FixedPoint.mulDown\n : FixedPoint.divDown;\n initialBalancesRaw[otherTokenIdx] = _mulOrDiv(referenceAmountInScaled18, balanceRatioScaled18)\n .toRawUndoRateRoundDown(10 ** (_MAX_TOKEN_DECIMALS - decimalsOtherToken), rateOtherToken);\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentPriceRange() external view returns (uint256 minPrice, uint256 maxPrice) {\n if (_vault.isPoolInitialized(address(this))) {\n (, , , uint256[] memory balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n (uint256 virtualBalanceA, uint256 virtualBalanceB, ) = _computeCurrentVirtualBalances(balancesScaled18);\n\n (minPrice, maxPrice) = ReClammMath.computePriceRange(balancesScaled18, virtualBalanceA, virtualBalanceB);\n } else {\n minPrice = _INITIAL_MIN_PRICE;\n maxPrice = _INITIAL_MAX_PRICE;\n }\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentVirtualBalances()\n external\n view\n returns (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed)\n {\n (, currentVirtualBalanceA, currentVirtualBalanceB, changed) = _getRealAndVirtualBalances();\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentSpotPrice() external view returns (uint256) {\n (\n uint256[] memory balancesScaled18,\n uint256 currentVirtualBalanceA,\n uint256 currentVirtualBalanceB,\n\n ) = _getRealAndVirtualBalances();\n\n return (balancesScaled18[b] + currentVirtualBalanceB).divDown(balancesScaled18[a] + currentVirtualBalanceA);\n }\n\n function _getRealAndVirtualBalances()\n internal\n view\n returns (\n uint256[] memory balancesScaled18,\n uint256 currentVirtualBalanceA,\n uint256 currentVirtualBalanceB,\n bool changed\n )\n {\n (, , , balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n (currentVirtualBalanceA, currentVirtualBalanceB, changed) = _computeCurrentVirtualBalances(balancesScaled18);\n }\n\n /// @inheritdoc IReClammPool\n function getLastTimestamp() external view returns (uint32) {\n return _lastTimestamp;\n }\n\n /// @inheritdoc IReClammPool\n function getLastVirtualBalances() external view returns (uint256 virtualBalanceA, uint256 virtualBalanceB) {\n return (_lastVirtualBalanceA, _lastVirtualBalanceB);\n }\n\n /// @inheritdoc IReClammPool\n function getCenterednessMargin() external view returns (uint256) {\n return _centerednessMargin;\n }\n\n /// @inheritdoc IReClammPool\n function getDailyPriceShiftExponent() external view returns (uint256) {\n return _dailyPriceShiftBase.toDailyPriceShiftExponent();\n }\n\n /// @inheritdoc IReClammPool\n function getDailyPriceShiftBase() external view returns (uint256) {\n return _dailyPriceShiftBase;\n }\n\n /// @inheritdoc IReClammPool\n function getPriceRatioState() external view returns (PriceRatioState memory) {\n return _priceRatioState;\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentFourthRootPriceRatio() external view returns (uint256) {\n return ReClammMath.fourthRootScaled18(_computeCurrentPriceRatio());\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentPriceRatio() external view returns (uint256) {\n return _computeCurrentPriceRatio();\n }\n\n /// @inheritdoc IReClammPool\n function isPoolWithinTargetRange() external view returns (bool) {\n return _isPoolWithinTargetRange();\n }\n\n /// @inheritdoc IReClammPool\n function isPoolWithinTargetRangeUsingCurrentVirtualBalances()\n external\n view\n returns (bool isWithinTargetRange, bool virtualBalancesChanged)\n {\n (, , , uint256[] memory balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n uint256 currentVirtualBalanceA;\n uint256 currentVirtualBalanceB;\n\n (currentVirtualBalanceA, currentVirtualBalanceB, virtualBalancesChanged) = _computeCurrentVirtualBalances(\n balancesScaled18\n );\n\n isWithinTargetRange = ReClammMath.isPoolWithinTargetRange(\n balancesScaled18,\n currentVirtualBalanceA,\n currentVirtualBalanceB,\n _centerednessMargin\n );\n }\n\n /// @inheritdoc IReClammPool\n function computeCurrentPoolCenteredness() external view returns (uint256, bool) {\n (, , , uint256[] memory currentBalancesScaled18) = _vault.getPoolTokenInfo(address(this));\n return ReClammMath.computeCenteredness(currentBalancesScaled18, _lastVirtualBalanceA, _lastVirtualBalanceB);\n }\n\n /// @inheritdoc IReClammPool\n function getReClammPoolDynamicData() external view returns (ReClammPoolDynamicData memory data) {\n data.balancesLiveScaled18 = _vault.getCurrentLiveBalances(address(this));\n (, data.tokenRates) = _vault.getPoolTokenRates(address(this));\n data.staticSwapFeePercentage = _vault.getStaticSwapFeePercentage((address(this)));\n data.totalSupply = totalSupply();\n\n data.lastTimestamp = _lastTimestamp;\n data.lastVirtualBalances = _getLastVirtualBalances();\n data.dailyPriceShiftBase = _dailyPriceShiftBase;\n data.dailyPriceShiftExponent = data.dailyPriceShiftBase.toDailyPriceShiftExponent();\n data.centerednessMargin = _centerednessMargin;\n\n PriceRatioState memory state = _priceRatioState;\n data.startFourthRootPriceRatio = state.startFourthRootPriceRatio;\n data.endFourthRootPriceRatio = state.endFourthRootPriceRatio;\n data.priceRatioUpdateStartTime = state.priceRatioUpdateStartTime;\n data.priceRatioUpdateEndTime = state.priceRatioUpdateEndTime;\n\n PoolConfig memory poolConfig = _vault.getPoolConfig(address(this));\n data.isPoolInitialized = poolConfig.isPoolInitialized;\n data.isPoolPaused = poolConfig.isPoolPaused;\n data.isPoolInRecoveryMode = poolConfig.isPoolInRecoveryMode;\n\n // If the pool is not initialized, virtual balances will be zero and `_computeCurrentPriceRatio` would revert.\n if (data.isPoolInitialized) {\n data.currentPriceRatio = _computeCurrentPriceRatio();\n data.currentFourthRootPriceRatio = ReClammMath.fourthRootScaled18(data.currentPriceRatio);\n }\n }\n\n /// @inheritdoc IReClammPool\n function getReClammPoolImmutableData() external view returns (ReClammPoolImmutableData memory data) {\n // Base Pool\n data.tokens = _vault.getPoolTokens(address(this));\n (data.decimalScalingFactors, ) = _vault.getPoolTokenRates(address(this));\n data.tokenAPriceIncludesRate = _TOKEN_A_PRICE_INCLUDES_RATE;\n data.tokenBPriceIncludesRate = _TOKEN_B_PRICE_INCLUDES_RATE;\n data.minSwapFeePercentage = _MIN_SWAP_FEE_PERCENTAGE;\n data.maxSwapFeePercentage = _MAX_SWAP_FEE_PERCENTAGE;\n\n // Initialization\n data.initialMinPrice = _INITIAL_MIN_PRICE;\n data.initialMaxPrice = _INITIAL_MAX_PRICE;\n data.initialTargetPrice = _INITIAL_TARGET_PRICE;\n data.initialDailyPriceShiftExponent = _INITIAL_DAILY_PRICE_SHIFT_EXPONENT;\n data.initialCenterednessMargin = _INITIAL_CENTEREDNESS_MARGIN;\n\n // Operating Limits\n data.maxDailyPriceShiftExponent = _MAX_DAILY_PRICE_SHIFT_EXPONENT;\n data.maxDailyPriceRatioUpdateRate = _MAX_DAILY_PRICE_RATIO_UPDATE_RATE;\n data.minPriceRatioUpdateDuration = _MIN_PRICE_RATIO_UPDATE_DURATION;\n data.minPriceRatioDelta = _MIN_PRICE_RATIO_DELTA;\n data.balanceRatioAndPriceTolerance = _BALANCE_RATIO_AND_PRICE_TOLERANCE;\n }\n\n /******************************************************** \n Pool State Setters\n ********************************************************/\n\n /// @inheritdoc IReClammPool\n function startPriceRatioUpdate(\n uint256 endPriceRatio,\n uint256 priceRatioUpdateStartTime,\n uint256 priceRatioUpdateEndTime\n )\n external\n onlyWhenInitialized\n onlySwapFeeManagerOrGovernance(address(this))\n returns (uint256 actualPriceRatioUpdateStartTime)\n {\n actualPriceRatioUpdateStartTime = GradualValueChange.resolveStartTime(\n priceRatioUpdateStartTime,\n priceRatioUpdateEndTime\n );\n\n uint256 updateDuration = priceRatioUpdateEndTime - actualPriceRatioUpdateStartTime;\n\n // We've already validated that end time >= start time at this point.\n if (updateDuration < _MIN_PRICE_RATIO_UPDATE_DURATION) {\n revert PriceRatioUpdateDurationTooShort();\n }\n\n _updateVirtualBalances();\n\n uint256 startPriceRatio = _startPriceRatioUpdate(\n endPriceRatio,\n actualPriceRatioUpdateStartTime,\n priceRatioUpdateEndTime\n );\n\n uint256 priceRatioDelta = endPriceRatio >= startPriceRatio\n ? endPriceRatio - startPriceRatio\n : startPriceRatio - endPriceRatio;\n\n if (priceRatioDelta < _MIN_PRICE_RATIO_DELTA) {\n revert PriceRatioDeltaBelowMin(priceRatioDelta);\n }\n\n // Compute the rate of change, as a multiple of the present value per day. For example, if the initial price\n // range was 1,000 - 4,000, with a target price of 2,000, the raw ratio would be 4 (`startPriceRatio` ~ 1.414).\n // If the new fourth root is 1.682, the new `endPriceRatio` would be 1.682^4 ~ 8. Note that since the\n // centeredness remains constant, the new range would NOT be 1,000 - 8,000, but [C / sqrt(8), C * sqrt(8)],\n // or about 707 - 5657.\n //\n // If the `updateDuration is 1 day, the time periods cancel, so `actualDailyPriceRatioUpdateRate` is simply\n // given by: `endPriceRatio` / `startPriceRatio`; or 8 / 4 = 2: doubling once per day.\n // All values are 18-decimal fixed point.\n uint256 actualDailyPriceRatioUpdateRate = endPriceRatio > startPriceRatio\n ? FixedPoint.divUp(endPriceRatio * 1 days, startPriceRatio * updateDuration)\n : FixedPoint.divUp(startPriceRatio * 1 days, endPriceRatio * updateDuration);\n\n if (actualDailyPriceRatioUpdateRate > _MAX_DAILY_PRICE_RATIO_UPDATE_RATE) {\n revert PriceRatioUpdateTooFast();\n }\n }\n\n /// @inheritdoc IReClammPool\n function stopPriceRatioUpdate() external onlyWhenInitialized onlySwapFeeManagerOrGovernance(address(this)) {\n _updateVirtualBalances();\n\n PriceRatioState memory priceRatioState = _priceRatioState;\n if (priceRatioState.priceRatioUpdateEndTime < block.timestamp) {\n revert PriceRatioNotUpdating();\n }\n\n uint256 currentPriceRatio = _computeCurrentPriceRatio();\n\n _startPriceRatioUpdate(currentPriceRatio, block.timestamp, block.timestamp);\n }\n\n /// @inheritdoc IReClammPool\n function setDailyPriceShiftExponent(\n uint256 newDailyPriceShiftExponent\n )\n external\n onlyWhenInitialized\n onlyWhenVaultIsLocked\n onlySwapFeeManagerOrGovernance(address(this))\n returns (uint256)\n {\n // Update virtual balances before updating the daily price shift exponent.\n return _setDailyPriceShiftExponentAndUpdateVirtualBalances(newDailyPriceShiftExponent);\n }\n\n /// @inheritdoc IReClammPool\n function setCenterednessMargin(\n uint256 newCenterednessMargin\n )\n external\n onlyWhenInitialized\n onlyWhenVaultIsLocked\n onlyWithinTargetRange\n onlySwapFeeManagerOrGovernance(address(this))\n {\n _setCenterednessMarginAndUpdateVirtualBalances(newCenterednessMargin);\n }\n\n /********************************************************\n Internal Helpers\n ********************************************************/\n\n function _computeCurrentVirtualBalances(\n uint256[] memory balancesScaled18\n ) internal view returns (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed) {\n (currentVirtualBalanceA, currentVirtualBalanceB, changed) = ReClammMath.computeCurrentVirtualBalances(\n balancesScaled18,\n _lastVirtualBalanceA,\n _lastVirtualBalanceB,\n _dailyPriceShiftBase,\n _lastTimestamp,\n _centerednessMargin,\n _priceRatioState\n );\n }\n\n function _setLastVirtualBalances(uint256 virtualBalanceA, uint256 virtualBalanceB) internal {\n _lastVirtualBalanceA = virtualBalanceA.toUint128();\n _lastVirtualBalanceB = virtualBalanceB.toUint128();\n\n emit VirtualBalancesUpdated(virtualBalanceA, virtualBalanceB);\n\n _vault.emitAuxiliaryEvent(\"VirtualBalancesUpdated\", abi.encode(virtualBalanceA, virtualBalanceB));\n }\n\n function _startPriceRatioUpdate(\n uint256 endPriceRatio,\n uint256 priceRatioUpdateStartTime,\n uint256 priceRatioUpdateEndTime\n ) internal returns (uint256 startPriceRatio) {\n if (priceRatioUpdateStartTime > priceRatioUpdateEndTime || priceRatioUpdateStartTime < block.timestamp) {\n revert InvalidStartTime();\n }\n\n PriceRatioState memory priceRatioState = _priceRatioState;\n\n uint256 endFourthRootPriceRatio = ReClammMath.fourthRootScaled18(endPriceRatio);\n\n uint256 startFourthRootPriceRatio;\n if (_vault.isPoolInitialized(address(this))) {\n startPriceRatio = _computeCurrentPriceRatio();\n startFourthRootPriceRatio = ReClammMath.fourthRootScaled18(startPriceRatio);\n } else {\n startFourthRootPriceRatio = endFourthRootPriceRatio;\n startPriceRatio = endPriceRatio;\n }\n\n priceRatioState.startFourthRootPriceRatio = startFourthRootPriceRatio.toUint96();\n priceRatioState.endFourthRootPriceRatio = endFourthRootPriceRatio.toUint96();\n priceRatioState.priceRatioUpdateStartTime = priceRatioUpdateStartTime.toUint32();\n priceRatioState.priceRatioUpdateEndTime = priceRatioUpdateEndTime.toUint32();\n\n _priceRatioState = priceRatioState;\n\n emit PriceRatioStateUpdated(\n startFourthRootPriceRatio,\n endFourthRootPriceRatio,\n priceRatioUpdateStartTime,\n priceRatioUpdateEndTime\n );\n\n _vault.emitAuxiliaryEvent(\n \"PriceRatioStateUpdated\",\n abi.encode(\n startFourthRootPriceRatio,\n endFourthRootPriceRatio,\n priceRatioUpdateStartTime,\n priceRatioUpdateEndTime\n )\n );\n }\n\n /// Using the pool balances to update the virtual balances is dangerous with an unlocked vault, since the balances\n /// are manipulable.\n function _setDailyPriceShiftExponentAndUpdateVirtualBalances(\n uint256 dailyPriceShiftExponent\n ) internal returns (uint256) {\n // Update virtual balances with current daily price shift exponent.\n _updateVirtualBalances();\n\n // Update the price shift exponent.\n return _setDailyPriceShiftExponent(dailyPriceShiftExponent);\n }\n\n function _setDailyPriceShiftExponent(uint256 dailyPriceShiftExponent) internal returns (uint256) {\n if (dailyPriceShiftExponent > _MAX_DAILY_PRICE_SHIFT_EXPONENT) {\n revert DailyPriceShiftExponentTooHigh();\n }\n\n uint256 dailyPriceShiftBase = dailyPriceShiftExponent.toDailyPriceShiftBase();\n // There might be precision loss when adjusting to the internal representation, so we need to\n // convert back to the external representation to emit the event.\n dailyPriceShiftExponent = dailyPriceShiftBase.toDailyPriceShiftExponent();\n\n _dailyPriceShiftBase = dailyPriceShiftBase.toUint128();\n\n emit DailyPriceShiftExponentUpdated(dailyPriceShiftExponent, dailyPriceShiftBase);\n\n _vault.emitAuxiliaryEvent(\n \"DailyPriceShiftExponentUpdated\",\n abi.encode(dailyPriceShiftExponent, dailyPriceShiftBase)\n );\n\n return dailyPriceShiftExponent;\n }\n\n /**\n * @dev This function relies on the pool balance, which can be manipulated if the vault is unlocked. Also, the pool\n * must be within the target range before and after the operation, or the pool owner could arb the pool.\n */\n function _setCenterednessMarginAndUpdateVirtualBalances(uint256 centerednessMargin) internal {\n // Update the virtual balances using the current daily price shift exponent.\n _updateVirtualBalances();\n\n _setCenterednessMargin(centerednessMargin);\n }\n\n /**\n * @notice Sets the centeredness margin when the pool is created.\n * @param centerednessMargin The new centerednessMargin value, which must be within the target range\n */\n function _setCenterednessMargin(uint256 centerednessMargin) internal {\n if (centerednessMargin > FixedPoint.ONE) {\n revert InvalidCenterednessMargin();\n }\n\n // Straight cast is safe since the margin is validated above (and tests ensure the margins fit in uint64).\n _centerednessMargin = uint64(centerednessMargin);\n\n emit CenterednessMarginUpdated(centerednessMargin);\n\n _vault.emitAuxiliaryEvent(\"CenterednessMarginUpdated\", abi.encode(centerednessMargin));\n }\n\n function _updateVirtualBalances() internal {\n (, , , uint256[] memory balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n (uint256 currentVirtualBalanceA, uint256 currentVirtualBalanceB, bool changed) = _computeCurrentVirtualBalances(\n balancesScaled18\n );\n if (changed) {\n _setLastVirtualBalances(currentVirtualBalanceA, currentVirtualBalanceB);\n }\n\n _updateTimestamp();\n }\n\n // Updates the last timestamp to the current timestamp.\n function _updateTimestamp() internal {\n uint32 lastTimestamp32 = block.timestamp.toUint32();\n _lastTimestamp = lastTimestamp32;\n\n emit LastTimestampUpdated(lastTimestamp32);\n\n _vault.emitAuxiliaryEvent(\"LastTimestampUpdated\", abi.encode(lastTimestamp32));\n }\n\n /**\n * @notice Computes the fourth root of the current price ratio.\n * @dev The function calculates the price ratio between tokens A and B using their real and virtual balances,\n * then takes the fourth root of this ratio. The multiplication by FixedPoint.ONE before each sqrt operation\n * is done to maintain precision in the fixed-point calculations.\n *\n * @return The fourth root of the current price ratio, maintaining precision through fixed-point arithmetic\n */\n function _computeCurrentPriceRatio() internal view returns (uint256) {\n (, , , uint256[] memory balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n (uint256 virtualBalanceA, uint256 virtualBalanceB, ) = _computeCurrentVirtualBalances(balancesScaled18);\n\n return ReClammMath.computePriceRatio(balancesScaled18, virtualBalanceA, virtualBalanceB);\n }\n\n /// @dev This function relies on the pool balance, which can be manipulated if the vault is unlocked.\n function _isPoolWithinTargetRange() internal view returns (bool) {\n (, , , uint256[] memory balancesScaled18) = _vault.getPoolTokenInfo(address(this));\n\n return\n ReClammMath.isPoolWithinTargetRange(\n balancesScaled18,\n _lastVirtualBalanceA,\n _lastVirtualBalanceB,\n _centerednessMargin\n );\n }\n\n /// @dev Checks that the current balance ratio is within the initialization balance ratio tolerance.\n function _checkInitializationBalanceRatio(\n uint256[] memory balancesScaled18,\n uint256[] memory theoreticalBalances\n ) internal pure {\n uint256 realBalanceRatio = balancesScaled18[b].divDown(balancesScaled18[a]);\n uint256 theoreticalBalanceRatio = theoreticalBalances[b].divDown(theoreticalBalances[a]);\n\n uint256 ratioLowerBound = theoreticalBalanceRatio.mulDown(FixedPoint.ONE - _BALANCE_RATIO_AND_PRICE_TOLERANCE);\n uint256 ratioUpperBound = theoreticalBalanceRatio.mulDown(FixedPoint.ONE + _BALANCE_RATIO_AND_PRICE_TOLERANCE);\n\n if (realBalanceRatio < ratioLowerBound || realBalanceRatio > ratioUpperBound) {\n revert BalanceRatioExceedsTolerance();\n }\n }\n\n /**\n * @dev Checks that the current spot price is within the initialization tolerance of the price target, and that\n * the total price range after initialization (i.e., with real balances) corresponds closely enough to the desired\n * initial price range set on deployment.\n */\n function _checkInitializationPrices(\n uint256[] memory balancesScaled18,\n uint256 minPrice,\n uint256 maxPrice,\n uint256 targetPrice,\n uint256 virtualBalanceA,\n uint256 virtualBalanceB\n ) internal pure {\n // Compare current spot price with initialization target price.\n uint256 spotPrice = (balancesScaled18[b] + virtualBalanceB).divDown(balancesScaled18[a] + virtualBalanceA);\n _comparePrice(spotPrice, targetPrice);\n\n uint256 currentInvariant = ReClammMath.computeInvariant(\n balancesScaled18,\n virtualBalanceA,\n virtualBalanceB,\n Rounding.ROUND_DOWN\n );\n\n // Compare current min price with initialization min price.\n uint256 currentMinPrice = (virtualBalanceB * virtualBalanceB) / currentInvariant;\n _comparePrice(currentMinPrice, minPrice);\n\n // Compare current max price with initialization max price.\n uint256 currentMaxPrice = _computeMaxPrice(currentInvariant, virtualBalanceA);\n _comparePrice(currentMaxPrice, maxPrice);\n }\n\n function _comparePrice(uint256 currentPrice, uint256 initializationPrice) internal pure {\n uint256 priceLowerBound = initializationPrice.mulDown(FixedPoint.ONE - _BALANCE_RATIO_AND_PRICE_TOLERANCE);\n uint256 priceUpperBound = initializationPrice.mulDown(FixedPoint.ONE + _BALANCE_RATIO_AND_PRICE_TOLERANCE);\n\n if (currentPrice < priceLowerBound || currentPrice > priceUpperBound) {\n revert WrongInitializationPrices();\n }\n }\n\n function _getLastVirtualBalances() internal view returns (uint256[] memory) {\n uint256[] memory lastVirtualBalances = new uint256[](2);\n lastVirtualBalances[a] = _lastVirtualBalanceA;\n lastVirtualBalances[b] = _lastVirtualBalanceB;\n\n return lastVirtualBalances;\n }\n\n function _ensurePoolWithinTargetRange() internal view {\n if (_isPoolWithinTargetRange() == false) {\n revert PoolOutsideTargetRange();\n }\n }\n\n function _computeInitialBalanceRatioScaled18(uint256 rateA, uint256 rateB) internal view returns (uint256) {\n (\n uint256 minPriceScaled18,\n uint256 maxPriceScaled18,\n uint256 targetPriceScaled18\n ) = _getPriceSettingsAdjustedByRates(rateA, rateB);\n\n (uint256[] memory theoreticalBalancesScaled18, , , ) = ReClammMath.computeTheoreticalPriceRatioAndBalances(\n minPriceScaled18,\n maxPriceScaled18,\n targetPriceScaled18\n );\n\n return theoreticalBalancesScaled18[b].divDown(theoreticalBalancesScaled18[a]);\n }\n\n function _computeMaxPrice(uint256 currentInvariant, uint256 virtualBalanceA) internal pure returns (uint256) {\n return currentInvariant.divDown(virtualBalanceA.mulDown(virtualBalanceA));\n }\n\n function _getTokenRates() internal view returns (uint256 rateA, uint256 rateB) {\n (, TokenInfo[] memory tokenInfo, , ) = _vault.getPoolTokenInfo(address(this));\n\n rateA = _getTokenRate(tokenInfo[a]);\n rateB = _getTokenRate(tokenInfo[b]);\n }\n\n function _getTokenRate(TokenInfo memory tokenInfo) internal view returns (uint256) {\n return tokenInfo.tokenType == TokenType.WITH_RATE ? tokenInfo.rateProvider.getRate() : FixedPoint.ONE;\n }\n\n function _getPriceSettingsAdjustedByRates(\n uint256 rateA,\n uint256 rateB\n ) internal view returns (uint256 minPrice, uint256 maxPrice, uint256 targetPrice) {\n rateA = _TOKEN_A_PRICE_INCLUDES_RATE ? rateA : FixedPoint.ONE;\n rateB = _TOKEN_B_PRICE_INCLUDES_RATE ? rateB : FixedPoint.ONE;\n\n // Example: a pool waUSDC/waWETH, where the price is given in terms of the underlying tokens.\n // Consider a USDC/ETH pool where the price is 2000. Token A is ETH (waWETH); token B is USDC (waUSDC).\n // If waUSDC has a rate of 2 (1 waUSDC = 2 USDC), the price of waUSDC/ETH is 1000, which is\n // obtained by dividing the price by the rate of waUSDC, which is token B.\n // Now, if the rate of waWETH is 1.5 (1 waWETH = 1.5 ETH), waUSDC/waWETH = 1500, which is\n // obtained by multiplying the price by the rate of waWETH, which is token A.\n minPrice = (_INITIAL_MIN_PRICE * rateA) / rateB;\n maxPrice = (_INITIAL_MAX_PRICE * rateA) / rateB;\n targetPrice = (_INITIAL_TARGET_PRICE * rateA) / rateB;\n }\n}\n"},"contracts/ReClammPoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n// solhint-disable-next-line no-unused-import\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IPoolVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n TokenConfig,\n PoolRoleAccounts,\n LiquidityManagement\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolFactory } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { ReClammPoolFactoryLib, ReClammPriceParams } from \"./lib/ReClammPoolFactoryLib.sol\";\nimport { ReClammPoolParams } from \"./interfaces/IReClammPool.sol\";\nimport { ReClammPool } from \"./ReClammPool.sol\";\n\n/// @notice ReClammPool factory.\ncontract ReClammPoolFactory is IPoolVersion, BasePoolFactory, Version {\n using SafeCast for uint256;\n\n string private _poolVersion;\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n string memory factoryVersion,\n string memory poolVersion\n ) BasePoolFactory(vault, pauseWindowDuration, type(ReClammPool).creationCode) Version(factoryVersion) {\n _poolVersion = poolVersion;\n }\n\n /// @inheritdoc IPoolVersion\n function getPoolVersion() external view returns (string memory) {\n return _poolVersion;\n }\n\n /**\n * @notice Deploys a new `ReClammPool`.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokens An array of descriptors for the tokens the pool will manage\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param swapFeePercentage Initial swap fee percentage\n * @param priceParams Initial min, max and target prices; flags indicating whether token prices incorporate rates\n * @param dailyPriceShiftExponent Virtual balances will change by 2^(dailyPriceShiftExponent) per day\n * @param centerednessMargin How far the price can be from the center before the price range starts to move\n * @param salt The salt value that will be passed to deployment\n */\n function create(\n string memory name,\n string memory symbol,\n TokenConfig[] memory tokens,\n PoolRoleAccounts memory roleAccounts,\n uint256 swapFeePercentage,\n ReClammPriceParams memory priceParams,\n uint256 dailyPriceShiftExponent,\n uint256 centerednessMargin,\n bytes32 salt\n ) external returns (address pool) {\n if (roleAccounts.poolCreator != address(0)) {\n revert StandardPoolWithCreator();\n }\n\n ReClammPoolFactoryLib.validateTokenConfig(tokens, priceParams);\n\n LiquidityManagement memory liquidityManagement = getDefaultLiquidityManagement();\n liquidityManagement.enableDonation = false;\n liquidityManagement.disableUnbalancedLiquidity = true;\n\n pool = _create(\n abi.encode(\n ReClammPoolParams({\n name: name,\n symbol: symbol,\n version: _poolVersion,\n initialMinPrice: priceParams.initialMinPrice,\n initialMaxPrice: priceParams.initialMaxPrice,\n initialTargetPrice: priceParams.initialTargetPrice,\n tokenAPriceIncludesRate: priceParams.tokenAPriceIncludesRate,\n tokenBPriceIncludesRate: priceParams.tokenBPriceIncludesRate,\n dailyPriceShiftExponent: dailyPriceShiftExponent,\n centerednessMargin: centerednessMargin.toUint64()\n }),\n getVault()\n ),\n salt\n );\n\n _registerPoolWithVault(\n pool,\n tokens,\n swapFeePercentage,\n false, // not exempt from protocol fees\n roleAccounts,\n pool, // The pool is the hook\n liquidityManagement\n );\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":700,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"sources":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","exportedSymbols":{"IERC20":[7403],"IPoolInfo":[54],"TokenInfo":[2442]},"id":55,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":55,"sourceUnit":7404,"src":"72:72:0","symbolAliases":[{"foreign":{"id":2,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"../vault/VaultTypes.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":55,"sourceUnit":2610,"src":"146:52:0","symbolAliases":[{"foreign":{"id":4,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"155:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolInfo","contractDependencies":[],"contractKind":"interface","documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"200:203:0","text":" @notice Convenience interface for pools, to get easy access to information stored in the Vault.\n Intended mostly for off-chain requests; pools do not need to implement this to work properly."},"fullyImplemented":false,"id":54,"linearizedBaseContracts":[54],"name":"IPoolInfo","nameLocation":"414:9:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7,"nodeType":"StructuredDocumentation","src":"430:145:0","text":" @notice Gets the tokens registered in the pool.\n @return tokens List of tokens in the pool, sorted in registration order"},"functionSelector":"aa6ca808","id":14,"implemented":false,"kind":"function","modifiers":[],"name":"getTokens","nameLocation":"589:9:0","nodeType":"FunctionDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[],"src":"598:2:0"},"returnParameters":{"id":13,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"tokens","nameLocation":"640:6:0","nodeType":"VariableDeclaration","scope":14,"src":"624:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":10,"nodeType":"UserDefinedTypeName","pathNode":{"id":9,"name":"IERC20","nameLocations":["624:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"624:6:0"},"referencedDeclaration":7403,"src":"624:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":11,"nodeType":"ArrayTypeName","src":"624:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"623:24:0"},"scope":54,"src":"580:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":15,"nodeType":"StructuredDocumentation","src":"654:515:0","text":" @notice Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\n @return tokens Pool tokens, sorted in token registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"abb1dc44","id":32,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenInfo","nameLocation":"1183:12:0","nodeType":"FunctionDefinition","parameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"1195:2:0"},"returnParameters":{"id":31,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20,"mutability":"mutable","name":"tokens","nameLocation":"1274:6:0","nodeType":"VariableDeclaration","scope":32,"src":"1258:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":18,"nodeType":"UserDefinedTypeName","pathNode":{"id":17,"name":"IERC20","nameLocations":["1258:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"1258:6:0"},"referencedDeclaration":7403,"src":"1258:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":19,"nodeType":"ArrayTypeName","src":"1258:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":24,"mutability":"mutable","name":"tokenInfo","nameLocation":"1313:9:0","nodeType":"VariableDeclaration","scope":32,"src":"1294:28:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":22,"nodeType":"UserDefinedTypeName","pathNode":{"id":21,"name":"TokenInfo","nameLocations":["1294:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"1294:9:0"},"referencedDeclaration":2442,"src":"1294:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"id":23,"nodeType":"ArrayTypeName","src":"1294:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":27,"mutability":"mutable","name":"balancesRaw","nameLocation":"1353:11:0","nodeType":"VariableDeclaration","scope":32,"src":"1336:28:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26,"nodeType":"ArrayTypeName","src":"1336:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"1395:24:0","nodeType":"VariableDeclaration","scope":32,"src":"1378:41:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":28,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29,"nodeType":"ArrayTypeName","src":"1378:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1244:185:0"},"scope":54,"src":"1174:256:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":33,"nodeType":"StructuredDocumentation","src":"1436:555:0","text":" @notice Gets the current live balances of the pool as fixed point, 18-decimal numbers.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode.\n Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances),\n so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"b156aa0a","id":39,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"2005:22:0","nodeType":"FunctionDefinition","parameters":{"id":34,"nodeType":"ParameterList","parameters":[],"src":"2027:2:0"},"returnParameters":{"id":38,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"2070:20:0","nodeType":"VariableDeclaration","scope":39,"src":"2053:37:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"2053:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36,"nodeType":"ArrayTypeName","src":"2053:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2052:39:0"},"scope":54,"src":"1996:96:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40,"nodeType":"StructuredDocumentation","src":"2098:172:0","text":" @notice Fetches the static swap fee percentage for the pool.\n @return staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage"},"functionSelector":"d335b0cf","id":45,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"2284:26:0","nodeType":"FunctionDefinition","parameters":{"id":41,"nodeType":"ParameterList","parameters":[],"src":"2310:2:0"},"returnParameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2344:23:0","nodeType":"VariableDeclaration","scope":45,"src":"2336:31:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:33:0"},"scope":54,"src":"2275:94:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":46,"nodeType":"StructuredDocumentation","src":"2375:381:0","text":" @notice Gets the aggregate swap and yield fee percentages for a pool.\n @dev These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\n @return aggregateSwapFeePercentage The aggregate percentage fee applied to swaps\n @return aggregateYieldFeePercentage The aggregate percentage fee applied to yield"},"functionSelector":"81fa807c","id":53,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateFeePercentages","nameLocation":"2770:26:0","nodeType":"FunctionDefinition","parameters":{"id":47,"nodeType":"ParameterList","parameters":[],"src":"2796:2:0"},"returnParameters":{"id":52,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2854:26:0","nodeType":"VariableDeclaration","scope":53,"src":"2846:34:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48,"name":"uint256","nodeType":"ElementaryTypeName","src":"2846:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2890:27:0","nodeType":"VariableDeclaration","scope":53,"src":"2882:35:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50,"name":"uint256","nodeType":"ElementaryTypeName","src":"2882:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:73:0"},"scope":54,"src":"2761:158:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":55,"src":"404:2517:0","usedErrors":[],"usedEvents":[]}],"src":"46:2876:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[69]},"id":70,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":56,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":57,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":69,"linearizedBaseContracts":[69],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":58,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":60,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":59,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":68,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":64,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":68,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":62,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":67,"nodeType":"ParameterList","parameters":[{"constant":false,"id":66,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":68,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":65,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":69,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":70,"src":"149:458:1","usedErrors":[60],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","exportedSymbols":{"IPoolVersion":[79]},"id":80,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":71,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":72,"nodeType":"StructuredDocumentation","src":"72:90:2","text":"@notice Simple interface to retrieve the version of pools deployed by a pool factory."},"fullyImplemented":false,"id":79,"linearizedBaseContracts":[79],"name":"IPoolVersion","nameLocation":"172:12:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":73,"nodeType":"StructuredDocumentation","src":"191:414:2","text":" @notice Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n @dev This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know\n about each other. Note that this value will only be set at factory creation time.\n @return poolVersion A string representation of the pool version"},"functionSelector":"3f819b6f","id":78,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"619:14:2","nodeType":"FunctionDefinition","parameters":{"id":74,"nodeType":"ParameterList","parameters":[],"src":"633:2:2"},"returnParameters":{"id":77,"nodeType":"ParameterList","parameters":[{"constant":false,"id":76,"mutability":"mutable","name":"poolVersion","nameLocation":"673:11:2","nodeType":"VariableDeclaration","scope":78,"src":"659:25:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":75,"name":"string","nodeType":"ElementaryTypeName","src":"659:6:2","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"658:27:2"},"scope":79,"src":"610:76:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":80,"src":"162:526:2","usedErrors":[],"usedEvents":[]}],"src":"46:643:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[89]},"id":90,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":81,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":82,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":89,"linearizedBaseContracts":[89],"name":"IRateProvider","nameLocation":"138:13:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":83,"nodeType":"StructuredDocumentation","src":"158:573:3","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":88,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:3","nodeType":"FunctionDefinition","parameters":{"id":84,"nodeType":"ParameterList","parameters":[],"src":"752:2:3"},"returnParameters":{"id":87,"nodeType":"ParameterList","parameters":[{"constant":false,"id":86,"mutability":"mutable","name":"rate","nameLocation":"786:4:3","nodeType":"VariableDeclaration","scope":88,"src":"778:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":85,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:3"},"scope":89,"src":"736:56:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":90,"src":"128:666:3","usedErrors":[],"usedEvents":[]}],"src":"46:749:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[99]},"id":100,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":91,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":92,"nodeType":"StructuredDocumentation","src":"72:77:4","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":99,"linearizedBaseContracts":[99],"name":"IVersion","nameLocation":"159:8:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":93,"nodeType":"StructuredDocumentation","src":"174:418:4","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":98,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:4","nodeType":"FunctionDefinition","parameters":{"id":94,"nodeType":"ParameterList","parameters":[],"src":"613:2:4"},"returnParameters":{"id":97,"nodeType":"ParameterList","parameters":[{"constant":false,"id":96,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":98,"src":"639:13:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":95,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:4"},"scope":99,"src":"597:57:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":100,"src":"149:507:4","usedErrors":[],"usedEvents":[]}],"src":"46:611:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[115]},"id":116,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":101,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":102,"nodeType":"StructuredDocumentation","src":"72:56:5","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":115,"linearizedBaseContracts":[115],"name":"IAuthorizer","nameLocation":"138:11:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":103,"nodeType":"StructuredDocumentation","src":"156:354:5","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":114,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:5","nodeType":"FunctionDefinition","parameters":{"id":110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":105,"mutability":"mutable","name":"actionId","nameLocation":"543:8:5","nodeType":"VariableDeclaration","scope":114,"src":"535:16:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":104,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":107,"mutability":"mutable","name":"account","nameLocation":"561:7:5","nodeType":"VariableDeclaration","scope":114,"src":"553:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":106,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":109,"mutability":"mutable","name":"where","nameLocation":"578:5:5","nodeType":"VariableDeclaration","scope":114,"src":"570:13:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":108,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:5"},"returnParameters":{"id":113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":112,"mutability":"mutable","name":"success","nameLocation":"613:7:5","nodeType":"VariableDeclaration","scope":114,"src":"608:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":111,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:5"},"scope":115,"src":"515:107:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":116,"src":"128:496:5","usedErrors":[],"usedEvents":[]}],"src":"46:579:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","exportedSymbols":{"IBasePool":[165],"ISwapFeePercentageBounds":[795],"IUnbalancedLiquidityInvariantRatioBounds":[811],"PoolSwapParams":[2510],"Rounding":[2470],"SwapKind":[2473]},"id":166,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":117,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"./IUnbalancedLiquidityInvariantRatioBounds.sol","id":119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":166,"sourceUnit":812,"src":"72:106:6","symbolAliases":[{"foreign":{"id":118,"name":"IUnbalancedLiquidityInvariantRatioBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":811,"src":"81:40:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"./ISwapFeePercentageBounds.sol","id":121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":166,"sourceUnit":796,"src":"179:74:6","symbolAliases":[{"foreign":{"id":120,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":795,"src":"188:24:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":125,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":166,"sourceUnit":2610,"src":"254:70:6","symbolAliases":[{"foreign":{"id":122,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2510,"src":"263:14:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":123,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"279:8:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":124,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"289:8:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":127,"name":"ISwapFeePercentageBounds","nameLocations":["733:24:6"],"nodeType":"IdentifierPath","referencedDeclaration":795,"src":"733:24:6"},"id":128,"nodeType":"InheritanceSpecifier","src":"733:24:6"},{"baseName":{"id":129,"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocations":["759:40:6"],"nodeType":"IdentifierPath","referencedDeclaration":811,"src":"759:40:6"},"id":130,"nodeType":"InheritanceSpecifier","src":"759:40:6"}],"canonicalName":"IBasePool","contractDependencies":[],"contractKind":"interface","documentation":{"id":126,"nodeType":"StructuredDocumentation","src":"326:383:6","text":" @notice Base interface for a Balancer Pool.\n @dev All pool types should implement this interface. Note that it also requires implementation of:\n - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n liquidity operation."},"fullyImplemented":false,"id":165,"linearizedBaseContracts":[165,811,795],"name":"IBasePool","nameLocation":"720:9:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":131,"nodeType":"StructuredDocumentation","src":"1014:1934:6","text":" @notice Computes the pool's invariant.\n @dev This function computes the invariant based on current balances (and potentially other pool state).\n The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n returned for both rounding directions.\n You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n effectively add liquidity after the swap - but it should never decrease.\n 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n the total value should not change.\n Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n the same total value would get a different number of LP shares. In that case, LP shares would not be\n interchangeable, as they must be in a fair DEX.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The calculated invariant of the pool, represented as a uint256"},"functionSelector":"984de9e8","id":142,"implemented":false,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"2962:16:6","nodeType":"FunctionDefinition","parameters":{"id":138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3005:20:6","nodeType":"VariableDeclaration","scope":142,"src":"2988:37:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":132,"name":"uint256","nodeType":"ElementaryTypeName","src":"2988:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":133,"nodeType":"ArrayTypeName","src":"2988:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":137,"mutability":"mutable","name":"rounding","nameLocation":"3044:8:6","nodeType":"VariableDeclaration","scope":142,"src":"3035:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"},"typeName":{"id":136,"nodeType":"UserDefinedTypeName","pathNode":{"id":135,"name":"Rounding","nameLocations":["3035:8:6"],"nodeType":"IdentifierPath","referencedDeclaration":2470,"src":"3035:8:6"},"referencedDeclaration":2470,"src":"3035:8:6","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"2978:80:6"},"returnParameters":{"id":141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":140,"mutability":"mutable","name":"invariant","nameLocation":"3090:9:6","nodeType":"VariableDeclaration","scope":142,"src":"3082:17:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":139,"name":"uint256","nodeType":"ElementaryTypeName","src":"3082:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3081:19:6"},"scope":165,"src":"2953:148:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":143,"nodeType":"StructuredDocumentation","src":"3107:725:6","text":" @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n The pool must round up for the Vault to round in the protocol's favor when calling this function.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @return newBalance The new balance of the selected token, after the operation"},"functionSelector":"16a0b3e0","id":155,"implemented":false,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"3846:14:6","nodeType":"FunctionDefinition","parameters":{"id":151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":146,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3887:20:6","nodeType":"VariableDeclaration","scope":155,"src":"3870:37:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":144,"name":"uint256","nodeType":"ElementaryTypeName","src":"3870:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":145,"nodeType":"ArrayTypeName","src":"3870:9:6","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":148,"mutability":"mutable","name":"tokenInIndex","nameLocation":"3925:12:6","nodeType":"VariableDeclaration","scope":155,"src":"3917:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":147,"name":"uint256","nodeType":"ElementaryTypeName","src":"3917:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":150,"mutability":"mutable","name":"invariantRatio","nameLocation":"3955:14:6","nodeType":"VariableDeclaration","scope":155,"src":"3947:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":149,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3860:115:6"},"returnParameters":{"id":154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":153,"mutability":"mutable","name":"newBalance","nameLocation":"4007:10:6","nodeType":"VariableDeclaration","scope":155,"src":"3999:18:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":152,"name":"uint256","nodeType":"ElementaryTypeName","src":"3999:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3998:20:6"},"scope":165,"src":"3837:182:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":156,"nodeType":"StructuredDocumentation","src":"4233:206:6","text":" @notice Execute a swap in the pool.\n @param params Swap parameters (see above for struct definition)\n @return amountCalculatedScaled18 Calculated amount for the swap operation"},"functionSelector":"72c98186","id":164,"implemented":false,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"4453:6:6","nodeType":"FunctionDefinition","parameters":{"id":160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"params","nameLocation":"4484:6:6","nodeType":"VariableDeclaration","scope":164,"src":"4460:30:6","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":158,"nodeType":"UserDefinedTypeName","pathNode":{"id":157,"name":"PoolSwapParams","nameLocations":["4460:14:6"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"4460:14:6"},"referencedDeclaration":2510,"src":"4460:14:6","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"4459:32:6"},"returnParameters":{"id":163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":162,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"4518:24:6","nodeType":"VariableDeclaration","scope":164,"src":"4510:32:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":161,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:6","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:34:6"},"scope":165,"src":"4444:100:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":166,"src":"710:3836:6","usedErrors":[],"usedEvents":[]}],"src":"46:4501:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[69],"IBasePoolFactory":[239]},"id":240,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":167,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":240,"sourceUnit":70,"src":"72:80:7","symbolAliases":[{"foreign":{"id":168,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69,"src":"81:15:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":171,"name":"IAuthentication","nameLocations":["454:15:7"],"nodeType":"IdentifierPath","referencedDeclaration":69,"src":"454:15:7"},"id":172,"nodeType":"InheritanceSpecifier","src":"454:15:7"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":170,"nodeType":"StructuredDocumentation","src":"154:269:7","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":239,"linearizedBaseContracts":[239,69],"name":"IBasePoolFactory","nameLocation":"434:16:7","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":173,"nodeType":"StructuredDocumentation","src":"476:94:7","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":177,"name":"PoolCreated","nameLocation":"581:11:7","nodeType":"EventDefinition","parameters":{"id":176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":175,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:7","nodeType":"VariableDeclaration","scope":177,"src":"593:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":174,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:7"},"src":"575:40:7"},{"anonymous":false,"documentation":{"id":178,"nodeType":"StructuredDocumentation","src":"621:51:7","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":180,"name":"FactoryDisabled","nameLocation":"683:15:7","nodeType":"EventDefinition","parameters":{"id":179,"nodeType":"ParameterList","parameters":[],"src":"698:2:7"},"src":"677:24:7"},{"documentation":{"id":181,"nodeType":"StructuredDocumentation","src":"707:67:7","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":183,"name":"Disabled","nameLocation":"785:8:7","nodeType":"ErrorDefinition","parameters":{"id":182,"nodeType":"ParameterList","parameters":[],"src":"793:2:7"},"src":"779:17:7"},{"documentation":{"id":184,"nodeType":"StructuredDocumentation","src":"802:67:7","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":186,"name":"IndexOutOfBounds","nameLocation":"880:16:7","nodeType":"ErrorDefinition","parameters":{"id":185,"nodeType":"ParameterList","parameters":[],"src":"896:2:7"},"src":"874:25:7"},{"documentation":{"id":187,"nodeType":"StructuredDocumentation","src":"905:180:7","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":194,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:7","nodeType":"FunctionDefinition","parameters":{"id":190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":189,"mutability":"mutable","name":"pool","nameLocation":"1125:4:7","nodeType":"VariableDeclaration","scope":194,"src":"1117:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":188,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:7"},"returnParameters":{"id":193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":192,"mutability":"mutable","name":"success","nameLocation":"1159:7:7","nodeType":"VariableDeclaration","scope":194,"src":"1154:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":191,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:7"},"scope":239,"src":"1090:78:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":195,"nodeType":"StructuredDocumentation","src":"1174:245:7","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":200,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:7","nodeType":"FunctionDefinition","parameters":{"id":196,"nodeType":"ParameterList","parameters":[],"src":"1445:2:7"},"returnParameters":{"id":199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":198,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:7","nodeType":"VariableDeclaration","scope":200,"src":"1471:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":197,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:7"},"scope":239,"src":"1424:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"1496:510:7","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":211,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:7","nodeType":"FunctionDefinition","parameters":{"id":206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":203,"mutability":"mutable","name":"start","nameLocation":"2044:5:7","nodeType":"VariableDeclaration","scope":211,"src":"2036:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":202,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":205,"mutability":"mutable","name":"count","nameLocation":"2059:5:7","nodeType":"VariableDeclaration","scope":211,"src":"2051:13:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":204,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:7"},"returnParameters":{"id":210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":209,"mutability":"mutable","name":"pools","nameLocation":"2106:5:7","nodeType":"VariableDeclaration","scope":211,"src":"2089:22:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":207,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":208,"nodeType":"ArrayTypeName","src":"2089:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:7"},"scope":239,"src":"2011:102:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":212,"nodeType":"StructuredDocumentation","src":"2119:150:7","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":218,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:7","nodeType":"FunctionDefinition","parameters":{"id":213,"nodeType":"ParameterList","parameters":[],"src":"2291:2:7"},"returnParameters":{"id":217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":216,"mutability":"mutable","name":"pools","nameLocation":"2334:5:7","nodeType":"VariableDeclaration","scope":218,"src":"2317:22:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":214,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":215,"nodeType":"ArrayTypeName","src":"2317:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:7"},"scope":239,"src":"2274:67:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":219,"nodeType":"StructuredDocumentation","src":"2347:322:7","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":228,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:7","nodeType":"FunctionDefinition","parameters":{"id":224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":221,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:7","nodeType":"VariableDeclaration","scope":228,"src":"2713:28:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":220,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":223,"mutability":"mutable","name":"salt","nameLocation":"2759:4:7","nodeType":"VariableDeclaration","scope":228,"src":"2751:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":222,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:7","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:7"},"returnParameters":{"id":227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":226,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:7","nodeType":"VariableDeclaration","scope":228,"src":"2793:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":225,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:7"},"scope":239,"src":"2674:146:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":229,"nodeType":"StructuredDocumentation","src":"2826:143:7","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":234,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:7","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[],"src":"2993:2:7"},"returnParameters":{"id":233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"success","nameLocation":"3024:7:7","nodeType":"VariableDeclaration","scope":234,"src":"3019:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":231,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:7"},"scope":239,"src":"2974:59:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":235,"nodeType":"StructuredDocumentation","src":"3039:182:7","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":238,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:7","nodeType":"FunctionDefinition","parameters":{"id":236,"nodeType":"ParameterList","parameters":[],"src":"3242:2:7"},"returnParameters":{"id":237,"nodeType":"ParameterList","parameters":[],"src":"3253:0:7"},"scope":239,"src":"3226:28:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":240,"src":"424:2832:7","usedErrors":[60,183,186],"usedEvents":[177,180]}],"src":"46:3211:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AfterSwapParams":[2539],"HookFlags":[2365],"IHooks":[441],"LiquidityManagement":[2318],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"SwapKind":[2473],"TokenConfig":[2432]},"id":442,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":241,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":250,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":442,"sourceUnit":2610,"src":"289:193:8","symbolAliases":[{"foreign":{"id":242,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"302:11:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":243,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2318,"src":"319:19:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":244,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2510,"src":"344:14:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":245,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2539,"src":"364:15:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":246,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2365,"src":"385:9:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":247,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"400:16:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":248,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2566,"src":"422:19:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":249,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"447:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":251,"nodeType":"StructuredDocumentation","src":"484:490:8","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":441,"linearizedBaseContracts":[441],"name":"IHooks","nameLocation":"985:6:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":252,"nodeType":"StructuredDocumentation","src":"1205:769:8","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":268,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:8","nodeType":"FunctionDefinition","parameters":{"id":264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":254,"mutability":"mutable","name":"factory","nameLocation":"2016:7:8","nodeType":"VariableDeclaration","scope":268,"src":"2008:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":253,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":256,"mutability":"mutable","name":"pool","nameLocation":"2041:4:8","nodeType":"VariableDeclaration","scope":268,"src":"2033:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":255,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":260,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:8","nodeType":"VariableDeclaration","scope":268,"src":"2055:32:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":258,"nodeType":"UserDefinedTypeName","pathNode":{"id":257,"name":"TokenConfig","nameLocations":["2055:11:8"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"2055:11:8"},"referencedDeclaration":2432,"src":"2055:11:8","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":259,"nodeType":"ArrayTypeName","src":"2055:13:8","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":263,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:8","nodeType":"VariableDeclaration","scope":268,"src":"2097:48:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"LiquidityManagement","nameLocations":["2097:19:8"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"2097:19:8"},"referencedDeclaration":2318,"src":"2097:19:8","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:8"},"returnParameters":{"id":267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":266,"mutability":"mutable","name":"success","nameLocation":"2175:7:8","nodeType":"VariableDeclaration","scope":268,"src":"2170:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":265,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:8"},"scope":441,"src":"1979:205:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":269,"nodeType":"StructuredDocumentation","src":"2190:412:8","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":275,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:8","nodeType":"FunctionDefinition","parameters":{"id":270,"nodeType":"ParameterList","parameters":[],"src":"2628:2:8"},"returnParameters":{"id":274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":273,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:8","nodeType":"VariableDeclaration","scope":275,"src":"2654:26:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":272,"nodeType":"UserDefinedTypeName","pathNode":{"id":271,"name":"HookFlags","nameLocations":["2654:9:8"],"nodeType":"IdentifierPath","referencedDeclaration":2365,"src":"2654:9:8"},"referencedDeclaration":2365,"src":"2654:9:8","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:8"},"scope":441,"src":"2607:75:8","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":276,"nodeType":"StructuredDocumentation","src":"2897:484:8","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":286,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:8","nodeType":"FunctionDefinition","parameters":{"id":282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":279,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:8","nodeType":"VariableDeclaration","scope":286,"src":"3414:31:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":277,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":278,"nodeType":"ArrayTypeName","src":"3414:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":281,"mutability":"mutable","name":"userData","nameLocation":"3460:8:8","nodeType":"VariableDeclaration","scope":286,"src":"3447:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":280,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:8"},"returnParameters":{"id":285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":284,"mutability":"mutable","name":"success","nameLocation":"3493:7:8","nodeType":"VariableDeclaration","scope":286,"src":"3488:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":283,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:8"},"scope":441,"src":"3386:116:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":287,"nodeType":"StructuredDocumentation","src":"3508:563:8","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":299,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:8","nodeType":"FunctionDefinition","parameters":{"id":295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":290,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:8","nodeType":"VariableDeclaration","scope":299,"src":"4112:31:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":288,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":289,"nodeType":"ArrayTypeName","src":"4112:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":292,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:8","nodeType":"VariableDeclaration","scope":299,"src":"4153:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":291,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":294,"mutability":"mutable","name":"userData","nameLocation":"4196:8:8","nodeType":"VariableDeclaration","scope":299,"src":"4183:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":293,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:8"},"returnParameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":297,"mutability":"mutable","name":"success","nameLocation":"4234:7:8","nodeType":"VariableDeclaration","scope":299,"src":"4229:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":296,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:8"},"scope":441,"src":"4076:167:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"4461:953:8","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":322,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:8","nodeType":"FunctionDefinition","parameters":{"id":318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"mutability":"mutable","name":"router","nameLocation":"5466:6:8","nodeType":"VariableDeclaration","scope":322,"src":"5458:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":301,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":304,"mutability":"mutable","name":"pool","nameLocation":"5490:4:8","nodeType":"VariableDeclaration","scope":322,"src":"5482:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":303,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":307,"mutability":"mutable","name":"kind","nameLocation":"5521:4:8","nodeType":"VariableDeclaration","scope":322,"src":"5504:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":306,"nodeType":"UserDefinedTypeName","pathNode":{"id":305,"name":"AddLiquidityKind","nameLocations":["5504:16:8"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"5504:16:8"},"referencedDeclaration":2545,"src":"5504:16:8","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":310,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:8","nodeType":"VariableDeclaration","scope":322,"src":"5535:37:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":308,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":309,"nodeType":"ArrayTypeName","src":"5535:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":312,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:8","nodeType":"VariableDeclaration","scope":322,"src":"5582:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":311,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":315,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:8","nodeType":"VariableDeclaration","scope":322,"src":"5615:33:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":313,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":314,"nodeType":"ArrayTypeName","src":"5615:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":317,"mutability":"mutable","name":"userData","nameLocation":"5671:8:8","nodeType":"VariableDeclaration","scope":322,"src":"5658:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":316,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:8"},"returnParameters":{"id":321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":320,"mutability":"mutable","name":"success","nameLocation":"5709:7:8","nodeType":"VariableDeclaration","scope":322,"src":"5704:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":319,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:8"},"scope":441,"src":"5419:299:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":323,"nodeType":"StructuredDocumentation","src":"5724:1250:8","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":351,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:8","nodeType":"FunctionDefinition","parameters":{"id":344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":325,"mutability":"mutable","name":"router","nameLocation":"7025:6:8","nodeType":"VariableDeclaration","scope":351,"src":"7017:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":324,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":327,"mutability":"mutable","name":"pool","nameLocation":"7049:4:8","nodeType":"VariableDeclaration","scope":351,"src":"7041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":326,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":330,"mutability":"mutable","name":"kind","nameLocation":"7080:4:8","nodeType":"VariableDeclaration","scope":351,"src":"7063:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":329,"nodeType":"UserDefinedTypeName","pathNode":{"id":328,"name":"AddLiquidityKind","nameLocations":["7063:16:8"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"7063:16:8"},"referencedDeclaration":2545,"src":"7063:16:8","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":333,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:8","nodeType":"VariableDeclaration","scope":351,"src":"7094:34:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":331,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":332,"nodeType":"ArrayTypeName","src":"7094:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":336,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:8","nodeType":"VariableDeclaration","scope":351,"src":"7138:29:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":334,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":335,"nodeType":"ArrayTypeName","src":"7138:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":338,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:8","nodeType":"VariableDeclaration","scope":351,"src":"7177:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":337,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":341,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:8","nodeType":"VariableDeclaration","scope":351,"src":"7207:33:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":339,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":340,"nodeType":"ArrayTypeName","src":"7207:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":343,"mutability":"mutable","name":"userData","nameLocation":"7263:8:8","nodeType":"VariableDeclaration","scope":351,"src":"7250:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":342,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:8"},"returnParameters":{"id":350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":346,"mutability":"mutable","name":"success","nameLocation":"7301:7:8","nodeType":"VariableDeclaration","scope":351,"src":"7296:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":345,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":349,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:8","nodeType":"VariableDeclaration","scope":351,"src":"7310:41:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":347,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":348,"nodeType":"ArrayTypeName","src":"7310:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:8"},"scope":441,"src":"6979:374:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":352,"nodeType":"StructuredDocumentation","src":"7572:992:8","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":374,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:8","nodeType":"FunctionDefinition","parameters":{"id":370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":354,"mutability":"mutable","name":"router","nameLocation":"8619:6:8","nodeType":"VariableDeclaration","scope":374,"src":"8611:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":353,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":356,"mutability":"mutable","name":"pool","nameLocation":"8643:4:8","nodeType":"VariableDeclaration","scope":374,"src":"8635:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":355,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":359,"mutability":"mutable","name":"kind","nameLocation":"8677:4:8","nodeType":"VariableDeclaration","scope":374,"src":"8657:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":358,"nodeType":"UserDefinedTypeName","pathNode":{"id":357,"name":"RemoveLiquidityKind","nameLocations":["8657:19:8"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"8657:19:8"},"referencedDeclaration":2566,"src":"8657:19:8","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":361,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:8","nodeType":"VariableDeclaration","scope":374,"src":"8691:22:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":360,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":364,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:8","nodeType":"VariableDeclaration","scope":374,"src":"8723:38:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":362,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":363,"nodeType":"ArrayTypeName","src":"8723:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":367,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:8","nodeType":"VariableDeclaration","scope":374,"src":"8771:33:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":365,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":366,"nodeType":"ArrayTypeName","src":"8771:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":369,"mutability":"mutable","name":"userData","nameLocation":"8827:8:8","nodeType":"VariableDeclaration","scope":374,"src":"8814:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":368,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:8"},"returnParameters":{"id":373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":372,"mutability":"mutable","name":"success","nameLocation":"8865:7:8","nodeType":"VariableDeclaration","scope":374,"src":"8860:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":371,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:8"},"scope":441,"src":"8569:305:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":375,"nodeType":"StructuredDocumentation","src":"8880:1276:8","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":403,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:8","nodeType":"FunctionDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":377,"mutability":"mutable","name":"router","nameLocation":"10210:6:8","nodeType":"VariableDeclaration","scope":403,"src":"10202:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":376,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":379,"mutability":"mutable","name":"pool","nameLocation":"10234:4:8","nodeType":"VariableDeclaration","scope":403,"src":"10226:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":378,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":382,"mutability":"mutable","name":"kind","nameLocation":"10268:4:8","nodeType":"VariableDeclaration","scope":403,"src":"10248:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":381,"nodeType":"UserDefinedTypeName","pathNode":{"id":380,"name":"RemoveLiquidityKind","nameLocations":["10248:19:8"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"10248:19:8"},"referencedDeclaration":2566,"src":"10248:19:8","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":384,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:8","nodeType":"VariableDeclaration","scope":403,"src":"10282:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":383,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":387,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:8","nodeType":"VariableDeclaration","scope":403,"src":"10311:35:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":385,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":386,"nodeType":"ArrayTypeName","src":"10311:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":390,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:8","nodeType":"VariableDeclaration","scope":403,"src":"10356:30:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":388,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":389,"nodeType":"ArrayTypeName","src":"10356:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":393,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:8","nodeType":"VariableDeclaration","scope":403,"src":"10396:33:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":391,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":392,"nodeType":"ArrayTypeName","src":"10396:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":395,"mutability":"mutable","name":"userData","nameLocation":"10452:8:8","nodeType":"VariableDeclaration","scope":403,"src":"10439:21:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":394,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:8"},"returnParameters":{"id":402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":398,"mutability":"mutable","name":"success","nameLocation":"10490:7:8","nodeType":"VariableDeclaration","scope":403,"src":"10485:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":397,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":401,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:8","nodeType":"VariableDeclaration","scope":403,"src":"10499:42:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":399,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":400,"nodeType":"ArrayTypeName","src":"10499:9:8","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:8"},"scope":441,"src":"10161:382:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":404,"nodeType":"StructuredDocumentation","src":"10753:556:8","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":414,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:8","nodeType":"FunctionDefinition","parameters":{"id":410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":407,"mutability":"mutable","name":"params","nameLocation":"11360:6:8","nodeType":"VariableDeclaration","scope":414,"src":"11336:30:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":406,"nodeType":"UserDefinedTypeName","pathNode":{"id":405,"name":"PoolSwapParams","nameLocations":["11336:14:8"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"11336:14:8"},"referencedDeclaration":2510,"src":"11336:14:8","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":409,"mutability":"mutable","name":"pool","nameLocation":"11376:4:8","nodeType":"VariableDeclaration","scope":414,"src":"11368:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":408,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:8"},"returnParameters":{"id":413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":412,"mutability":"mutable","name":"success","nameLocation":"11405:7:8","nodeType":"VariableDeclaration","scope":414,"src":"11400:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":411,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:8"},"scope":441,"src":"11314:100:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":415,"nodeType":"StructuredDocumentation","src":"11420:671:8","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":425,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:8","nodeType":"FunctionDefinition","parameters":{"id":419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":418,"mutability":"mutable","name":"params","nameLocation":"12151:6:8","nodeType":"VariableDeclaration","scope":425,"src":"12126:31:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2539_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":417,"nodeType":"UserDefinedTypeName","pathNode":{"id":416,"name":"AfterSwapParams","nameLocations":["12126:15:8"],"nodeType":"IdentifierPath","referencedDeclaration":2539,"src":"12126:15:8"},"referencedDeclaration":2539,"src":"12126:15:8","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2539_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:8"},"returnParameters":{"id":424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":421,"mutability":"mutable","name":"success","nameLocation":"12187:7:8","nodeType":"VariableDeclaration","scope":425,"src":"12182:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":420,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":423,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:8","nodeType":"VariableDeclaration","scope":425,"src":"12196:39:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":422,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:8"},"scope":441,"src":"12096:141:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"12243:795:8","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":440,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:8","nodeType":"FunctionDefinition","parameters":{"id":434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"params","nameLocation":"13119:6:8","nodeType":"VariableDeclaration","scope":440,"src":"13095:30:8","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":428,"nodeType":"UserDefinedTypeName","pathNode":{"id":427,"name":"PoolSwapParams","nameLocations":["13095:14:8"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"13095:14:8"},"referencedDeclaration":2510,"src":"13095:14:8","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":431,"mutability":"mutable","name":"pool","nameLocation":"13143:4:8","nodeType":"VariableDeclaration","scope":440,"src":"13135:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":430,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":433,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:8","nodeType":"VariableDeclaration","scope":440,"src":"13157:31:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":432,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:8"},"returnParameters":{"id":439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":436,"mutability":"mutable","name":"success","nameLocation":"13223:7:8","nodeType":"VariableDeclaration","scope":440,"src":"13218:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":435,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":438,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:8","nodeType":"VariableDeclaration","scope":440,"src":"13232:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":437,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:8"},"scope":441,"src":"13043:223:8","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":442,"src":"975:12293:8","usedErrors":[],"usedEvents":[]}],"src":"46:13223:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[7403],"IProtocolFeeController":[779],"IVault":[849]},"id":780,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":443,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":780,"sourceUnit":7404,"src":"72:72:9","symbolAliases":[{"foreign":{"id":444,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":780,"sourceUnit":850,"src":"146:38:9","symbolAliases":[{"foreign":{"id":446,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"155:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":448,"nodeType":"StructuredDocumentation","src":"186:80:9","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":779,"linearizedBaseContracts":[779],"name":"IProtocolFeeController","nameLocation":"276:22:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":449,"nodeType":"StructuredDocumentation","src":"305:157:9","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":453,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:9","nodeType":"EventDefinition","parameters":{"id":452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:9","nodeType":"VariableDeclaration","scope":453,"src":"512:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":450,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:9"},"src":"467:72:9"},{"anonymous":false,"documentation":{"id":454,"nodeType":"StructuredDocumentation","src":"545:160:9","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":458,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:9","nodeType":"EventDefinition","parameters":{"id":457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":456,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:9","nodeType":"VariableDeclaration","scope":458,"src":"756:26:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":455,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:9"},"src":"710:74:9"},{"anonymous":false,"documentation":{"id":459,"nodeType":"StructuredDocumentation","src":"790:245:9","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":465,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:9","nodeType":"EventDefinition","parameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:9","nodeType":"VariableDeclaration","scope":465,"src":"1079:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":463,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:9","nodeType":"VariableDeclaration","scope":465,"src":"1101:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":462,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:9"},"src":"1040:88:9"},{"anonymous":false,"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"1134:249:9","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":472,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:9","nodeType":"EventDefinition","parameters":{"id":471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:9","nodeType":"VariableDeclaration","scope":472,"src":"1428:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":470,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:9","nodeType":"VariableDeclaration","scope":472,"src":"1450:26:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":469,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:9"},"src":"1388:90:9"},{"anonymous":false,"documentation":{"id":473,"nodeType":"StructuredDocumentation","src":"1484:267:9","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":479,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:9","nodeType":"EventDefinition","parameters":{"id":478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":475,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:9","nodeType":"VariableDeclaration","scope":479,"src":"1798:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":474,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":477,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:9","nodeType":"VariableDeclaration","scope":479,"src":"1820:36:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":476,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:9"},"src":"1756:102:9"},{"anonymous":false,"documentation":{"id":480,"nodeType":"StructuredDocumentation","src":"1864:271:9","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":486,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:9","nodeType":"EventDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":482,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:9","nodeType":"VariableDeclaration","scope":486,"src":"2183:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":481,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":484,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:9","nodeType":"VariableDeclaration","scope":486,"src":"2205:37:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":483,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:9"},"src":"2140:104:9"},{"anonymous":false,"documentation":{"id":487,"nodeType":"StructuredDocumentation","src":"2250:560:9","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":496,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:9","nodeType":"EventDefinition","parameters":{"id":495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":489,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:9","nodeType":"VariableDeclaration","scope":496,"src":"2846:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":488,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":492,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:9","nodeType":"VariableDeclaration","scope":496,"src":"2868:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":491,"nodeType":"UserDefinedTypeName","pathNode":{"id":490,"name":"IERC20","nameLocations":["2868:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2868:6:9"},"referencedDeclaration":7403,"src":"2868:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":494,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:9","nodeType":"VariableDeclaration","scope":496,"src":"2890:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":493,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:9"},"src":"2815:91:9"},{"anonymous":false,"documentation":{"id":497,"nodeType":"StructuredDocumentation","src":"2912:564:9","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":506,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:9","nodeType":"EventDefinition","parameters":{"id":505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":499,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:9","nodeType":"VariableDeclaration","scope":506,"src":"3513:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":498,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":502,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:9","nodeType":"VariableDeclaration","scope":506,"src":"3535:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":501,"nodeType":"UserDefinedTypeName","pathNode":{"id":500,"name":"IERC20","nameLocations":["3535:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3535:6:9"},"referencedDeclaration":7403,"src":"3535:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":504,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:9","nodeType":"VariableDeclaration","scope":506,"src":"3557:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":503,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:9"},"src":"3481:92:9"},{"anonymous":false,"documentation":{"id":507,"nodeType":"StructuredDocumentation","src":"3579:333:9","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":518,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:9","nodeType":"EventDefinition","parameters":{"id":517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":509,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:9","nodeType":"VariableDeclaration","scope":518,"src":"3945:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":508,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":512,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:9","nodeType":"VariableDeclaration","scope":518,"src":"3967:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":511,"nodeType":"UserDefinedTypeName","pathNode":{"id":510,"name":"IERC20","nameLocations":["3967:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3967:6:9"},"referencedDeclaration":7403,"src":"3967:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":514,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:9","nodeType":"VariableDeclaration","scope":518,"src":"3989:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":513,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":516,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:9","nodeType":"VariableDeclaration","scope":518,"src":"4016:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":515,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:9"},"src":"3917:115:9"},{"anonymous":false,"documentation":{"id":519,"nodeType":"StructuredDocumentation","src":"4038:398:9","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":530,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:9","nodeType":"EventDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":521,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:9","nodeType":"VariableDeclaration","scope":530,"src":"4481:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":520,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":524,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:9","nodeType":"VariableDeclaration","scope":530,"src":"4511:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":523,"nodeType":"UserDefinedTypeName","pathNode":{"id":522,"name":"IERC20","nameLocations":["4511:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"4511:6:9"},"referencedDeclaration":7403,"src":"4511:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":526,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:9","nodeType":"VariableDeclaration","scope":530,"src":"4541:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":528,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:9","nodeType":"VariableDeclaration","scope":530,"src":"4576:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":527,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:9"},"src":"4441:156:9"},{"anonymous":false,"documentation":{"id":531,"nodeType":"StructuredDocumentation","src":"4603:529:9","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":539,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:9","nodeType":"EventDefinition","parameters":{"id":538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":533,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:9","nodeType":"VariableDeclaration","scope":539,"src":"5190:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":532,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":535,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:9","nodeType":"VariableDeclaration","scope":539,"src":"5220:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":534,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":537,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:9","nodeType":"VariableDeclaration","scope":539,"src":"5264:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":536,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:9"},"src":"5137:158:9"},{"anonymous":false,"documentation":{"id":540,"nodeType":"StructuredDocumentation","src":"5301:533:9","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":548,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:9","nodeType":"EventDefinition","parameters":{"id":547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":542,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:9","nodeType":"VariableDeclaration","scope":548,"src":"5893:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":541,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":544,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:9","nodeType":"VariableDeclaration","scope":548,"src":"5923:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":546,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:9","nodeType":"VariableDeclaration","scope":548,"src":"5968:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":545,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:9"},"src":"5839:160:9"},{"anonymous":false,"documentation":{"id":549,"nodeType":"StructuredDocumentation","src":"6005:738:9","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":557,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:9","nodeType":"EventDefinition","parameters":{"id":556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":551,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:9","nodeType":"VariableDeclaration","scope":557,"src":"6786:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":550,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":553,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:9","nodeType":"VariableDeclaration","scope":557,"src":"6808:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":552,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":555,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:9","nodeType":"VariableDeclaration","scope":557,"src":"6837:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":554,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:9"},"src":"6748:113:9"},{"documentation":{"id":558,"nodeType":"StructuredDocumentation","src":"6867:219:9","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":560,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:9","nodeType":"ErrorDefinition","parameters":{"id":559,"nodeType":"ParameterList","parameters":[],"src":"7129:2:9"},"src":"7091:41:9"},{"documentation":{"id":561,"nodeType":"StructuredDocumentation","src":"7138:221:9","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":563,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:9","nodeType":"ErrorDefinition","parameters":{"id":562,"nodeType":"ParameterList","parameters":[],"src":"7403:2:9"},"src":"7364:42:9"},{"documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"7412:156:9","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":568,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:9","nodeType":"ErrorDefinition","parameters":{"id":567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":566,"mutability":"mutable","name":"pool","nameLocation":"7612:4:9","nodeType":"VariableDeclaration","scope":568,"src":"7604:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":565,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:9"},"src":"7573:45:9"},{"documentation":{"id":569,"nodeType":"StructuredDocumentation","src":"7624:236:9","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":575,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:9","nodeType":"ErrorDefinition","parameters":{"id":574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":571,"mutability":"mutable","name":"caller","nameLocation":"7902:6:9","nodeType":"VariableDeclaration","scope":575,"src":"7894:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":570,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":573,"mutability":"mutable","name":"pool","nameLocation":"7918:4:9","nodeType":"VariableDeclaration","scope":575,"src":"7910:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":572,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:9"},"src":"7865:59:9"},{"documentation":{"id":576,"nodeType":"StructuredDocumentation","src":"7930:110:9","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":578,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:9","nodeType":"ErrorDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[],"src":"8082:2:9"},"src":"8045:40:9"},{"documentation":{"id":579,"nodeType":"StructuredDocumentation","src":"8091:109:9","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":585,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:9","nodeType":"FunctionDefinition","parameters":{"id":580,"nodeType":"ParameterList","parameters":[],"src":"8219:2:9"},"returnParameters":{"id":584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":585,"src":"8245:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":582,"nodeType":"UserDefinedTypeName","pathNode":{"id":581,"name":"IVault","nameLocations":["8245:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"8245:6:9"},"referencedDeclaration":849,"src":"8245:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:9"},"scope":779,"src":"8205:48:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":586,"nodeType":"StructuredDocumentation","src":"8259:131:9","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":591,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:9","nodeType":"FunctionDefinition","parameters":{"id":589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":588,"mutability":"mutable","name":"pool","nameLocation":"8433:4:9","nodeType":"VariableDeclaration","scope":591,"src":"8425:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":587,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:9"},"returnParameters":{"id":590,"nodeType":"ParameterList","parameters":[],"src":"8447:0:9"},"scope":779,"src":"8395:53:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":592,"nodeType":"StructuredDocumentation","src":"8454:156:9","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":597,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:9","nodeType":"FunctionDefinition","parameters":{"id":593,"nodeType":"ParameterList","parameters":[],"src":"8658:2:9"},"returnParameters":{"id":596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":595,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:9","nodeType":"VariableDeclaration","scope":597,"src":"8684:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":594,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:9"},"scope":779,"src":"8615:104:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":598,"nodeType":"StructuredDocumentation","src":"8725:159:9","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":603,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:9","nodeType":"FunctionDefinition","parameters":{"id":599,"nodeType":"ParameterList","parameters":[],"src":"8933:2:9"},"returnParameters":{"id":602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":601,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:9","nodeType":"VariableDeclaration","scope":603,"src":"8959:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":600,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:9"},"scope":779,"src":"8889:106:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":604,"nodeType":"StructuredDocumentation","src":"9001:207:9","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":611,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:9","nodeType":"FunctionDefinition","parameters":{"id":607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":606,"mutability":"mutable","name":"pool","nameLocation":"9247:4:9","nodeType":"VariableDeclaration","scope":611,"src":"9239:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":605,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:9"},"returnParameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":611,"src":"9276:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":608,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:9"},"scope":779,"src":"9213:69:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":612,"nodeType":"StructuredDocumentation","src":"9288:292:9","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":621,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:9","nodeType":"FunctionDefinition","parameters":{"id":615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":614,"mutability":"mutable","name":"pool","nameLocation":"9638:4:9","nodeType":"VariableDeclaration","scope":621,"src":"9630:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":613,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:9"},"returnParameters":{"id":620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":617,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:9","nodeType":"VariableDeclaration","scope":621,"src":"9672:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":616,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":619,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:9","nodeType":"VariableDeclaration","scope":621,"src":"9707:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":618,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:9"},"scope":779,"src":"9585:139:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":622,"nodeType":"StructuredDocumentation","src":"9730:295:9","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":631,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:9","nodeType":"FunctionDefinition","parameters":{"id":625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":624,"mutability":"mutable","name":"pool","nameLocation":"10084:4:9","nodeType":"VariableDeclaration","scope":631,"src":"10076:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":623,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:9"},"returnParameters":{"id":630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":627,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:9","nodeType":"VariableDeclaration","scope":631,"src":"10118:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":626,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":629,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:9","nodeType":"VariableDeclaration","scope":631,"src":"10154:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":628,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:9"},"scope":779,"src":"10030:141:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":632,"nodeType":"StructuredDocumentation","src":"10177:249:9","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":639,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:9","nodeType":"FunctionDefinition","parameters":{"id":635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":634,"mutability":"mutable","name":"pool","nameLocation":"10480:4:9","nodeType":"VariableDeclaration","scope":639,"src":"10472:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":633,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:9"},"returnParameters":{"id":638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":637,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":639,"src":"10509:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":636,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:9"},"scope":779,"src":"10431:87:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":640,"nodeType":"StructuredDocumentation","src":"10524:252:9","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":647,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:9","nodeType":"FunctionDefinition","parameters":{"id":643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":642,"mutability":"mutable","name":"pool","nameLocation":"10831:4:9","nodeType":"VariableDeclaration","scope":647,"src":"10823:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":641,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:9"},"returnParameters":{"id":646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":647,"src":"10860:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":644,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:9"},"scope":779,"src":"10781:88:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":648,"nodeType":"StructuredDocumentation","src":"10875:344:9","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":656,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:9","nodeType":"FunctionDefinition","parameters":{"id":651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":650,"mutability":"mutable","name":"pool","nameLocation":"11263:4:9","nodeType":"VariableDeclaration","scope":656,"src":"11255:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":649,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:9"},"returnParameters":{"id":655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":654,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:9","nodeType":"VariableDeclaration","scope":656,"src":"11292:27:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":652,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":653,"nodeType":"ArrayTypeName","src":"11292:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:9"},"scope":779,"src":"11224:97:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":657,"nodeType":"StructuredDocumentation","src":"11327:348:9","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":665,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:9","nodeType":"FunctionDefinition","parameters":{"id":660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":659,"mutability":"mutable","name":"pool","nameLocation":"11722:4:9","nodeType":"VariableDeclaration","scope":665,"src":"11714:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":658,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:9"},"returnParameters":{"id":664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":663,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:9","nodeType":"VariableDeclaration","scope":665,"src":"11751:27:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":661,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":662,"nodeType":"ArrayTypeName","src":"11751:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:9"},"scope":779,"src":"11680:100:9","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":666,"nodeType":"StructuredDocumentation","src":"11786:1445:9","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:9","nodeType":"FunctionDefinition","parameters":{"id":671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":668,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:9","nodeType":"VariableDeclaration","scope":675,"src":"13284:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":667,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":670,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:9","nodeType":"VariableDeclaration","scope":675,"src":"13323:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":669,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:9"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":673,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:9","nodeType":"VariableDeclaration","scope":675,"src":"13385:30:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":672,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:9"},"scope":779,"src":"13236:181:9","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"13423:398:9","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":681,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:9","nodeType":"FunctionDefinition","parameters":{"id":679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":678,"mutability":"mutable","name":"pool","nameLocation":"13875:4:9","nodeType":"VariableDeclaration","scope":681,"src":"13867:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":677,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:9"},"returnParameters":{"id":680,"nodeType":"ParameterList","parameters":[],"src":"13889:0:9"},"scope":779,"src":"13826:64:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"13896:400:9","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:9","nodeType":"FunctionDefinition","parameters":{"id":685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":684,"mutability":"mutable","name":"pool","nameLocation":"14351:4:9","nodeType":"VariableDeclaration","scope":687,"src":"14343:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":683,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:9"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[],"src":"14365:0:9"},"scope":779,"src":"14301:65:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"14590:826:9","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":701,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:9","nodeType":"FunctionDefinition","parameters":{"id":695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":690,"mutability":"mutable","name":"pool","nameLocation":"15460:4:9","nodeType":"VariableDeclaration","scope":701,"src":"15452:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":689,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":692,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:9","nodeType":"VariableDeclaration","scope":701,"src":"15474:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":691,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":694,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:9","nodeType":"VariableDeclaration","scope":701,"src":"15503:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":693,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:9"},"returnParameters":{"id":700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":697,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:9","nodeType":"VariableDeclaration","scope":701,"src":"15550:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":696,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":699,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:9","nodeType":"VariableDeclaration","scope":701,"src":"15586:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":698,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:9"},"scope":779,"src":"15421:202:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":702,"nodeType":"StructuredDocumentation","src":"15629:175:9","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":707,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:9","nodeType":"FunctionDefinition","parameters":{"id":705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":704,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:9","nodeType":"VariableDeclaration","scope":707,"src":"15853:36:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":703,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:9"},"returnParameters":{"id":706,"nodeType":"ParameterList","parameters":[],"src":"15899:0:9"},"scope":779,"src":"15809:91:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":708,"nodeType":"StructuredDocumentation","src":"15906:178:9","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":713,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:9","nodeType":"FunctionDefinition","parameters":{"id":711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":710,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:9","nodeType":"VariableDeclaration","scope":713,"src":"16134:37:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":709,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:9"},"returnParameters":{"id":712,"nodeType":"ParameterList","parameters":[],"src":"16181:0:9"},"scope":779,"src":"16089:93:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":714,"nodeType":"StructuredDocumentation","src":"16188:272:9","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":721,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:9","nodeType":"FunctionDefinition","parameters":{"id":719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":716,"mutability":"mutable","name":"pool","nameLocation":"16511:4:9","nodeType":"VariableDeclaration","scope":721,"src":"16503:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":715,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":718,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:9","nodeType":"VariableDeclaration","scope":721,"src":"16517:36:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":717,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:9"},"returnParameters":{"id":720,"nodeType":"ParameterList","parameters":[],"src":"16563:0:9"},"scope":779,"src":"16465:99:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":722,"nodeType":"StructuredDocumentation","src":"16570:276:9","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:9","nodeType":"FunctionDefinition","parameters":{"id":727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":724,"mutability":"mutable","name":"pool","nameLocation":"16898:4:9","nodeType":"VariableDeclaration","scope":729,"src":"16890:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":723,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":726,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:9","nodeType":"VariableDeclaration","scope":729,"src":"16904:37:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":725,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:9"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[],"src":"16951:0:9"},"scope":779,"src":"16851:101:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"16958:623:9","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":737,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:9","nodeType":"FunctionDefinition","parameters":{"id":735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":732,"mutability":"mutable","name":"pool","nameLocation":"17635:4:9","nodeType":"VariableDeclaration","scope":737,"src":"17627:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":731,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":734,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:9","nodeType":"VariableDeclaration","scope":737,"src":"17641:36:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":733,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:9"},"returnParameters":{"id":736,"nodeType":"ParameterList","parameters":[],"src":"17687:0:9"},"scope":779,"src":"17586:102:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":738,"nodeType":"StructuredDocumentation","src":"17694:626:9","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":745,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:9","nodeType":"FunctionDefinition","parameters":{"id":743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":740,"mutability":"mutable","name":"pool","nameLocation":"18375:4:9","nodeType":"VariableDeclaration","scope":745,"src":"18367:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":739,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":742,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:9","nodeType":"VariableDeclaration","scope":745,"src":"18381:37:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":741,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:9"},"returnParameters":{"id":744,"nodeType":"ParameterList","parameters":[],"src":"18428:0:9"},"scope":779,"src":"18325:104:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":746,"nodeType":"StructuredDocumentation","src":"18435:296:9","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":753,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:9","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":748,"mutability":"mutable","name":"pool","nameLocation":"18774:4:9","nodeType":"VariableDeclaration","scope":753,"src":"18766:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":747,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":750,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:9","nodeType":"VariableDeclaration","scope":753,"src":"18780:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":749,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:9"},"returnParameters":{"id":752,"nodeType":"ParameterList","parameters":[],"src":"18807:0:9"},"scope":779,"src":"18736:72:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":754,"nodeType":"StructuredDocumentation","src":"18814:339:9","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":764,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:9","nodeType":"FunctionDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"pool","nameLocation":"19204:4:9","nodeType":"VariableDeclaration","scope":764,"src":"19196:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":755,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":758,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:9","nodeType":"VariableDeclaration","scope":764,"src":"19210:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":757,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":761,"mutability":"mutable","name":"token","nameLocation":"19236:5:9","nodeType":"VariableDeclaration","scope":764,"src":"19229:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":760,"nodeType":"UserDefinedTypeName","pathNode":{"id":759,"name":"IERC20","nameLocations":["19229:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"19229:6:9"},"referencedDeclaration":7403,"src":"19229:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:9"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"19251:0:9"},"scope":779,"src":"19158:94:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":765,"nodeType":"StructuredDocumentation","src":"19258:291:9","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":772,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:9","nodeType":"FunctionDefinition","parameters":{"id":770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":767,"mutability":"mutable","name":"pool","nameLocation":"19595:4:9","nodeType":"VariableDeclaration","scope":772,"src":"19587:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":766,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":769,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:9","nodeType":"VariableDeclaration","scope":772,"src":"19601:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":768,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:9"},"returnParameters":{"id":771,"nodeType":"ParameterList","parameters":[],"src":"19628:0:9"},"scope":779,"src":"19554:75:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":773,"nodeType":"StructuredDocumentation","src":"19635:310:9","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":778,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:9","nodeType":"FunctionDefinition","parameters":{"id":776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":775,"mutability":"mutable","name":"pool","nameLocation":"19991:4:9","nodeType":"VariableDeclaration","scope":778,"src":"19983:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":774,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:9"},"returnParameters":{"id":777,"nodeType":"ParameterList","parameters":[],"src":"20005:0:9"},"scope":779,"src":"19950:56:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":780,"src":"266:19742:9","usedErrors":[560,563,568,575,578],"usedEvents":[453,458,465,472,479,486,496,506,518,530,539,548,557]}],"src":"46:19963:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","exportedSymbols":{"ISwapFeePercentageBounds":[795]},"id":796,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":781,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"abstract":false,"baseContracts":[],"canonicalName":"ISwapFeePercentageBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":782,"nodeType":"StructuredDocumentation","src":"72:1023:10","text":" @notice Return the minimum/maximum swap fee percentages for a pool.\n @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n that new pool developers think about and set these bounds according to their specific pool type.\n A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n LVR/MEV strategies, where a very high fee makes sense.\n Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n the highest value below 100% that satisfies the precision requirements."},"fullyImplemented":false,"id":795,"linearizedBaseContracts":[795],"name":"ISwapFeePercentageBounds","nameLocation":"1106:24:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":783,"nodeType":"StructuredDocumentation","src":"1137:79:10","text":"@return minimumSwapFeePercentage The minimum swap fee percentage for a pool"},"functionSelector":"ce20ece7","id":788,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"1230:27:10","nodeType":"FunctionDefinition","parameters":{"id":784,"nodeType":"ParameterList","parameters":[],"src":"1257:2:10"},"returnParameters":{"id":787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":786,"mutability":"mutable","name":"minimumSwapFeePercentage","nameLocation":"1291:24:10","nodeType":"VariableDeclaration","scope":788,"src":"1283:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1282:34:10"},"scope":795,"src":"1221:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":789,"nodeType":"StructuredDocumentation","src":"1323:79:10","text":"@return maximumSwapFeePercentage The maximum swap fee percentage for a pool"},"functionSelector":"654cf15d","id":794,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"1416:27:10","nodeType":"FunctionDefinition","parameters":{"id":790,"nodeType":"ParameterList","parameters":[],"src":"1443:2:10"},"returnParameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":792,"mutability":"mutable","name":"maximumSwapFeePercentage","nameLocation":"1477:24:10","nodeType":"VariableDeclaration","scope":794,"src":"1469:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"1469:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:34:10"},"scope":795,"src":"1407:96:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":796,"src":"1096:409:10","usedErrors":[],"usedEvents":[]}],"src":"46:1460:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","exportedSymbols":{"IUnbalancedLiquidityInvariantRatioBounds":[811]},"id":812,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":797,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnbalancedLiquidityInvariantRatioBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":798,"nodeType":"StructuredDocumentation","src":"72:838:11","text":" @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n to their pool type's math.\n For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools."},"fullyImplemented":false,"id":811,"linearizedBaseContracts":[811],"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocation":"921:40:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":799,"nodeType":"StructuredDocumentation","src":"968:107:11","text":"@return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity"},"functionSelector":"b677fa56","id":804,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"1089:24:11","nodeType":"FunctionDefinition","parameters":{"id":800,"nodeType":"ParameterList","parameters":[],"src":"1113:2:11"},"returnParameters":{"id":803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":802,"mutability":"mutable","name":"minimumInvariantRatio","nameLocation":"1147:21:11","nodeType":"VariableDeclaration","scope":804,"src":"1139:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":801,"name":"uint256","nodeType":"ElementaryTypeName","src":"1139:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1138:31:11"},"scope":811,"src":"1080:90:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":805,"nodeType":"StructuredDocumentation","src":"1176:104:11","text":"@return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity"},"functionSelector":"273c1adf","id":810,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"1294:24:11","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[],"src":"1318:2:11"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"maximumInvariantRatio","nameLocation":"1352:21:11","nodeType":"VariableDeclaration","scope":810,"src":"1344:29:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":807,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1343:31:11"},"scope":811,"src":"1285:90:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":812,"src":"911:466:11","usedErrors":[],"usedEvents":[]}],"src":"46:1332:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[69],"IVault":[849],"IVaultAdmin":[1139],"IVaultErrors":[1506],"IVaultEvents":[1745],"IVaultExtension":[2164],"IVaultMain":[2300]},"id":850,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":813,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":815,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":70,"src":"72:80:12","symbolAliases":[{"foreign":{"id":814,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69,"src":"81:15:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":817,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":2165,"src":"153:56:12","symbolAliases":[{"foreign":{"id":816,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2164,"src":"162:15:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":819,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":1507,"src":"210:50:12","symbolAliases":[{"foreign":{"id":818,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"219:12:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":821,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":1746,"src":"261:50:12","symbolAliases":[{"foreign":{"id":820,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1745,"src":"270:12:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":823,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":1140,"src":"312:48:12","symbolAliases":[{"foreign":{"id":822,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1139,"src":"321:11:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":825,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":850,"sourceUnit":2301,"src":"361:46:12","symbolAliases":[{"foreign":{"id":824,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2300,"src":"370:10:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":827,"name":"IVaultMain","nameLocations":["539:10:12"],"nodeType":"IdentifierPath","referencedDeclaration":2300,"src":"539:10:12"},"id":828,"nodeType":"InheritanceSpecifier","src":"539:10:12"},{"baseName":{"id":829,"name":"IVaultExtension","nameLocations":["551:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":2164,"src":"551:15:12"},"id":830,"nodeType":"InheritanceSpecifier","src":"551:15:12"},{"baseName":{"id":831,"name":"IVaultAdmin","nameLocations":["568:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1139,"src":"568:11:12"},"id":832,"nodeType":"InheritanceSpecifier","src":"568:11:12"},{"baseName":{"id":833,"name":"IVaultErrors","nameLocations":["581:12:12"],"nodeType":"IdentifierPath","referencedDeclaration":1506,"src":"581:12:12"},"id":834,"nodeType":"InheritanceSpecifier","src":"581:12:12"},{"baseName":{"id":835,"name":"IVaultEvents","nameLocations":["595:12:12"],"nodeType":"IdentifierPath","referencedDeclaration":1745,"src":"595:12:12"},"id":836,"nodeType":"InheritanceSpecifier","src":"595:12:12"},{"baseName":{"id":837,"name":"IAuthentication","nameLocations":["609:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":69,"src":"609:15:12"},"id":838,"nodeType":"InheritanceSpecifier","src":"609:15:12"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":826,"nodeType":"StructuredDocumentation","src":"409:110:12","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":849,"linearizedBaseContracts":[849,69,1745,1506,1139,2164,2300],"name":"IVault","nameLocation":"529:6:12","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[867,1768],"documentation":{"id":839,"nodeType":"StructuredDocumentation","src":"631:41:12","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":848,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:12","nodeType":"FunctionDefinition","overrides":{"id":843,"nodeType":"OverrideSpecifier","overrides":[{"id":841,"name":"IVaultAdmin","nameLocations":["717:11:12"],"nodeType":"IdentifierPath","referencedDeclaration":1139,"src":"717:11:12"},{"id":842,"name":"IVaultExtension","nameLocations":["730:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":2164,"src":"730:15:12"}],"src":"708:38:12"},"parameters":{"id":840,"nodeType":"ParameterList","parameters":[],"src":"691:2:12"},"returnParameters":{"id":847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":848,"src":"756:6:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":845,"nodeType":"UserDefinedTypeName","pathNode":{"id":844,"name":"IVault","nameLocations":["756:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"756:6:12"},"referencedDeclaration":849,"src":"756:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:12"},"scope":849,"src":"677:87:12","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":850,"src":"519:247:12","usedErrors":[60,1151,1156,1161,1166,1175,1181,1184,1187,1190,1193,1196,1199,1208,1211,1214,1217,1220,1223,1226,1229,1232,1235,1238,1241,1244,1247,1250,1256,1263,1270,1273,1276,1286,1296,1303,1306,1309,1312,1322,1332,1339,1342,1345,1348,1351,1354,1357,1360,1363,1368,1373,1378,1381,1384,1387,1390,1393,1398,1403,1408,1414,1420,1423,1431,1437,1443,1446,1449,1452,1457,1467,1477,1484,1487,1490,1493,1496,1499,1502,1505],"usedEvents":[1544,1549,1568,1580,1592,1610,1628,1633,1636,1639,1646,1653,1660,1667,1674,1680,1686,1698,1708,1718,1730,1735,1744]}],"src":"46:721:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[115],"IERC4626":[7300],"IProtocolFeeController":[779],"IVault":[849],"IVaultAdmin":[1139]},"id":1140,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":851,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":853,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1140,"sourceUnit":7301,"src":"72:75:13","symbolAliases":[{"foreign":{"id":852,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"81:8:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":855,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1140,"sourceUnit":780,"src":"149:70:13","symbolAliases":[{"foreign":{"id":854,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"158:22:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":857,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1140,"sourceUnit":116,"src":"220:48:13","symbolAliases":[{"foreign":{"id":856,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"229:11:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1140,"sourceUnit":850,"src":"269:38:13","symbolAliases":[{"foreign":{"id":858,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"278:6:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":860,"nodeType":"StructuredDocumentation","src":"309:276:13","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":1139,"linearizedBaseContracts":[1139],"name":"IVaultAdmin","nameLocation":"596:11:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":861,"nodeType":"StructuredDocumentation","src":"841:206:13","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":867,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:13","nodeType":"FunctionDefinition","parameters":{"id":862,"nodeType":"ParameterList","parameters":[],"src":"1066:2:13"},"returnParameters":{"id":866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":865,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":867,"src":"1092:6:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":864,"nodeType":"UserDefinedTypeName","pathNode":{"id":863,"name":"IVault","nameLocations":["1092:6:13"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"1092:6:13"},"referencedDeclaration":849,"src":"1092:6:13","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:13"},"scope":1139,"src":"1052:48:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":868,"nodeType":"StructuredDocumentation","src":"1106:326:13","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":873,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:13","nodeType":"FunctionDefinition","parameters":{"id":869,"nodeType":"ParameterList","parameters":[],"src":"1467:2:13"},"returnParameters":{"id":872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":871,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:13","nodeType":"VariableDeclaration","scope":873,"src":"1493:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":870,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:13"},"scope":1139,"src":"1437:83:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":874,"nodeType":"StructuredDocumentation","src":"1526:414:13","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":879,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:13","nodeType":"FunctionDefinition","parameters":{"id":875,"nodeType":"ParameterList","parameters":[],"src":"1977:2:13"},"returnParameters":{"id":878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":877,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:13","nodeType":"VariableDeclaration","scope":879,"src":"2003:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":876,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:13"},"scope":1139,"src":"1945:87:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"2038:321:13","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":885,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:13","nodeType":"FunctionDefinition","parameters":{"id":881,"nodeType":"ParameterList","parameters":[],"src":"2395:2:13"},"returnParameters":{"id":884,"nodeType":"ParameterList","parameters":[{"constant":false,"id":883,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:13","nodeType":"VariableDeclaration","scope":885,"src":"2421:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":882,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:13"},"scope":1139,"src":"2364:85:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":886,"nodeType":"StructuredDocumentation","src":"2455:193:13","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":891,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:13","nodeType":"FunctionDefinition","parameters":{"id":887,"nodeType":"ParameterList","parameters":[],"src":"2682:2:13"},"returnParameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":889,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:13","nodeType":"VariableDeclaration","scope":891,"src":"2708:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:13"},"scope":1139,"src":"2653:74:13","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":892,"nodeType":"StructuredDocumentation","src":"2733:129:13","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":897,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:13","nodeType":"FunctionDefinition","parameters":{"id":893,"nodeType":"ParameterList","parameters":[],"src":"2896:2:13"},"returnParameters":{"id":896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":895,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:13","nodeType":"VariableDeclaration","scope":897,"src":"2922:17:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":894,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:13"},"scope":1139,"src":"2867:74:13","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":898,"nodeType":"StructuredDocumentation","src":"2947:439:13","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":903,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:13","nodeType":"FunctionDefinition","parameters":{"id":899,"nodeType":"ParameterList","parameters":[],"src":"3425:2:13"},"returnParameters":{"id":902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":901,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:13","nodeType":"VariableDeclaration","scope":903,"src":"3451:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":900,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:13"},"scope":1139,"src":"3391:92:13","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":904,"nodeType":"StructuredDocumentation","src":"3489:502:13","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":909,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:13","nodeType":"FunctionDefinition","parameters":{"id":905,"nodeType":"ParameterList","parameters":[],"src":"4032:2:13"},"returnParameters":{"id":908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":907,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:13","nodeType":"VariableDeclaration","scope":909,"src":"4058:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":906,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:13"},"scope":1139,"src":"3996:96:13","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":910,"nodeType":"StructuredDocumentation","src":"4098:291:13","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":915,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:13","nodeType":"FunctionDefinition","parameters":{"id":911,"nodeType":"ParameterList","parameters":[],"src":"4424:2:13"},"returnParameters":{"id":914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":913,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:13","nodeType":"VariableDeclaration","scope":915,"src":"4450:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":912,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:13"},"scope":1139,"src":"4394:84:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":916,"nodeType":"StructuredDocumentation","src":"4484:271:13","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":921,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:13","nodeType":"FunctionDefinition","parameters":{"id":917,"nodeType":"ParameterList","parameters":[],"src":"4789:2:13"},"returnParameters":{"id":920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":919,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:13","nodeType":"VariableDeclaration","scope":921,"src":"4815:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:13"},"scope":1139,"src":"4760:82:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":922,"nodeType":"StructuredDocumentation","src":"5069:529:13","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":927,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:13","nodeType":"FunctionDefinition","parameters":{"id":923,"nodeType":"ParameterList","parameters":[],"src":"5625:2:13"},"returnParameters":{"id":926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":925,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:13","nodeType":"VariableDeclaration","scope":927,"src":"5651:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":924,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:13"},"scope":1139,"src":"5603:66:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":928,"nodeType":"StructuredDocumentation","src":"5675:400:13","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":937,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:13","nodeType":"FunctionDefinition","parameters":{"id":929,"nodeType":"ParameterList","parameters":[],"src":"6108:2:13"},"returnParameters":{"id":936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":931,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:13","nodeType":"VariableDeclaration","scope":937,"src":"6158:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":930,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":933,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:13","nodeType":"VariableDeclaration","scope":937,"src":"6176:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":932,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:13","nodeType":"VariableDeclaration","scope":937,"src":"6208:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":934,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:13","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:13"},"scope":1139,"src":"6080:161:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":938,"nodeType":"StructuredDocumentation","src":"6247:517:13","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":941,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:13","nodeType":"FunctionDefinition","parameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"6788:2:13"},"returnParameters":{"id":940,"nodeType":"ParameterList","parameters":[],"src":"6799:0:13"},"scope":1139,"src":"6769:31:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":942,"nodeType":"StructuredDocumentation","src":"6806:569:13","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":945,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:13","nodeType":"FunctionDefinition","parameters":{"id":943,"nodeType":"ParameterList","parameters":[],"src":"7401:2:13"},"returnParameters":{"id":944,"nodeType":"ParameterList","parameters":[],"src":"7412:0:13"},"scope":1139,"src":"7380:33:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":946,"nodeType":"StructuredDocumentation","src":"7639:276:13","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":951,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:13","nodeType":"FunctionDefinition","parameters":{"id":949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":948,"mutability":"mutable","name":"pool","nameLocation":"7947:4:13","nodeType":"VariableDeclaration","scope":951,"src":"7939:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":947,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:13"},"returnParameters":{"id":950,"nodeType":"ParameterList","parameters":[],"src":"7961:0:13"},"scope":1139,"src":"7920:42:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":952,"nodeType":"StructuredDocumentation","src":"7968:366:13","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":957,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:13","nodeType":"FunctionDefinition","parameters":{"id":955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":954,"mutability":"mutable","name":"pool","nameLocation":"8368:4:13","nodeType":"VariableDeclaration","scope":957,"src":"8360:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":953,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:13"},"returnParameters":{"id":956,"nodeType":"ParameterList","parameters":[],"src":"8382:0:13"},"scope":1139,"src":"8339:44:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":958,"nodeType":"StructuredDocumentation","src":"8606:520:13","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":965,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:13","nodeType":"FunctionDefinition","parameters":{"id":963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":960,"mutability":"mutable","name":"pool","nameLocation":"9175:4:13","nodeType":"VariableDeclaration","scope":965,"src":"9167:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":959,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":962,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:13","nodeType":"VariableDeclaration","scope":965,"src":"9181:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":961,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:13"},"returnParameters":{"id":964,"nodeType":"ParameterList","parameters":[],"src":"9216:0:13"},"scope":1139,"src":"9131:86:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":966,"nodeType":"StructuredDocumentation","src":"9223:463:13","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":977,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:13","nodeType":"FunctionDefinition","parameters":{"id":969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":968,"mutability":"mutable","name":"pool","nameLocation":"9738:4:13","nodeType":"VariableDeclaration","scope":977,"src":"9730:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":967,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:13"},"returnParameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":972,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:13","nodeType":"VariableDeclaration","scope":977,"src":"9767:31:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":970,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":971,"nodeType":"ArrayTypeName","src":"9767:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:13","nodeType":"VariableDeclaration","scope":977,"src":"9800:32:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":973,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":974,"nodeType":"ArrayTypeName","src":"9800:9:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:13"},"scope":1139,"src":"9691:143:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"9840:755:13","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":985,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:13","nodeType":"FunctionDefinition","parameters":{"id":983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":980,"mutability":"mutable","name":"pool","nameLocation":"10650:4:13","nodeType":"VariableDeclaration","scope":985,"src":"10642:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":979,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":982,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:13","nodeType":"VariableDeclaration","scope":985,"src":"10656:37:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":981,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:13"},"returnParameters":{"id":984,"nodeType":"ParameterList","parameters":[],"src":"10703:0:13"},"scope":1139,"src":"10600:104:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":986,"nodeType":"StructuredDocumentation","src":"10710:760:13","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":993,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:13","nodeType":"FunctionDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":988,"mutability":"mutable","name":"pool","nameLocation":"11526:4:13","nodeType":"VariableDeclaration","scope":993,"src":"11518:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":987,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":990,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:13","nodeType":"VariableDeclaration","scope":993,"src":"11532:38:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":989,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:13"},"returnParameters":{"id":992,"nodeType":"ParameterList","parameters":[],"src":"11580:0:13"},"scope":1139,"src":"11475:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":994,"nodeType":"StructuredDocumentation","src":"11587:249:13","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":1000,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:13","nodeType":"FunctionDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":997,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:13","nodeType":"VariableDeclaration","scope":1000,"src":"11875:47:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"},"typeName":{"id":996,"nodeType":"UserDefinedTypeName","pathNode":{"id":995,"name":"IProtocolFeeController","nameLocations":["11875:22:13"],"nodeType":"IdentifierPath","referencedDeclaration":779,"src":"11875:22:13"},"referencedDeclaration":779,"src":"11875:22:13","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:13"},"returnParameters":{"id":999,"nodeType":"ParameterList","parameters":[],"src":"11932:0:13"},"scope":1139,"src":"11841:92:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1001,"nodeType":"StructuredDocumentation","src":"12160:557:13","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":1006,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:13","nodeType":"FunctionDefinition","parameters":{"id":1004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1003,"mutability":"mutable","name":"pool","nameLocation":"12758:4:13","nodeType":"VariableDeclaration","scope":1006,"src":"12750:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1002,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:13"},"returnParameters":{"id":1005,"nodeType":"ParameterList","parameters":[],"src":"12772:0:13"},"scope":1139,"src":"12722:51:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1007,"nodeType":"StructuredDocumentation","src":"12779:409:13","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":1012,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:13","nodeType":"FunctionDefinition","parameters":{"id":1010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1009,"mutability":"mutable","name":"pool","nameLocation":"13230:4:13","nodeType":"VariableDeclaration","scope":1012,"src":"13222:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1008,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:13"},"returnParameters":{"id":1011,"nodeType":"ParameterList","parameters":[],"src":"13244:0:13"},"scope":1139,"src":"13193:52:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1013,"nodeType":"StructuredDocumentation","src":"13476:653:13","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":1016,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:13","nodeType":"FunctionDefinition","parameters":{"id":1014,"nodeType":"ParameterList","parameters":[],"src":"14155:2:13"},"returnParameters":{"id":1015,"nodeType":"ParameterList","parameters":[],"src":"14166:0:13"},"scope":1139,"src":"14134:33:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"14173:223:13","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":1020,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:13","nodeType":"FunctionDefinition","parameters":{"id":1018,"nodeType":"ParameterList","parameters":[],"src":"14433:2:13"},"returnParameters":{"id":1019,"nodeType":"ParameterList","parameters":[],"src":"14444:0:13"},"scope":1139,"src":"14401:44:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1021,"nodeType":"StructuredDocumentation","src":"14451:166:13","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":1024,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:13","nodeType":"FunctionDefinition","parameters":{"id":1022,"nodeType":"ParameterList","parameters":[],"src":"14642:2:13"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[],"src":"14653:0:13"},"scope":1139,"src":"14622:32:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1025,"nodeType":"StructuredDocumentation","src":"14881:590:13","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":1030,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:13","nodeType":"FunctionDefinition","parameters":{"id":1026,"nodeType":"ParameterList","parameters":[],"src":"15501:2:13"},"returnParameters":{"id":1029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1028,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:13","nodeType":"VariableDeclaration","scope":1030,"src":"15527:18:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1027,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:13"},"scope":1139,"src":"15476:71:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1031,"nodeType":"StructuredDocumentation","src":"15553:619:13","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":1034,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:13","nodeType":"FunctionDefinition","parameters":{"id":1032,"nodeType":"ParameterList","parameters":[],"src":"16203:2:13"},"returnParameters":{"id":1033,"nodeType":"ParameterList","parameters":[],"src":"16214:0:13"},"scope":1139,"src":"16177:38:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"16221:545:13","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":1038,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:13","nodeType":"FunctionDefinition","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[],"src":"16799:2:13"},"returnParameters":{"id":1037,"nodeType":"ParameterList","parameters":[],"src":"16810:0:13"},"scope":1139,"src":"16771:40:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1039,"nodeType":"StructuredDocumentation","src":"16817:860:13","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":1055,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:13","nodeType":"FunctionDefinition","parameters":{"id":1051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1042,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:13","nodeType":"VariableDeclaration","scope":1055,"src":"17717:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1041,"nodeType":"UserDefinedTypeName","pathNode":{"id":1040,"name":"IERC4626","nameLocations":["17717:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"17717:8:13"},"referencedDeclaration":7300,"src":"17717:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1044,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:13","nodeType":"VariableDeclaration","scope":1055,"src":"17748:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1043,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1046,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:13","nodeType":"VariableDeclaration","scope":1055,"src":"17785:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1045,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1048,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:13","nodeType":"VariableDeclaration","scope":1055,"src":"17819:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1047,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1050,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:13","nodeType":"VariableDeclaration","scope":1055,"src":"17852:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1049,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:13"},"returnParameters":{"id":1054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1053,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:13","nodeType":"VariableDeclaration","scope":1055,"src":"17896:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1052,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:13"},"scope":1139,"src":"17682:236:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1056,"nodeType":"StructuredDocumentation","src":"17924:1010:13","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":1074,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:13","nodeType":"FunctionDefinition","parameters":{"id":1068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1059,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:13","nodeType":"VariableDeclaration","scope":1074,"src":"18978:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1058,"nodeType":"UserDefinedTypeName","pathNode":{"id":1057,"name":"IERC4626","nameLocations":["18978:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"18978:8:13"},"referencedDeclaration":7300,"src":"18978:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1061,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:13","nodeType":"VariableDeclaration","scope":1074,"src":"19009:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:13","nodeType":"VariableDeclaration","scope":1074,"src":"19051:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1062,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1065,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:13","nodeType":"VariableDeclaration","scope":1074,"src":"19090:26:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1064,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1067,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:13","nodeType":"VariableDeclaration","scope":1074,"src":"19126:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1066,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:13"},"returnParameters":{"id":1073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1070,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:13","nodeType":"VariableDeclaration","scope":1074,"src":"19170:27:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1072,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:13","nodeType":"VariableDeclaration","scope":1074,"src":"19199:24:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1071,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:13"},"scope":1139,"src":"18939:286:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1075,"nodeType":"StructuredDocumentation","src":"19231:1458:13","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":1091,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:13","nodeType":"FunctionDefinition","parameters":{"id":1085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1078,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:13","nodeType":"VariableDeclaration","scope":1091,"src":"20738:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1077,"nodeType":"UserDefinedTypeName","pathNode":{"id":1076,"name":"IERC4626","nameLocations":["20738:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"20738:8:13"},"referencedDeclaration":7300,"src":"20738:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1080,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:13","nodeType":"VariableDeclaration","scope":1091,"src":"20769:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1079,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1082,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:13","nodeType":"VariableDeclaration","scope":1091,"src":"20801:33:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1081,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1084,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:13","nodeType":"VariableDeclaration","scope":1091,"src":"20844:30:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1083,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:13"},"returnParameters":{"id":1090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1087,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:13","nodeType":"VariableDeclaration","scope":1091,"src":"20899:35:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1086,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1089,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:13","nodeType":"VariableDeclaration","scope":1091,"src":"20936:32:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1088,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:13"},"scope":1139,"src":"20694:276:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1092,"nodeType":"StructuredDocumentation","src":"20976:382:13","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":1100,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:13","nodeType":"FunctionDefinition","parameters":{"id":1096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1095,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:13","nodeType":"VariableDeclaration","scope":1100,"src":"21387:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1094,"nodeType":"UserDefinedTypeName","pathNode":{"id":1093,"name":"IERC4626","nameLocations":["21387:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"21387:8:13"},"referencedDeclaration":7300,"src":"21387:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:13"},"returnParameters":{"id":1099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1098,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:13","nodeType":"VariableDeclaration","scope":1100,"src":"21433:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1097,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:13"},"scope":1139,"src":"21363:95:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1101,"nodeType":"StructuredDocumentation","src":"21464:441:13","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":1111,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:13","nodeType":"FunctionDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1104,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:13","nodeType":"VariableDeclaration","scope":1111,"src":"21949:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1103,"nodeType":"UserDefinedTypeName","pathNode":{"id":1102,"name":"IERC4626","nameLocations":["21949:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"21949:8:13"},"referencedDeclaration":7300,"src":"21949:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1106,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:13","nodeType":"VariableDeclaration","scope":1111,"src":"21980:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1105,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:13"},"returnParameters":{"id":1110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1109,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:13","nodeType":"VariableDeclaration","scope":1111,"src":"22032:19:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1108,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:13"},"scope":1139,"src":"21910:143:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"22059:281:13","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":1120,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:13","nodeType":"FunctionDefinition","parameters":{"id":1116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1115,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:13","nodeType":"VariableDeclaration","scope":1120,"src":"22375:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1114,"nodeType":"UserDefinedTypeName","pathNode":{"id":1113,"name":"IERC4626","nameLocations":["22375:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"22375:8:13"},"referencedDeclaration":7300,"src":"22375:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:13"},"returnParameters":{"id":1119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:13","nodeType":"VariableDeclaration","scope":1120,"src":"22421:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1117,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:13"},"scope":1139,"src":"22345:98:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1121,"nodeType":"StructuredDocumentation","src":"22449:521:13","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":1131,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:13","nodeType":"FunctionDefinition","parameters":{"id":1125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1124,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:13","nodeType":"VariableDeclaration","scope":1131,"src":"23010:21:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1123,"nodeType":"UserDefinedTypeName","pathNode":{"id":1122,"name":"IERC4626","nameLocations":["23010:8:13"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"23010:8:13"},"referencedDeclaration":7300,"src":"23010:8:13","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:13"},"returnParameters":{"id":1130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1127,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:13","nodeType":"VariableDeclaration","scope":1131,"src":"23061:28:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1126,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1129,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:13","nodeType":"VariableDeclaration","scope":1131,"src":"23091:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1128,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:13"},"scope":1139,"src":"22975:143:13","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1132,"nodeType":"StructuredDocumentation","src":"23342:202:13","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":1138,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:13","nodeType":"FunctionDefinition","parameters":{"id":1136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1135,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:13","nodeType":"VariableDeclaration","scope":1138,"src":"23572:25:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"},"typeName":{"id":1134,"nodeType":"UserDefinedTypeName","pathNode":{"id":1133,"name":"IAuthorizer","nameLocations":["23572:11:13"],"nodeType":"IdentifierPath","referencedDeclaration":115,"src":"23572:11:13"},"referencedDeclaration":115,"src":"23572:11:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:13"},"returnParameters":{"id":1137,"nodeType":"ParameterList","parameters":[],"src":"23607:0:13"},"scope":1139,"src":"23549:59:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1140,"src":"586:23024:13","usedErrors":[],"usedEvents":[]}],"src":"46:23565:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[7403],"IERC4626":[7300],"IVaultErrors":[1506]},"id":1507,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1141,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1143,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1507,"sourceUnit":7301,"src":"72:75:14","symbolAliases":[{"foreign":{"id":1142,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"81:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1145,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1507,"sourceUnit":7404,"src":"148:72:14","symbolAliases":[{"foreign":{"id":1144,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"157:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":1146,"nodeType":"StructuredDocumentation","src":"222:94:14","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1506,"linearizedBaseContracts":[1506],"name":"IVaultErrors","nameLocation":"326:12:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"576:149:14","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":1151,"name":"PoolAlreadyRegistered","nameLocation":"736:21:14","nodeType":"ErrorDefinition","parameters":{"id":1150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1149,"mutability":"mutable","name":"pool","nameLocation":"766:4:14","nodeType":"VariableDeclaration","scope":1151,"src":"758:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1148,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:14"},"src":"730:42:14"},{"documentation":{"id":1152,"nodeType":"StructuredDocumentation","src":"778:149:14","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":1156,"name":"PoolAlreadyInitialized","nameLocation":"938:22:14","nodeType":"ErrorDefinition","parameters":{"id":1155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1154,"mutability":"mutable","name":"pool","nameLocation":"969:4:14","nodeType":"VariableDeclaration","scope":1156,"src":"961:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1153,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:14"},"src":"932:43:14"},{"documentation":{"id":1157,"nodeType":"StructuredDocumentation","src":"981:99:14","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":1161,"name":"PoolNotRegistered","nameLocation":"1091:17:14","nodeType":"ErrorDefinition","parameters":{"id":1160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1159,"mutability":"mutable","name":"pool","nameLocation":"1117:4:14","nodeType":"VariableDeclaration","scope":1161,"src":"1109:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1158,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:14"},"src":"1085:38:14"},{"documentation":{"id":1162,"nodeType":"StructuredDocumentation","src":"1129:112:14","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":1166,"name":"PoolNotInitialized","nameLocation":"1252:18:14","nodeType":"ErrorDefinition","parameters":{"id":1165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1164,"mutability":"mutable","name":"pool","nameLocation":"1279:4:14","nodeType":"VariableDeclaration","scope":1166,"src":"1271:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1163,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:14"},"src":"1246:39:14"},{"documentation":{"id":1167,"nodeType":"StructuredDocumentation","src":"1291:274:14","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":1175,"name":"HookRegistrationFailed","nameLocation":"1576:22:14","nodeType":"ErrorDefinition","parameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1169,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:14","nodeType":"VariableDeclaration","scope":1175,"src":"1599:25:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1168,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1171,"mutability":"mutable","name":"pool","nameLocation":"1634:4:14","nodeType":"VariableDeclaration","scope":1175,"src":"1626:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1170,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1173,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:14","nodeType":"VariableDeclaration","scope":1175,"src":"1640:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1172,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:14"},"src":"1570:91:14"},{"documentation":{"id":1176,"nodeType":"StructuredDocumentation","src":"1667:136:14","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":1181,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:14","nodeType":"ErrorDefinition","parameters":{"id":1180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1179,"mutability":"mutable","name":"token","nameLocation":"1844:5:14","nodeType":"VariableDeclaration","scope":1181,"src":"1837:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1178,"nodeType":"UserDefinedTypeName","pathNode":{"id":1177,"name":"IERC20","nameLocations":["1837:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"1837:6:14"},"referencedDeclaration":7403,"src":"1837:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:14"},"src":"1808:43:14"},{"documentation":{"id":1182,"nodeType":"StructuredDocumentation","src":"1857:57:14","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":1184,"name":"MinTokens","nameLocation":"1925:9:14","nodeType":"ErrorDefinition","parameters":{"id":1183,"nodeType":"ParameterList","parameters":[],"src":"1934:2:14"},"src":"1919:18:14"},{"documentation":{"id":1185,"nodeType":"StructuredDocumentation","src":"1943:57:14","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":1187,"name":"MaxTokens","nameLocation":"2011:9:14","nodeType":"ErrorDefinition","parameters":{"id":1186,"nodeType":"ParameterList","parameters":[],"src":"2020:2:14"},"src":"2005:18:14"},{"documentation":{"id":1188,"nodeType":"StructuredDocumentation","src":"2029:61:14","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":1190,"name":"InvalidToken","nameLocation":"2101:12:14","nodeType":"ErrorDefinition","parameters":{"id":1189,"nodeType":"ParameterList","parameters":[],"src":"2113:2:14"},"src":"2095:21:14"},{"documentation":{"id":1191,"nodeType":"StructuredDocumentation","src":"2122:86:14","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":1193,"name":"InvalidTokenType","nameLocation":"2219:16:14","nodeType":"ErrorDefinition","parameters":{"id":1192,"nodeType":"ParameterList","parameters":[],"src":"2235:2:14"},"src":"2213:25:14"},{"documentation":{"id":1194,"nodeType":"StructuredDocumentation","src":"2244:76:14","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":1196,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:14","nodeType":"ErrorDefinition","parameters":{"id":1195,"nodeType":"ParameterList","parameters":[],"src":"2356:2:14"},"src":"2325:34:14"},{"documentation":{"id":1197,"nodeType":"StructuredDocumentation","src":"2365:64:14","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1199,"name":"InvalidTokenDecimals","nameLocation":"2440:20:14","nodeType":"ErrorDefinition","parameters":{"id":1198,"nodeType":"ParameterList","parameters":[],"src":"2460:2:14"},"src":"2434:29:14"},{"documentation":{"id":1200,"nodeType":"StructuredDocumentation","src":"2469:287:14","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1208,"name":"TokensMismatch","nameLocation":"2767:14:14","nodeType":"ErrorDefinition","parameters":{"id":1207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1202,"mutability":"mutable","name":"pool","nameLocation":"2790:4:14","nodeType":"VariableDeclaration","scope":1208,"src":"2782:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1201,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1204,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:14","nodeType":"VariableDeclaration","scope":1208,"src":"2796:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1203,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1206,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:14","nodeType":"VariableDeclaration","scope":1208,"src":"2819:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1205,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:14"},"src":"2761:79:14"},{"documentation":{"id":1209,"nodeType":"StructuredDocumentation","src":"3071:85:14","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1211,"name":"BalanceNotSettled","nameLocation":"3167:17:14","nodeType":"ErrorDefinition","parameters":{"id":1210,"nodeType":"ParameterList","parameters":[],"src":"3184:2:14"},"src":"3161:26:14"},{"documentation":{"id":1212,"nodeType":"StructuredDocumentation","src":"3193:97:14","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1214,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:14","nodeType":"ErrorDefinition","parameters":{"id":1213,"nodeType":"ParameterList","parameters":[],"src":"3319:2:14"},"src":"3295:27:14"},{"documentation":{"id":1215,"nodeType":"StructuredDocumentation","src":"3328:105:14","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1217,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:14","nodeType":"ErrorDefinition","parameters":{"id":1216,"nodeType":"ParameterList","parameters":[],"src":"3468:2:14"},"src":"3438:33:14"},{"documentation":{"id":1218,"nodeType":"StructuredDocumentation","src":"3477:105:14","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1220,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:14","nodeType":"ErrorDefinition","parameters":{"id":1219,"nodeType":"ParameterList","parameters":[],"src":"3613:2:14"},"src":"3587:29:14"},{"documentation":{"id":1221,"nodeType":"StructuredDocumentation","src":"3622:104:14","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1223,"name":"AfterSwapHookFailed","nameLocation":"3737:19:14","nodeType":"ErrorDefinition","parameters":{"id":1222,"nodeType":"ParameterList","parameters":[],"src":"3756:2:14"},"src":"3731:28:14"},{"documentation":{"id":1224,"nodeType":"StructuredDocumentation","src":"3765:111:14","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1226,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:14","nodeType":"ErrorDefinition","parameters":{"id":1225,"nodeType":"ParameterList","parameters":[],"src":"3913:2:14"},"src":"3881:35:14"},{"documentation":{"id":1227,"nodeType":"StructuredDocumentation","src":"3922:110:14","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1229,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:14","nodeType":"ErrorDefinition","parameters":{"id":1228,"nodeType":"ParameterList","parameters":[],"src":"4068:2:14"},"src":"4037:34:14"},{"documentation":{"id":1230,"nodeType":"StructuredDocumentation","src":"4077:113:14","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1232,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:14","nodeType":"ErrorDefinition","parameters":{"id":1231,"nodeType":"ParameterList","parameters":[],"src":"4229:2:14"},"src":"4195:37:14"},{"documentation":{"id":1233,"nodeType":"StructuredDocumentation","src":"4238:112:14","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1235,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:14","nodeType":"ErrorDefinition","parameters":{"id":1234,"nodeType":"ParameterList","parameters":[],"src":"4388:2:14"},"src":"4355:36:14"},{"documentation":{"id":1236,"nodeType":"StructuredDocumentation","src":"4397:116:14","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1238,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:14","nodeType":"ErrorDefinition","parameters":{"id":1237,"nodeType":"ParameterList","parameters":[],"src":"4555:2:14"},"src":"4518:40:14"},{"documentation":{"id":1239,"nodeType":"StructuredDocumentation","src":"4564:115:14","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1241,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:14","nodeType":"ErrorDefinition","parameters":{"id":1240,"nodeType":"ParameterList","parameters":[],"src":"4720:2:14"},"src":"4684:39:14"},{"documentation":{"id":1242,"nodeType":"StructuredDocumentation","src":"4729:115:14","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1244,"name":"RouterNotTrusted","nameLocation":"4855:16:14","nodeType":"ErrorDefinition","parameters":{"id":1243,"nodeType":"ParameterList","parameters":[],"src":"4871:2:14"},"src":"4849:25:14"},{"documentation":{"id":1245,"nodeType":"StructuredDocumentation","src":"5097:47:14","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1247,"name":"AmountGivenZero","nameLocation":"5155:15:14","nodeType":"ErrorDefinition","parameters":{"id":1246,"nodeType":"ParameterList","parameters":[],"src":"5170:2:14"},"src":"5149:24:14"},{"documentation":{"id":1248,"nodeType":"StructuredDocumentation","src":"5179:58:14","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1250,"name":"CannotSwapSameToken","nameLocation":"5248:19:14","nodeType":"ErrorDefinition","parameters":{"id":1249,"nodeType":"ParameterList","parameters":[],"src":"5267:2:14"},"src":"5242:28:14"},{"documentation":{"id":1251,"nodeType":"StructuredDocumentation","src":"5276:137:14","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1256,"name":"TokenNotRegistered","nameLocation":"5424:18:14","nodeType":"ErrorDefinition","parameters":{"id":1255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1254,"mutability":"mutable","name":"token","nameLocation":"5450:5:14","nodeType":"VariableDeclaration","scope":1256,"src":"5443:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1253,"nodeType":"UserDefinedTypeName","pathNode":{"id":1252,"name":"IERC20","nameLocations":["5443:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"5443:6:14"},"referencedDeclaration":7403,"src":"5443:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:14"},"src":"5418:39:14"},{"documentation":{"id":1257,"nodeType":"StructuredDocumentation","src":"5463:215:14","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1263,"name":"SwapLimit","nameLocation":"5689:9:14","nodeType":"ErrorDefinition","parameters":{"id":1262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1259,"mutability":"mutable","name":"amount","nameLocation":"5707:6:14","nodeType":"VariableDeclaration","scope":1263,"src":"5699:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1258,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1261,"mutability":"mutable","name":"limit","nameLocation":"5723:5:14","nodeType":"VariableDeclaration","scope":1263,"src":"5715:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1260,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:14"},"src":"5683:47:14"},{"documentation":{"id":1264,"nodeType":"StructuredDocumentation","src":"5736:228:14","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1270,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:14","nodeType":"ErrorDefinition","parameters":{"id":1269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1266,"mutability":"mutable","name":"amount","nameLocation":"6005:6:14","nodeType":"VariableDeclaration","scope":1270,"src":"5997:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1265,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1268,"mutability":"mutable","name":"limit","nameLocation":"6021:5:14","nodeType":"VariableDeclaration","scope":1270,"src":"6013:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1267,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:14"},"src":"5969:59:14"},{"documentation":{"id":1271,"nodeType":"StructuredDocumentation","src":"6034:87:14","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1273,"name":"TradeAmountTooSmall","nameLocation":"6132:19:14","nodeType":"ErrorDefinition","parameters":{"id":1272,"nodeType":"ParameterList","parameters":[],"src":"6151:2:14"},"src":"6126:28:14"},{"documentation":{"id":1274,"nodeType":"StructuredDocumentation","src":"6381:45:14","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1276,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:14","nodeType":"ErrorDefinition","parameters":{"id":1275,"nodeType":"ParameterList","parameters":[],"src":"6460:2:14"},"src":"6431:32:14"},{"documentation":{"id":1277,"nodeType":"StructuredDocumentation","src":"6469:264:14","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1286,"name":"AmountInAboveMax","nameLocation":"6744:16:14","nodeType":"ErrorDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1280,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:14","nodeType":"VariableDeclaration","scope":1286,"src":"6761:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1279,"nodeType":"UserDefinedTypeName","pathNode":{"id":1278,"name":"IERC20","nameLocations":["6761:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"6761:6:14"},"referencedDeclaration":7403,"src":"6761:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1282,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:14","nodeType":"VariableDeclaration","scope":1286,"src":"6777:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1281,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:14","nodeType":"VariableDeclaration","scope":1286,"src":"6795:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:14"},"src":"6738:78:14"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"6822:269:14","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1296,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:14","nodeType":"ErrorDefinition","parameters":{"id":1295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1290,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:14","nodeType":"VariableDeclaration","scope":1296,"src":"7131:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1289,"nodeType":"UserDefinedTypeName","pathNode":{"id":1288,"name":"IERC20","nameLocations":["7131:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"7131:6:14"},"referencedDeclaration":7403,"src":"7131:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1292,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:14","nodeType":"VariableDeclaration","scope":1296,"src":"7147:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1291,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1294,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:14","nodeType":"VariableDeclaration","scope":1296,"src":"7165:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1293,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:14"},"src":"7096:90:14"},{"documentation":{"id":1297,"nodeType":"StructuredDocumentation","src":"7192:245:14","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1303,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:14","nodeType":"ErrorDefinition","parameters":{"id":1302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1299,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:14","nodeType":"VariableDeclaration","scope":1303,"src":"7469:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1298,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1301,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:14","nodeType":"VariableDeclaration","scope":1303,"src":"7488:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1300,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:14"},"src":"7442:68:14"},{"documentation":{"id":1304,"nodeType":"StructuredDocumentation","src":"7516:75:14","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1306,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:14","nodeType":"ErrorDefinition","parameters":{"id":1305,"nodeType":"ParameterList","parameters":[],"src":"7634:2:14"},"src":"7596:41:14"},{"documentation":{"id":1307,"nodeType":"StructuredDocumentation","src":"7643:68:14","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1309,"name":"DoesNotSupportDonation","nameLocation":"7722:22:14","nodeType":"ErrorDefinition","parameters":{"id":1308,"nodeType":"ParameterList","parameters":[],"src":"7744:2:14"},"src":"7716:31:14"},{"documentation":{"id":1310,"nodeType":"StructuredDocumentation","src":"7977:48:14","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1312,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:14","nodeType":"ErrorDefinition","parameters":{"id":1311,"nodeType":"ParameterList","parameters":[],"src":"8062:2:14"},"src":"8030:35:14"},{"documentation":{"id":1313,"nodeType":"StructuredDocumentation","src":"8071:269:14","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1322,"name":"AmountOutBelowMin","nameLocation":"8351:17:14","nodeType":"ErrorDefinition","parameters":{"id":1321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1316,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:14","nodeType":"VariableDeclaration","scope":1322,"src":"8369:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1315,"nodeType":"UserDefinedTypeName","pathNode":{"id":1314,"name":"IERC20","nameLocations":["8369:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"8369:6:14"},"referencedDeclaration":7403,"src":"8369:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1318,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:14","nodeType":"VariableDeclaration","scope":1322,"src":"8386:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1317,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1320,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:14","nodeType":"VariableDeclaration","scope":1322,"src":"8405:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1319,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:14"},"src":"8345:82:14"},{"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"8433:276:14","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1332,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:14","nodeType":"ErrorDefinition","parameters":{"id":1331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1326,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:14","nodeType":"VariableDeclaration","scope":1332,"src":"8750:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1325,"nodeType":"UserDefinedTypeName","pathNode":{"id":1324,"name":"IERC20","nameLocations":["8750:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"8750:6:14"},"referencedDeclaration":7403,"src":"8750:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1328,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:14","nodeType":"VariableDeclaration","scope":1332,"src":"8767:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1327,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1330,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:14","nodeType":"VariableDeclaration","scope":1332,"src":"8786:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1329,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:14"},"src":"8714:94:14"},{"documentation":{"id":1333,"nodeType":"StructuredDocumentation","src":"8814:228:14","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1339,"name":"BptAmountInAboveMax","nameLocation":"9053:19:14","nodeType":"ErrorDefinition","parameters":{"id":1338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1335,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:14","nodeType":"VariableDeclaration","scope":1339,"src":"9073:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1334,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1337,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:14","nodeType":"VariableDeclaration","scope":1339,"src":"9091:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1336,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:14"},"src":"9047:65:14"},{"documentation":{"id":1340,"nodeType":"StructuredDocumentation","src":"9118:77:14","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1342,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:14","nodeType":"ErrorDefinition","parameters":{"id":1341,"nodeType":"ParameterList","parameters":[],"src":"9241:2:14"},"src":"9200:44:14"},{"documentation":{"id":1343,"nodeType":"StructuredDocumentation","src":"9463:332:14","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1345,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:14","nodeType":"ErrorDefinition","parameters":{"id":1344,"nodeType":"ParameterList","parameters":[],"src":"9838:2:14"},"src":"9800:41:14"},{"documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"9847:430:14","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1348,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:14","nodeType":"ErrorDefinition","parameters":{"id":1347,"nodeType":"ParameterList","parameters":[],"src":"10311:2:14"},"src":"10282:32:14"},{"documentation":{"id":1349,"nodeType":"StructuredDocumentation","src":"10320:433:14","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1351,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:14","nodeType":"ErrorDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[],"src":"10788:2:14"},"src":"10758:33:14"},{"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"10797:646:14","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1354,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:14","nodeType":"ErrorDefinition","parameters":{"id":1353,"nodeType":"ParameterList","parameters":[],"src":"11473:2:14"},"src":"11448:28:14"},{"documentation":{"id":1355,"nodeType":"StructuredDocumentation","src":"11482:107:14","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1357,"name":"PercentageAboveMax","nameLocation":"11600:18:14","nodeType":"ErrorDefinition","parameters":{"id":1356,"nodeType":"ParameterList","parameters":[],"src":"11618:2:14"},"src":"11594:27:14"},{"documentation":{"id":1358,"nodeType":"StructuredDocumentation","src":"11842:78:14","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1360,"name":"QueriesDisabled","nameLocation":"11931:15:14","nodeType":"ErrorDefinition","parameters":{"id":1359,"nodeType":"ParameterList","parameters":[],"src":"11946:2:14"},"src":"11925:24:14"},{"documentation":{"id":1361,"nodeType":"StructuredDocumentation","src":"11955:84:14","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1363,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:14","nodeType":"ErrorDefinition","parameters":{"id":1362,"nodeType":"ParameterList","parameters":[],"src":"12076:2:14"},"src":"12044:35:14"},{"documentation":{"id":1364,"nodeType":"StructuredDocumentation","src":"12302:104:14","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1368,"name":"PoolInRecoveryMode","nameLocation":"12417:18:14","nodeType":"ErrorDefinition","parameters":{"id":1367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1366,"mutability":"mutable","name":"pool","nameLocation":"12444:4:14","nodeType":"VariableDeclaration","scope":1368,"src":"12436:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1365,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:14"},"src":"12411:39:14"},{"documentation":{"id":1369,"nodeType":"StructuredDocumentation","src":"12456:101:14","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1373,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:14","nodeType":"ErrorDefinition","parameters":{"id":1372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1371,"mutability":"mutable","name":"pool","nameLocation":"12598:4:14","nodeType":"VariableDeclaration","scope":1373,"src":"12590:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1370,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:14"},"src":"12562:42:14"},{"documentation":{"id":1374,"nodeType":"StructuredDocumentation","src":"12828:206:14","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1378,"name":"SenderIsNotVault","nameLocation":"13045:16:14","nodeType":"ErrorDefinition","parameters":{"id":1377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1376,"mutability":"mutable","name":"sender","nameLocation":"13070:6:14","nodeType":"VariableDeclaration","scope":1378,"src":"13062:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1375,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:14"},"src":"13039:39:14"},{"documentation":{"id":1379,"nodeType":"StructuredDocumentation","src":"13303:79:14","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1381,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:14","nodeType":"ErrorDefinition","parameters":{"id":1380,"nodeType":"ParameterList","parameters":[],"src":"13425:2:14"},"src":"13387:41:14"},{"documentation":{"id":1382,"nodeType":"StructuredDocumentation","src":"13434:73:14","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1384,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:14","nodeType":"ErrorDefinition","parameters":{"id":1383,"nodeType":"ParameterList","parameters":[],"src":"13551:2:14"},"src":"13512:42:14"},{"documentation":{"id":1385,"nodeType":"StructuredDocumentation","src":"13560:76:14","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1387,"name":"VaultPaused","nameLocation":"13647:11:14","nodeType":"ErrorDefinition","parameters":{"id":1386,"nodeType":"ParameterList","parameters":[],"src":"13658:2:14"},"src":"13641:20:14"},{"documentation":{"id":1388,"nodeType":"StructuredDocumentation","src":"13667:73:14","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1390,"name":"VaultNotPaused","nameLocation":"13751:14:14","nodeType":"ErrorDefinition","parameters":{"id":1389,"nodeType":"ParameterList","parameters":[],"src":"13765:2:14"},"src":"13745:23:14"},{"documentation":{"id":1391,"nodeType":"StructuredDocumentation","src":"13774:79:14","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1393,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:14","nodeType":"ErrorDefinition","parameters":{"id":1392,"nodeType":"ParameterList","parameters":[],"src":"13887:2:14"},"src":"13858:32:14"},{"documentation":{"id":1394,"nodeType":"StructuredDocumentation","src":"13896:123:14","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1398,"name":"PoolPaused","nameLocation":"14030:10:14","nodeType":"ErrorDefinition","parameters":{"id":1397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1396,"mutability":"mutable","name":"pool","nameLocation":"14049:4:14","nodeType":"VariableDeclaration","scope":1398,"src":"14041:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1395,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:14"},"src":"14024:31:14"},{"documentation":{"id":1399,"nodeType":"StructuredDocumentation","src":"14061:124:14","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1403,"name":"PoolNotPaused","nameLocation":"14196:13:14","nodeType":"ErrorDefinition","parameters":{"id":1402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1401,"mutability":"mutable","name":"pool","nameLocation":"14218:4:14","nodeType":"VariableDeclaration","scope":1403,"src":"14210:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1400,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:14"},"src":"14190:34:14"},{"documentation":{"id":1404,"nodeType":"StructuredDocumentation","src":"14230:119:14","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1408,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:14","nodeType":"ErrorDefinition","parameters":{"id":1407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1406,"mutability":"mutable","name":"pool","nameLocation":"14391:4:14","nodeType":"VariableDeclaration","scope":1408,"src":"14383:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1405,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:14"},"src":"14354:43:14"},{"documentation":{"id":1409,"nodeType":"StructuredDocumentation","src":"14628:163:14","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1414,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:14","nodeType":"ErrorDefinition","parameters":{"id":1413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1412,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:14","nodeType":"VariableDeclaration","scope":1414,"src":"14827:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1411,"nodeType":"UserDefinedTypeName","pathNode":{"id":1410,"name":"IERC4626","nameLocations":["14827:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"14827:8:14"},"referencedDeclaration":7300,"src":"14827:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:14"},"src":"14796:54:14"},{"documentation":{"id":1415,"nodeType":"StructuredDocumentation","src":"14856:159:14","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1420,"name":"BufferNotInitialized","nameLocation":"15026:20:14","nodeType":"ErrorDefinition","parameters":{"id":1419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1418,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:14","nodeType":"VariableDeclaration","scope":1420,"src":"15047:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1417,"nodeType":"UserDefinedTypeName","pathNode":{"id":1416,"name":"IERC4626","nameLocations":["15047:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"15047:8:14"},"referencedDeclaration":7300,"src":"15047:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:14"},"src":"15020:50:14"},{"documentation":{"id":1421,"nodeType":"StructuredDocumentation","src":"15076:90:14","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1423,"name":"NotEnoughBufferShares","nameLocation":"15177:21:14","nodeType":"ErrorDefinition","parameters":{"id":1422,"nodeType":"ParameterList","parameters":[],"src":"15198:2:14"},"src":"15171:30:14"},{"documentation":{"id":1424,"nodeType":"StructuredDocumentation","src":"15207:436:14","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1431,"name":"WrongUnderlyingToken","nameLocation":"15654:20:14","nodeType":"ErrorDefinition","parameters":{"id":1430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1427,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:14","nodeType":"VariableDeclaration","scope":1431,"src":"15675:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1426,"nodeType":"UserDefinedTypeName","pathNode":{"id":1425,"name":"IERC4626","nameLocations":["15675:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"15675:8:14"},"referencedDeclaration":7300,"src":"15675:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1429,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:14","nodeType":"VariableDeclaration","scope":1431,"src":"15698:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1428,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:14"},"src":"15648:75:14"},{"documentation":{"id":1432,"nodeType":"StructuredDocumentation","src":"15729:322:14","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1437,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:14","nodeType":"ErrorDefinition","parameters":{"id":1436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1435,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:14","nodeType":"VariableDeclaration","scope":1437,"src":"16085:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1434,"nodeType":"UserDefinedTypeName","pathNode":{"id":1433,"name":"IERC4626","nameLocations":["16085:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"16085:8:14"},"referencedDeclaration":7300,"src":"16085:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:14"},"src":"16056:52:14"},{"documentation":{"id":1438,"nodeType":"StructuredDocumentation","src":"16114:183:14","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1443,"name":"WrapAmountTooSmall","nameLocation":"16308:18:14","nodeType":"ErrorDefinition","parameters":{"id":1442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1441,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:14","nodeType":"VariableDeclaration","scope":1443,"src":"16327:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1440,"nodeType":"UserDefinedTypeName","pathNode":{"id":1439,"name":"IERC4626","nameLocations":["16327:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"16327:8:14"},"referencedDeclaration":7300,"src":"16327:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:14"},"src":"16302:48:14"},{"documentation":{"id":1444,"nodeType":"StructuredDocumentation","src":"16356:70:14","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1446,"name":"VaultBuffersArePaused","nameLocation":"16437:21:14","nodeType":"ErrorDefinition","parameters":{"id":1445,"nodeType":"ParameterList","parameters":[],"src":"16458:2:14"},"src":"16431:30:14"},{"documentation":{"id":1447,"nodeType":"StructuredDocumentation","src":"16467:58:14","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1449,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:14","nodeType":"ErrorDefinition","parameters":{"id":1448,"nodeType":"ParameterList","parameters":[],"src":"16563:2:14"},"src":"16530:36:14"},{"documentation":{"id":1450,"nodeType":"StructuredDocumentation","src":"16572:60:14","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1452,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:14","nodeType":"ErrorDefinition","parameters":{"id":1451,"nodeType":"ParameterList","parameters":[],"src":"16667:2:14"},"src":"16637:33:14"},{"documentation":{"id":1453,"nodeType":"StructuredDocumentation","src":"16676:173:14","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1457,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:14","nodeType":"ErrorDefinition","parameters":{"id":1456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:14","nodeType":"VariableDeclaration","scope":1457,"src":"16884:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1454,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:14"},"src":"16854:51:14"},{"documentation":{"id":1458,"nodeType":"StructuredDocumentation","src":"16911:97:14","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1467,"name":"NotEnoughUnderlying","nameLocation":"17019:19:14","nodeType":"ErrorDefinition","parameters":{"id":1466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1461,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:14","nodeType":"VariableDeclaration","scope":1467,"src":"17039:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1460,"nodeType":"UserDefinedTypeName","pathNode":{"id":1459,"name":"IERC4626","nameLocations":["17039:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"17039:8:14"},"referencedDeclaration":7300,"src":"17039:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1463,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:14","nodeType":"VariableDeclaration","scope":1467,"src":"17062:32:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1462,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1465,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:14","nodeType":"VariableDeclaration","scope":1467,"src":"17096:30:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1464,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:14"},"src":"17013:115:14"},{"documentation":{"id":1468,"nodeType":"StructuredDocumentation","src":"17134:94:14","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1477,"name":"NotEnoughWrapped","nameLocation":"17239:16:14","nodeType":"ErrorDefinition","parameters":{"id":1476,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1471,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:14","nodeType":"VariableDeclaration","scope":1477,"src":"17256:21:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1470,"nodeType":"UserDefinedTypeName","pathNode":{"id":1469,"name":"IERC4626","nameLocations":["17256:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"17256:8:14"},"referencedDeclaration":7300,"src":"17256:8:14","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1473,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:14","nodeType":"VariableDeclaration","scope":1477,"src":"17279:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1472,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1475,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:14","nodeType":"VariableDeclaration","scope":1477,"src":"17310:27:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1474,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:14"},"src":"17233:106:14"},{"documentation":{"id":1478,"nodeType":"StructuredDocumentation","src":"17345:76:14","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1484,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:14","nodeType":"ErrorDefinition","parameters":{"id":1483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:14","nodeType":"VariableDeclaration","scope":1484,"src":"17453:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1479,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1482,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:14","nodeType":"VariableDeclaration","scope":1484,"src":"17475:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1481,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:14"},"src":"17426:74:14"},{"documentation":{"id":1485,"nodeType":"StructuredDocumentation","src":"17727:87:14","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1487,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:14","nodeType":"ErrorDefinition","parameters":{"id":1486,"nodeType":"ParameterList","parameters":[],"src":"17858:2:14"},"src":"17819:42:14"},{"documentation":{"id":1488,"nodeType":"StructuredDocumentation","src":"17867:48:14","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1490,"name":"CannotReceiveEth","nameLocation":"17926:16:14","nodeType":"ErrorDefinition","parameters":{"id":1489,"nodeType":"ParameterList","parameters":[],"src":"17942:2:14"},"src":"17920:25:14"},{"documentation":{"id":1491,"nodeType":"StructuredDocumentation","src":"17951:156:14","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1493,"name":"NotVaultDelegateCall","nameLocation":"18118:20:14","nodeType":"ErrorDefinition","parameters":{"id":1492,"nodeType":"ParameterList","parameters":[],"src":"18138:2:14"},"src":"18112:29:14"},{"documentation":{"id":1494,"nodeType":"StructuredDocumentation","src":"18147:89:14","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1496,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:14","nodeType":"ErrorDefinition","parameters":{"id":1495,"nodeType":"ParameterList","parameters":[],"src":"18276:2:14"},"src":"18241:38:14"},{"documentation":{"id":1497,"nodeType":"StructuredDocumentation","src":"18285:96:14","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1499,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:14","nodeType":"ErrorDefinition","parameters":{"id":1498,"nodeType":"ParameterList","parameters":[],"src":"18428:2:14"},"src":"18386:45:14"},{"documentation":{"id":1500,"nodeType":"StructuredDocumentation","src":"18437:85:14","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1502,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:14","nodeType":"ErrorDefinition","parameters":{"id":1501,"nodeType":"ParameterList","parameters":[],"src":"18558:2:14"},"src":"18527:34:14"},{"documentation":{"id":1503,"nodeType":"StructuredDocumentation","src":"18567:54:14","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1505,"name":"QuoteResultSpoofed","nameLocation":"18632:18:14","nodeType":"ErrorDefinition","parameters":{"id":1504,"nodeType":"ParameterList","parameters":[],"src":"18650:2:14"},"src":"18626:27:14"}],"scope":1507,"src":"316:18339:14","usedErrors":[1151,1156,1161,1166,1175,1181,1184,1187,1190,1193,1196,1199,1208,1211,1214,1217,1220,1223,1226,1229,1232,1235,1238,1241,1244,1247,1250,1256,1263,1270,1273,1276,1286,1296,1303,1306,1309,1312,1322,1332,1339,1342,1345,1348,1351,1354,1357,1360,1363,1368,1373,1378,1381,1384,1387,1390,1393,1398,1403,1408,1414,1420,1423,1431,1437,1443,1446,1449,1452,1457,1467,1477,1484,1487,1490,1493,1496,1499,1502,1505],"usedEvents":[]}],"src":"46:18610:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AddLiquidityParams":[2561],"AfterSwapParams":[2539],"BufferWrapOrUnwrapParams":[2600],"FEE_BITLENGTH":[2603],"FEE_SCALING_FACTOR":[2606],"HookFlags":[2365],"HooksConfig":[2389],"IAuthorizer":[115],"IERC20":[7403],"IERC4626":[7300],"IHooks":[441],"IProtocolFeeController":[779],"IRateProvider":[89],"IVaultEvents":[1745],"LiquidityManagement":[2318],"MAX_FEE_PERCENTAGE":[2609],"PoolConfig":[2343],"PoolConfigBits":[2320],"PoolData":[2467],"PoolRoleAccounts":[2415],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"RemoveLiquidityParams":[2582],"Rounding":[2470],"SwapKind":[2473],"SwapState":[2399],"TokenConfig":[2432],"TokenInfo":[2442],"TokenType":[2419],"VaultState":[2407],"VaultSwapParams":[2492],"WrappingDirection":[2585]},"id":1746,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1508,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1510,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":7301,"src":"72:75:15","symbolAliases":[{"foreign":{"id":1509,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"81:8:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1512,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":7404,"src":"148:72:15","symbolAliases":[{"foreign":{"id":1511,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"157:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1514,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":780,"src":"222:70:15","symbolAliases":[{"foreign":{"id":1513,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"231:22:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":116,"src":"293:48:15","symbolAliases":[{"foreign":{"id":1515,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"302:11:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":442,"src":"342:38:15","symbolAliases":[{"foreign":{"id":1517,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"351:6:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1519,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1746,"sourceUnit":2610,"src":"381:26:15","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1520,"nodeType":"StructuredDocumentation","src":"409:91:15","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1745,"linearizedBaseContracts":[1745],"name":"IVaultEvents","nameLocation":"510:12:15","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"529:657:15","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1544,"name":"PoolRegistered","nameLocation":"1197:14:15","nodeType":"EventDefinition","parameters":{"id":1543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1523,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:15","nodeType":"VariableDeclaration","scope":1544,"src":"1221:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1522,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1525,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:15","nodeType":"VariableDeclaration","scope":1544,"src":"1251:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1524,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1529,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:15","nodeType":"VariableDeclaration","scope":1544,"src":"1284:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1527,"nodeType":"UserDefinedTypeName","pathNode":{"id":1526,"name":"TokenConfig","nameLocations":["1284:11:15"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"1284:11:15"},"referencedDeclaration":2432,"src":"1284:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":1528,"nodeType":"ArrayTypeName","src":"1284:13:15","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1531,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:15","nodeType":"VariableDeclaration","scope":1544,"src":"1319:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1530,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1533,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:15","nodeType":"VariableDeclaration","scope":1544,"src":"1354:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1532,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:15","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1536,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:15","nodeType":"VariableDeclaration","scope":1544,"src":"1389:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1535,"nodeType":"UserDefinedTypeName","pathNode":{"id":1534,"name":"PoolRoleAccounts","nameLocations":["1389:16:15"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"1389:16:15"},"referencedDeclaration":2415,"src":"1389:16:15","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1539,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:15","nodeType":"VariableDeclaration","scope":1544,"src":"1428:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2389_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1538,"nodeType":"UserDefinedTypeName","pathNode":{"id":1537,"name":"HooksConfig","nameLocations":["1428:11:15"],"nodeType":"IdentifierPath","referencedDeclaration":2389,"src":"1428:11:15"},"referencedDeclaration":2389,"src":"1428:11:15","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2389_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1542,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:15","nodeType":"VariableDeclaration","scope":1544,"src":"1461:39:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1541,"nodeType":"UserDefinedTypeName","pathNode":{"id":1540,"name":"LiquidityManagement","nameLocations":["1461:19:15"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"1461:19:15"},"referencedDeclaration":2318,"src":"1461:19:15","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:15"},"src":"1191:316:15"},{"anonymous":false,"documentation":{"id":1545,"nodeType":"StructuredDocumentation","src":"1513:120:15","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1549,"name":"PoolInitialized","nameLocation":"1644:15:15","nodeType":"EventDefinition","parameters":{"id":1548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1547,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:15","nodeType":"VariableDeclaration","scope":1549,"src":"1660:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1546,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:15"},"src":"1638:44:15"},{"anonymous":false,"documentation":{"id":1550,"nodeType":"StructuredDocumentation","src":"1688:478:15","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1568,"name":"Swap","nameLocation":"2177:4:15","nodeType":"EventDefinition","parameters":{"id":1567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1552,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:15","nodeType":"VariableDeclaration","scope":1568,"src":"2191:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1551,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1555,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:15","nodeType":"VariableDeclaration","scope":1568,"src":"2221:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1554,"nodeType":"UserDefinedTypeName","pathNode":{"id":1553,"name":"IERC20","nameLocations":["2221:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2221:6:15"},"referencedDeclaration":7403,"src":"2221:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1558,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:15","nodeType":"VariableDeclaration","scope":1568,"src":"2253:23:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1557,"nodeType":"UserDefinedTypeName","pathNode":{"id":1556,"name":"IERC20","nameLocations":["2253:6:15"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2253:6:15"},"referencedDeclaration":7403,"src":"2253:6:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1560,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:15","nodeType":"VariableDeclaration","scope":1568,"src":"2286:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1559,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1562,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:15","nodeType":"VariableDeclaration","scope":1568,"src":"2312:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1561,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1564,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:15","nodeType":"VariableDeclaration","scope":1568,"src":"2339:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1563,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1566,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:15","nodeType":"VariableDeclaration","scope":1568,"src":"2374:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1565,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:15"},"src":"2171:231:15"},{"anonymous":false,"documentation":{"id":1569,"nodeType":"StructuredDocumentation","src":"2408:352:15","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1580,"name":"Wrap","nameLocation":"2771:4:15","nodeType":"EventDefinition","parameters":{"id":1579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1572,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:15","nodeType":"VariableDeclaration","scope":1580,"src":"2785:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1571,"nodeType":"UserDefinedTypeName","pathNode":{"id":1570,"name":"IERC4626","nameLocations":["2785:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"2785:8:15"},"referencedDeclaration":7300,"src":"2785:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1574,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:15","nodeType":"VariableDeclaration","scope":1580,"src":"2824:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1573,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1576,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:15","nodeType":"VariableDeclaration","scope":1580,"src":"2861:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1575,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1578,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:15","nodeType":"VariableDeclaration","scope":1580,"src":"2891:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1577,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:15"},"src":"2765:155:15"},{"anonymous":false,"documentation":{"id":1581,"nodeType":"StructuredDocumentation","src":"2926:355:15","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1592,"name":"Unwrap","nameLocation":"3292:6:15","nodeType":"EventDefinition","parameters":{"id":1591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1584,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:15","nodeType":"VariableDeclaration","scope":1592,"src":"3308:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1583,"nodeType":"UserDefinedTypeName","pathNode":{"id":1582,"name":"IERC4626","nameLocations":["3308:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"3308:8:15"},"referencedDeclaration":7300,"src":"3308:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1586,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:15","nodeType":"VariableDeclaration","scope":1592,"src":"3347:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1588,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:15","nodeType":"VariableDeclaration","scope":1592,"src":"3377:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1587,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1590,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:15","nodeType":"VariableDeclaration","scope":1592,"src":"3414:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1589,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:15"},"src":"3286:157:15"},{"anonymous":false,"documentation":{"id":1593,"nodeType":"StructuredDocumentation","src":"3449:562:15","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1610,"name":"LiquidityAdded","nameLocation":"4022:14:15","nodeType":"EventDefinition","parameters":{"id":1609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1595,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:15","nodeType":"VariableDeclaration","scope":1610,"src":"4046:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1594,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1597,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:15","nodeType":"VariableDeclaration","scope":1610,"src":"4076:33:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1596,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1600,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:15","nodeType":"VariableDeclaration","scope":1610,"src":"4119:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":1599,"nodeType":"UserDefinedTypeName","pathNode":{"id":1598,"name":"AddLiquidityKind","nameLocations":["4119:16:15"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"4119:16:15"},"referencedDeclaration":2545,"src":"4119:16:15","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1602,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:15","nodeType":"VariableDeclaration","scope":1610,"src":"4158:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1601,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1605,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:15","nodeType":"VariableDeclaration","scope":1610,"src":"4187:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1604,"nodeType":"ArrayTypeName","src":"4187:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1608,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:15","nodeType":"VariableDeclaration","scope":1610,"src":"4222:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1606,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1607,"nodeType":"ArrayTypeName","src":"4222:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:15"},"src":"4016:240:15"},{"anonymous":false,"documentation":{"id":1611,"nodeType":"StructuredDocumentation","src":"4262:548:15","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1628,"name":"LiquidityRemoved","nameLocation":"4821:16:15","nodeType":"EventDefinition","parameters":{"id":1627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1613,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:15","nodeType":"VariableDeclaration","scope":1628,"src":"4847:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1612,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1615,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:15","nodeType":"VariableDeclaration","scope":1628,"src":"4877:33:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1614,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1618,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:15","nodeType":"VariableDeclaration","scope":1628,"src":"4920:32:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1617,"nodeType":"UserDefinedTypeName","pathNode":{"id":1616,"name":"RemoveLiquidityKind","nameLocations":["4920:19:15"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"4920:19:15"},"referencedDeclaration":2566,"src":"4920:19:15","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1620,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:15","nodeType":"VariableDeclaration","scope":1628,"src":"4962:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1619,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1623,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:15","nodeType":"VariableDeclaration","scope":1628,"src":"4991:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1621,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1622,"nodeType":"ArrayTypeName","src":"4991:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1626,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:15","nodeType":"VariableDeclaration","scope":1628,"src":"5028:27:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1624,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1625,"nodeType":"ArrayTypeName","src":"5028:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:15"},"src":"4815:247:15"},{"anonymous":false,"documentation":{"id":1629,"nodeType":"StructuredDocumentation","src":"5068:114:15","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1633,"name":"VaultPausedStateChanged","nameLocation":"5193:23:15","nodeType":"EventDefinition","parameters":{"id":1632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1631,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:15","nodeType":"VariableDeclaration","scope":1633,"src":"5217:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1630,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:15"},"src":"5187:43:15"},{"anonymous":false,"documentation":{"id":1634,"nodeType":"StructuredDocumentation","src":"5236:87:15","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1636,"name":"VaultQueriesDisabled","nameLocation":"5334:20:15","nodeType":"EventDefinition","parameters":{"id":1635,"nodeType":"ParameterList","parameters":[],"src":"5354:2:15"},"src":"5328:29:15"},{"anonymous":false,"documentation":{"id":1637,"nodeType":"StructuredDocumentation","src":"5363:85:15","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1639,"name":"VaultQueriesEnabled","nameLocation":"5459:19:15","nodeType":"EventDefinition","parameters":{"id":1638,"nodeType":"ParameterList","parameters":[],"src":"5478:2:15"},"src":"5453:28:15"},{"anonymous":false,"documentation":{"id":1640,"nodeType":"StructuredDocumentation","src":"5487:171:15","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1646,"name":"PoolPausedStateChanged","nameLocation":"5669:22:15","nodeType":"EventDefinition","parameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1642,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:15","nodeType":"VariableDeclaration","scope":1646,"src":"5692:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1641,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1644,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:15","nodeType":"VariableDeclaration","scope":1646,"src":"5714:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1643,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:15"},"src":"5663:64:15"},{"anonymous":false,"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"5733:158:15","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1653,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:15","nodeType":"EventDefinition","parameters":{"id":1652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1649,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:15","nodeType":"VariableDeclaration","scope":1653,"src":"5927:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1651,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:15","nodeType":"VariableDeclaration","scope":1653,"src":"5949:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1650,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:15"},"src":"5896:80:15"},{"anonymous":false,"documentation":{"id":1654,"nodeType":"StructuredDocumentation","src":"5982:170:15","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1660,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:15","nodeType":"EventDefinition","parameters":{"id":1659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1656,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:15","nodeType":"VariableDeclaration","scope":1660,"src":"6192:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1655,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1658,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:15","nodeType":"VariableDeclaration","scope":1660,"src":"6214:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1657,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:15"},"src":"6157:76:15"},{"anonymous":false,"documentation":{"id":1661,"nodeType":"StructuredDocumentation","src":"6239:353:15","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1667,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:15","nodeType":"EventDefinition","parameters":{"id":1666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1663,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:15","nodeType":"VariableDeclaration","scope":1667,"src":"6637:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1662,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1665,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:15","nodeType":"VariableDeclaration","scope":1667,"src":"6659:34:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1664,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:15"},"src":"6597:98:15"},{"anonymous":false,"documentation":{"id":1668,"nodeType":"StructuredDocumentation","src":"6701:357:15","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1674,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:15","nodeType":"EventDefinition","parameters":{"id":1673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:15","nodeType":"VariableDeclaration","scope":1674,"src":"7104:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1669,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1672,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:15","nodeType":"VariableDeclaration","scope":1674,"src":"7126:35:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1671,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:15"},"src":"7063:100:15"},{"anonymous":false,"documentation":{"id":1675,"nodeType":"StructuredDocumentation","src":"7169:132:15","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1680,"name":"AuthorizerChanged","nameLocation":"7312:17:15","nodeType":"EventDefinition","parameters":{"id":1679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1678,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:15","nodeType":"VariableDeclaration","scope":1680,"src":"7330:33:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"},"typeName":{"id":1677,"nodeType":"UserDefinedTypeName","pathNode":{"id":1676,"name":"IAuthorizer","nameLocations":["7330:11:15"],"nodeType":"IdentifierPath","referencedDeclaration":115,"src":"7330:11:15"},"referencedDeclaration":115,"src":"7330:11:15","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:15"},"src":"7306:59:15"},{"anonymous":false,"documentation":{"id":1681,"nodeType":"StructuredDocumentation","src":"7371:180:15","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1686,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:15","nodeType":"EventDefinition","parameters":{"id":1685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1684,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:15","nodeType":"VariableDeclaration","scope":1686,"src":"7591:55:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"},"typeName":{"id":1683,"nodeType":"UserDefinedTypeName","pathNode":{"id":1682,"name":"IProtocolFeeController","nameLocations":["7591:22:15"],"nodeType":"IdentifierPath","referencedDeclaration":779,"src":"7591:22:15"},"referencedDeclaration":779,"src":"7591:22:15","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:15"},"src":"7556:92:15"},{"anonymous":false,"documentation":{"id":1687,"nodeType":"StructuredDocumentation","src":"7654:553:15","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1698,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:15","nodeType":"EventDefinition","parameters":{"id":1697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1690,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:15","nodeType":"VariableDeclaration","scope":1698,"src":"8250:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1689,"nodeType":"UserDefinedTypeName","pathNode":{"id":1688,"name":"IERC4626","nameLocations":["8250:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"8250:8:15"},"referencedDeclaration":7300,"src":"8250:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1692,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:15","nodeType":"VariableDeclaration","scope":1698,"src":"8289:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1691,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1694,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:15","nodeType":"VariableDeclaration","scope":1698,"src":"8323:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1696,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:15","nodeType":"VariableDeclaration","scope":1698,"src":"8354:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1695,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:15"},"src":"8212:171:15"},{"anonymous":false,"documentation":{"id":1699,"nodeType":"StructuredDocumentation","src":"8389:570:15","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1708,"name":"BufferSharesMinted","nameLocation":"8970:18:15","nodeType":"EventDefinition","parameters":{"id":1707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1702,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:15","nodeType":"VariableDeclaration","scope":1708,"src":"8989:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1701,"nodeType":"UserDefinedTypeName","pathNode":{"id":1700,"name":"IERC4626","nameLocations":["8989:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"8989:8:15"},"referencedDeclaration":7300,"src":"8989:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1704,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:15","nodeType":"VariableDeclaration","scope":1708,"src":"9020:18:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1703,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1706,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:15","nodeType":"VariableDeclaration","scope":1708,"src":"9040:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1705,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:15"},"src":"8964:98:15"},{"anonymous":false,"documentation":{"id":1709,"nodeType":"StructuredDocumentation","src":"9068:571:15","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1718,"name":"BufferSharesBurned","nameLocation":"9650:18:15","nodeType":"EventDefinition","parameters":{"id":1717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1712,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:15","nodeType":"VariableDeclaration","scope":1718,"src":"9669:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1711,"nodeType":"UserDefinedTypeName","pathNode":{"id":1710,"name":"IERC4626","nameLocations":["9669:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"9669:8:15"},"referencedDeclaration":7300,"src":"9669:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1714,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:15","nodeType":"VariableDeclaration","scope":1718,"src":"9700:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1713,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1716,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:15","nodeType":"VariableDeclaration","scope":1718,"src":"9722:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1715,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:15"},"src":"9644:100:15"},{"anonymous":false,"documentation":{"id":1719,"nodeType":"StructuredDocumentation","src":"9750:509:15","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1730,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:15","nodeType":"EventDefinition","parameters":{"id":1729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1722,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:15","nodeType":"VariableDeclaration","scope":1730,"src":"10306:29:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":1721,"nodeType":"UserDefinedTypeName","pathNode":{"id":1720,"name":"IERC4626","nameLocations":["10306:8:15"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"10306:8:15"},"referencedDeclaration":7300,"src":"10306:8:15","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1724,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:15","nodeType":"VariableDeclaration","scope":1730,"src":"10345:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1723,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1726,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:15","nodeType":"VariableDeclaration","scope":1730,"src":"10379:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1725,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1728,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:15","nodeType":"VariableDeclaration","scope":1730,"src":"10410:22:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1727,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:15"},"src":"10264:175:15"},{"anonymous":false,"documentation":{"id":1731,"nodeType":"StructuredDocumentation","src":"10445:278:15","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1735,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:15","nodeType":"EventDefinition","parameters":{"id":1734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1733,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:15","nodeType":"VariableDeclaration","scope":1735,"src":"10765:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1732,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:15"},"src":"10728:50:15"},{"anonymous":false,"documentation":{"id":1736,"nodeType":"StructuredDocumentation","src":"10784:194:15","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1744,"name":"VaultAuxiliary","nameLocation":"10989:14:15","nodeType":"EventDefinition","parameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1738,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:15","nodeType":"VariableDeclaration","scope":1744,"src":"11004:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1737,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1740,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:15","nodeType":"VariableDeclaration","scope":1744,"src":"11026:24:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1739,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1742,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:15","nodeType":"VariableDeclaration","scope":1744,"src":"11052:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1741,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:15"},"src":"10983:86:15"}],"scope":1746,"src":"500:10571:15","usedErrors":[],"usedEvents":[1544,1549,1568,1580,1592,1610,1628,1633,1636,1639,1646,1653,1660,1667,1674,1680,1686,1698,1708,1718,1730,1735,1744]}],"src":"46:11026:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AddLiquidityParams":[2561],"AfterSwapParams":[2539],"BufferWrapOrUnwrapParams":[2600],"FEE_BITLENGTH":[2603],"FEE_SCALING_FACTOR":[2606],"HookFlags":[2365],"HooksConfig":[2389],"IAuthorizer":[115],"IERC20":[7403],"IERC4626":[7300],"IHooks":[441],"IProtocolFeeController":[779],"IRateProvider":[89],"IVault":[849],"IVaultExtension":[2164],"LiquidityManagement":[2318],"MAX_FEE_PERCENTAGE":[2609],"PoolConfig":[2343],"PoolConfigBits":[2320],"PoolData":[2467],"PoolRoleAccounts":[2415],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"RemoveLiquidityParams":[2582],"Rounding":[2470],"SwapKind":[2473],"SwapState":[2399],"TokenConfig":[2432],"TokenInfo":[2442],"TokenType":[2419],"VaultState":[2407],"VaultSwapParams":[2492],"WrappingDirection":[2585]},"id":2165,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1747,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1749,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":7301,"src":"72:75:16","symbolAliases":[{"foreign":{"id":1748,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"81:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1751,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":7404,"src":"148:72:16","symbolAliases":[{"foreign":{"id":1750,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"157:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1753,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":116,"src":"222:48:16","symbolAliases":[{"foreign":{"id":1752,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"231:11:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1755,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":780,"src":"271:70:16","symbolAliases":[{"foreign":{"id":1754,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":779,"src":"280:22:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1757,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":850,"src":"342:38:16","symbolAliases":[{"foreign":{"id":1756,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"351:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1759,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":442,"src":"381:38:16","symbolAliases":[{"foreign":{"id":1758,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"390:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1760,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2165,"sourceUnit":2610,"src":"420:26:16","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1761,"nodeType":"StructuredDocumentation","src":"448:318:16","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":2164,"linearizedBaseContracts":[2164],"name":"IVaultExtension","nameLocation":"777:15:16","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"1025:206:16","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1768,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:16","nodeType":"FunctionDefinition","parameters":{"id":1763,"nodeType":"ParameterList","parameters":[],"src":"1250:2:16"},"returnParameters":{"id":1767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1766,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1768,"src":"1276:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":1765,"nodeType":"UserDefinedTypeName","pathNode":{"id":1764,"name":"IVault","nameLocations":["1276:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"1276:6:16"},"referencedDeclaration":849,"src":"1276:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:16"},"scope":2164,"src":"1236:48:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1769,"nodeType":"StructuredDocumentation","src":"1290:202:16","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1774,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:16","nodeType":"FunctionDefinition","parameters":{"id":1770,"nodeType":"ParameterList","parameters":[],"src":"1519:2:16"},"returnParameters":{"id":1773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:16","nodeType":"VariableDeclaration","scope":1774,"src":"1545:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1771,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:16"},"scope":2164,"src":"1497:68:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1775,"nodeType":"StructuredDocumentation","src":"1793:254:16","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1780,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:16","nodeType":"FunctionDefinition","parameters":{"id":1776,"nodeType":"ParameterList","parameters":[],"src":"2071:2:16"},"returnParameters":{"id":1779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1778,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:16","nodeType":"VariableDeclaration","scope":1780,"src":"2097:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1777,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:16"},"scope":2164,"src":"2052:60:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1781,"nodeType":"StructuredDocumentation","src":"2118:141:16","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1786,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:16","nodeType":"FunctionDefinition","parameters":{"id":1782,"nodeType":"ParameterList","parameters":[],"src":"2293:2:16"},"returnParameters":{"id":1785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1784,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:16","nodeType":"VariableDeclaration","scope":1786,"src":"2319:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1783,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:16"},"scope":2164,"src":"2264:82:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1787,"nodeType":"StructuredDocumentation","src":"2352:284:16","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1795,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:16","nodeType":"FunctionDefinition","parameters":{"id":1791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1790,"mutability":"mutable","name":"token","nameLocation":"2671:5:16","nodeType":"VariableDeclaration","scope":1795,"src":"2664:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1789,"nodeType":"UserDefinedTypeName","pathNode":{"id":1788,"name":"IERC20","nameLocations":["2664:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2664:6:16"},"referencedDeclaration":7403,"src":"2664:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:16"},"returnParameters":{"id":1794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1793,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:16","nodeType":"VariableDeclaration","scope":1795,"src":"2701:17:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1792,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:16"},"scope":2164,"src":"2641:79:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1796,"nodeType":"StructuredDocumentation","src":"2726:230:16","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1804,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:16","nodeType":"FunctionDefinition","parameters":{"id":1800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1799,"mutability":"mutable","name":"token","nameLocation":"2991:5:16","nodeType":"VariableDeclaration","scope":1804,"src":"2984:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":1798,"nodeType":"UserDefinedTypeName","pathNode":{"id":1797,"name":"IERC20","nameLocations":["2984:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2984:6:16"},"referencedDeclaration":7403,"src":"2984:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:16"},"returnParameters":{"id":1803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1802,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:16","nodeType":"VariableDeclaration","scope":1804,"src":"3021:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1801,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:16"},"scope":2164,"src":"2961:83:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1805,"nodeType":"StructuredDocumentation","src":"3050:944:16","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1812,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:16","nodeType":"FunctionDefinition","parameters":{"id":1808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1807,"mutability":"mutable","name":"pool","nameLocation":"4042:4:16","nodeType":"VariableDeclaration","scope":1812,"src":"4034:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1806,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:16"},"returnParameters":{"id":1811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1810,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:16","nodeType":"VariableDeclaration","scope":1812,"src":"4071:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1809,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:16"},"scope":2164,"src":"3999:93:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1813,"nodeType":"StructuredDocumentation","src":"4323:1604:16","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1836,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:16","nodeType":"FunctionDefinition","parameters":{"id":1834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1815,"mutability":"mutable","name":"pool","nameLocation":"5971:4:16","nodeType":"VariableDeclaration","scope":1836,"src":"5963:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1814,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1819,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:16","nodeType":"VariableDeclaration","scope":1836,"src":"5985:32:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1817,"nodeType":"UserDefinedTypeName","pathNode":{"id":1816,"name":"TokenConfig","nameLocations":["5985:11:16"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"5985:11:16"},"referencedDeclaration":2432,"src":"5985:11:16","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":1818,"nodeType":"ArrayTypeName","src":"5985:13:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1821,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:16","nodeType":"VariableDeclaration","scope":1836,"src":"6027:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1823,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:16","nodeType":"VariableDeclaration","scope":1836,"src":"6062:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1822,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:16","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1825,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:16","nodeType":"VariableDeclaration","scope":1836,"src":"6097:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1824,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1828,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:16","nodeType":"VariableDeclaration","scope":1836,"src":"6129:38:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1827,"nodeType":"UserDefinedTypeName","pathNode":{"id":1826,"name":"PoolRoleAccounts","nameLocations":["6129:16:16"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"6129:16:16"},"referencedDeclaration":2415,"src":"6129:16:16","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1830,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:16","nodeType":"VariableDeclaration","scope":1836,"src":"6177:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1829,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1833,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:16","nodeType":"VariableDeclaration","scope":1836,"src":"6212:48:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1832,"nodeType":"UserDefinedTypeName","pathNode":{"id":1831,"name":"LiquidityManagement","nameLocations":["6212:19:16"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"6212:19:16"},"referencedDeclaration":2318,"src":"6212:19:16","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:16"},"returnParameters":{"id":1835,"nodeType":"ParameterList","parameters":[],"src":"6275:0:16"},"scope":2164,"src":"5932:344:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1837,"nodeType":"StructuredDocumentation","src":"6282:185:16","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1844,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:16","nodeType":"FunctionDefinition","parameters":{"id":1840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"pool","nameLocation":"6506:4:16","nodeType":"VariableDeclaration","scope":1844,"src":"6498:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1838,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:16"},"returnParameters":{"id":1843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1842,"mutability":"mutable","name":"registered","nameLocation":"6540:10:16","nodeType":"VariableDeclaration","scope":1844,"src":"6535:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1841,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:16"},"scope":2164,"src":"6472:80:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1845,"nodeType":"StructuredDocumentation","src":"6558:589:16","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:16","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1847,"mutability":"mutable","name":"pool","nameLocation":"7189:4:16","nodeType":"VariableDeclaration","scope":1865,"src":"7181:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1846,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"to","nameLocation":"7211:2:16","nodeType":"VariableDeclaration","scope":1865,"src":"7203:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1848,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1853,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:16","nodeType":"VariableDeclaration","scope":1865,"src":"7223:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1851,"nodeType":"UserDefinedTypeName","pathNode":{"id":1850,"name":"IERC20","nameLocations":["7223:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"7223:6:16"},"referencedDeclaration":7403,"src":"7223:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":1852,"nodeType":"ArrayTypeName","src":"7223:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1856,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:16","nodeType":"VariableDeclaration","scope":1865,"src":"7255:31:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1854,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1855,"nodeType":"ArrayTypeName","src":"7255:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1858,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:16","nodeType":"VariableDeclaration","scope":1865,"src":"7296:23:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1857,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1860,"mutability":"mutable","name":"userData","nameLocation":"7342:8:16","nodeType":"VariableDeclaration","scope":1865,"src":"7329:21:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1859,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:16"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:16","nodeType":"VariableDeclaration","scope":1865,"src":"7375:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1862,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:16"},"scope":2164,"src":"7152:245:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"7627:258:16","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:16","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"7925:4:16","nodeType":"VariableDeclaration","scope":1873,"src":"7917:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:16"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:16","nodeType":"VariableDeclaration","scope":1873,"src":"7954:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1870,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:16"},"scope":2164,"src":"7890:82:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"7978:152:16","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1883,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:16","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"pool","nameLocation":"8166:4:16","nodeType":"VariableDeclaration","scope":1883,"src":"8158:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:16"},"returnParameters":{"id":1882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1881,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:16","nodeType":"VariableDeclaration","scope":1883,"src":"8195:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1879,"nodeType":"UserDefinedTypeName","pathNode":{"id":1878,"name":"IERC20","nameLocations":["8195:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"8195:6:16"},"referencedDeclaration":7403,"src":"8195:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":1880,"nodeType":"ArrayTypeName","src":"8195:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:16"},"scope":2164,"src":"8135:84:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1884,"nodeType":"StructuredDocumentation","src":"8225:512:16","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1895,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:16","nodeType":"FunctionDefinition","parameters":{"id":1887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1886,"mutability":"mutable","name":"pool","nameLocation":"8786:4:16","nodeType":"VariableDeclaration","scope":1895,"src":"8778:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1885,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:16"},"returnParameters":{"id":1894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1890,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:16","nodeType":"VariableDeclaration","scope":1895,"src":"8820:38:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1888,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1889,"nodeType":"ArrayTypeName","src":"8820:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1893,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:16","nodeType":"VariableDeclaration","scope":1895,"src":"8860:27:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1891,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1892,"nodeType":"ArrayTypeName","src":"8860:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:16"},"scope":2164,"src":"8742:147:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1896,"nodeType":"StructuredDocumentation","src":"8895:287:16","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1904,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:16","nodeType":"FunctionDefinition","parameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1898,"mutability":"mutable","name":"pool","nameLocation":"9216:4:16","nodeType":"VariableDeclaration","scope":1904,"src":"9208:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1897,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:16"},"returnParameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1902,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:16","nodeType":"VariableDeclaration","scope":1904,"src":"9245:24:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2467_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1901,"nodeType":"UserDefinedTypeName","pathNode":{"id":1900,"name":"PoolData","nameLocations":["9245:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":2467,"src":"9245:8:16"},"referencedDeclaration":2467,"src":"9245:8:16","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2467_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:16"},"scope":2164,"src":"9187:84:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1905,"nodeType":"StructuredDocumentation","src":"9277:531:16","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1924,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:16","nodeType":"FunctionDefinition","parameters":{"id":1908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1907,"mutability":"mutable","name":"pool","nameLocation":"9856:4:16","nodeType":"VariableDeclaration","scope":1924,"src":"9848:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1906,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:16"},"returnParameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1912,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:16","nodeType":"VariableDeclaration","scope":1924,"src":"9927:22:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1910,"nodeType":"UserDefinedTypeName","pathNode":{"id":1909,"name":"IERC20","nameLocations":["9927:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"9927:6:16"},"referencedDeclaration":7403,"src":"9927:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":1911,"nodeType":"ArrayTypeName","src":"9927:8:16","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1916,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:16","nodeType":"VariableDeclaration","scope":1924,"src":"9963:28:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1914,"nodeType":"UserDefinedTypeName","pathNode":{"id":1913,"name":"TokenInfo","nameLocations":["9963:9:16"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"9963:9:16"},"referencedDeclaration":2442,"src":"9963:9:16","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"id":1915,"nodeType":"ArrayTypeName","src":"9963:11:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1919,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:16","nodeType":"VariableDeclaration","scope":1924,"src":"10005:28:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1917,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1918,"nodeType":"ArrayTypeName","src":"10005:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1922,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:16","nodeType":"VariableDeclaration","scope":1924,"src":"10047:41:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1921,"nodeType":"ArrayTypeName","src":"10047:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:16"},"scope":2164,"src":"9813:286:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1925,"nodeType":"StructuredDocumentation","src":"10105:312:16","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1933,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:16","nodeType":"FunctionDefinition","parameters":{"id":1928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"pool","nameLocation":"10462:4:16","nodeType":"VariableDeclaration","scope":1933,"src":"10454:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1926,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:16"},"returnParameters":{"id":1932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1931,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:16","nodeType":"VariableDeclaration","scope":1933,"src":"10491:37:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1929,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1930,"nodeType":"ArrayTypeName","src":"10491:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:16"},"scope":2164,"src":"10422:108:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1934,"nodeType":"StructuredDocumentation","src":"10536:301:16","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1942,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:16","nodeType":"FunctionDefinition","parameters":{"id":1937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1936,"mutability":"mutable","name":"pool","nameLocation":"10873:4:16","nodeType":"VariableDeclaration","scope":1942,"src":"10865:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1935,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:16"},"returnParameters":{"id":1941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1940,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:16","nodeType":"VariableDeclaration","scope":1942,"src":"10902:28:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1939,"nodeType":"UserDefinedTypeName","pathNode":{"id":1938,"name":"PoolConfig","nameLocations":["10902:10:16"],"nodeType":"IdentifierPath","referencedDeclaration":2343,"src":"10902:10:16"},"referencedDeclaration":2343,"src":"10902:10:16","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:16"},"scope":2164,"src":"10842:90:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1943,"nodeType":"StructuredDocumentation","src":"10938:283:16","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1951,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:16","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1945,"mutability":"mutable","name":"pool","nameLocation":"11258:4:16","nodeType":"VariableDeclaration","scope":1951,"src":"11250:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1944,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:16"},"returnParameters":{"id":1950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1949,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:16","nodeType":"VariableDeclaration","scope":1951,"src":"11287:30:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2389_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1948,"nodeType":"UserDefinedTypeName","pathNode":{"id":1947,"name":"HooksConfig","nameLocations":["11287:11:16"],"nodeType":"IdentifierPath","referencedDeclaration":2389,"src":"11287:11:16"},"referencedDeclaration":2389,"src":"11287:11:16","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2389_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:16"},"scope":2164,"src":"11226:93:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1952,"nodeType":"StructuredDocumentation","src":"11325:160:16","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1959,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:16","nodeType":"FunctionDefinition","parameters":{"id":1955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1954,"mutability":"mutable","name":"pool","nameLocation":"11518:4:16","nodeType":"VariableDeclaration","scope":1959,"src":"11510:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1953,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:16"},"returnParameters":{"id":1958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1957,"mutability":"mutable","name":"rate","nameLocation":"11555:4:16","nodeType":"VariableDeclaration","scope":1959,"src":"11547:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1956,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:16"},"scope":2164,"src":"11490:71:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1960,"nodeType":"StructuredDocumentation","src":"11792:168:16","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1967,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:16","nodeType":"FunctionDefinition","parameters":{"id":1963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1962,"mutability":"mutable","name":"token","nameLocation":"11994:5:16","nodeType":"VariableDeclaration","scope":1967,"src":"11986:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1961,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:16"},"returnParameters":{"id":1966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1965,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:16","nodeType":"VariableDeclaration","scope":1967,"src":"12024:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1964,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:16"},"scope":2164,"src":"11965:85:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1968,"nodeType":"StructuredDocumentation","src":"12056:225:16","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1977,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:16","nodeType":"FunctionDefinition","parameters":{"id":1973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1970,"mutability":"mutable","name":"token","nameLocation":"12313:5:16","nodeType":"VariableDeclaration","scope":1977,"src":"12305:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1969,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"account","nameLocation":"12328:7:16","nodeType":"VariableDeclaration","scope":1977,"src":"12320:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1971,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:16"},"returnParameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:16","nodeType":"VariableDeclaration","scope":1977,"src":"12360:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1974,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:16"},"scope":2164,"src":"12286:96:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1978,"nodeType":"StructuredDocumentation","src":"12388:299:16","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1989,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:16","nodeType":"FunctionDefinition","parameters":{"id":1985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1980,"mutability":"mutable","name":"token","nameLocation":"12719:5:16","nodeType":"VariableDeclaration","scope":1989,"src":"12711:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1979,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1982,"mutability":"mutable","name":"owner","nameLocation":"12734:5:16","nodeType":"VariableDeclaration","scope":1989,"src":"12726:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1981,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1984,"mutability":"mutable","name":"spender","nameLocation":"12749:7:16","nodeType":"VariableDeclaration","scope":1989,"src":"12741:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1983,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:16"},"returnParameters":{"id":1988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1987,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:16","nodeType":"VariableDeclaration","scope":1989,"src":"12781:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1986,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:16"},"scope":2164,"src":"12692:113:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1990,"nodeType":"StructuredDocumentation","src":"12811:475:16","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":2001,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:16","nodeType":"FunctionDefinition","parameters":{"id":1997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"owner","nameLocation":"13316:5:16","nodeType":"VariableDeclaration","scope":2001,"src":"13308:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1991,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1994,"mutability":"mutable","name":"spender","nameLocation":"13331:7:16","nodeType":"VariableDeclaration","scope":2001,"src":"13323:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1993,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1996,"mutability":"mutable","name":"amount","nameLocation":"13348:6:16","nodeType":"VariableDeclaration","scope":2001,"src":"13340:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1995,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:16"},"returnParameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1999,"mutability":"mutable","name":"success","nameLocation":"13379:7:16","nodeType":"VariableDeclaration","scope":2001,"src":"13374:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1998,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:16"},"scope":2164,"src":"13291:97:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2002,"nodeType":"StructuredDocumentation","src":"13615:251:16","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":2009,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:16","nodeType":"FunctionDefinition","parameters":{"id":2005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2004,"mutability":"mutable","name":"pool","nameLocation":"13901:4:16","nodeType":"VariableDeclaration","scope":2009,"src":"13893:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2003,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:16"},"returnParameters":{"id":2008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2007,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:16","nodeType":"VariableDeclaration","scope":2009,"src":"13930:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2006,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:16"},"scope":2164,"src":"13871:76:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2010,"nodeType":"StructuredDocumentation","src":"13953:648:16","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":2023,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:16","nodeType":"FunctionDefinition","parameters":{"id":2013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2012,"mutability":"mutable","name":"pool","nameLocation":"14651:4:16","nodeType":"VariableDeclaration","scope":2023,"src":"14643:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2011,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:16"},"returnParameters":{"id":2022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2015,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:16","nodeType":"VariableDeclaration","scope":2023,"src":"14709:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2014,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2017,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:16","nodeType":"VariableDeclaration","scope":2023,"src":"14726:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2016,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:16","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2019,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:16","nodeType":"VariableDeclaration","scope":2023,"src":"14757:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2018,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:16","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2021,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:16","nodeType":"VariableDeclaration","scope":2023,"src":"14789:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2020,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:16"},"scope":2164,"src":"14606:205:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2024,"nodeType":"StructuredDocumentation","src":"15039:332:16","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":2032,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:16","nodeType":"FunctionDefinition","parameters":{"id":2028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2027,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:16","nodeType":"VariableDeclaration","scope":2032,"src":"15412:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":2026,"nodeType":"UserDefinedTypeName","pathNode":{"id":2025,"name":"IERC4626","nameLocations":["15412:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"15412:8:16"},"referencedDeclaration":7300,"src":"15412:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:16"},"returnParameters":{"id":2031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2030,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:16","nodeType":"VariableDeclaration","scope":2032,"src":"15458:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2029,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:16"},"scope":2164,"src":"15376:108:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2033,"nodeType":"StructuredDocumentation","src":"15490:477:16","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":2041,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:16","nodeType":"FunctionDefinition","parameters":{"id":2037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:16","nodeType":"VariableDeclaration","scope":2041,"src":"16003:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":2035,"nodeType":"UserDefinedTypeName","pathNode":{"id":2034,"name":"IERC4626","nameLocations":["16003:8:16"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"16003:8:16"},"referencedDeclaration":7300,"src":"16003:8:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:16"},"returnParameters":{"id":2040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2039,"mutability":"mutable","name":"asset","nameLocation":"16057:5:16","nodeType":"VariableDeclaration","scope":2041,"src":"16049:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2038,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:16"},"scope":2164,"src":"15972:92:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2042,"nodeType":"StructuredDocumentation","src":"16288:379:16","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":2052,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:16","nodeType":"FunctionDefinition","parameters":{"id":2048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2044,"mutability":"mutable","name":"pool","nameLocation":"16715:4:16","nodeType":"VariableDeclaration","scope":2052,"src":"16707:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2043,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2047,"mutability":"mutable","name":"token","nameLocation":"16728:5:16","nodeType":"VariableDeclaration","scope":2052,"src":"16721:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2046,"nodeType":"UserDefinedTypeName","pathNode":{"id":2045,"name":"IERC20","nameLocations":["16721:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"16721:6:16"},"referencedDeclaration":7403,"src":"16721:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:16"},"returnParameters":{"id":2051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2050,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:16","nodeType":"VariableDeclaration","scope":2052,"src":"16758:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2049,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:16"},"scope":2164,"src":"16672:109:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2053,"nodeType":"StructuredDocumentation","src":"16787:381:16","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":2063,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:16","nodeType":"FunctionDefinition","parameters":{"id":2059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2055,"mutability":"mutable","name":"pool","nameLocation":"17217:4:16","nodeType":"VariableDeclaration","scope":2063,"src":"17209:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2054,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2058,"mutability":"mutable","name":"token","nameLocation":"17230:5:16","nodeType":"VariableDeclaration","scope":2063,"src":"17223:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2057,"nodeType":"UserDefinedTypeName","pathNode":{"id":2056,"name":"IERC20","nameLocations":["17223:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"17223:6:16"},"referencedDeclaration":7403,"src":"17223:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:16"},"returnParameters":{"id":2062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2061,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:16","nodeType":"VariableDeclaration","scope":2063,"src":"17260:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2060,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:16"},"scope":2164,"src":"17173:111:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2064,"nodeType":"StructuredDocumentation","src":"17290:271:16","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":2071,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:16","nodeType":"FunctionDefinition","parameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2066,"mutability":"mutable","name":"pool","nameLocation":"17610:4:16","nodeType":"VariableDeclaration","scope":2071,"src":"17602:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2065,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:16"},"returnParameters":{"id":2070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2069,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:16","nodeType":"VariableDeclaration","scope":2071,"src":"17639:25:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2068,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:16"},"scope":2164,"src":"17566:100:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2072,"nodeType":"StructuredDocumentation","src":"17672:286:16","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":2080,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:16","nodeType":"FunctionDefinition","parameters":{"id":2075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2074,"mutability":"mutable","name":"pool","nameLocation":"18000:4:16","nodeType":"VariableDeclaration","scope":2080,"src":"17992:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2073,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:16"},"returnParameters":{"id":2079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2078,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:16","nodeType":"VariableDeclaration","scope":2080,"src":"18029:36:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":2077,"nodeType":"UserDefinedTypeName","pathNode":{"id":2076,"name":"PoolRoleAccounts","nameLocations":["18029:16:16"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"18029:16:16"},"referencedDeclaration":2415,"src":"18029:16:16","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:16"},"scope":2164,"src":"17963:104:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2081,"nodeType":"StructuredDocumentation","src":"18073:363:16","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":2091,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:16","nodeType":"FunctionDefinition","parameters":{"id":2087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2083,"mutability":"mutable","name":"pool","nameLocation":"18499:4:16","nodeType":"VariableDeclaration","scope":2091,"src":"18491:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2082,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2086,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:16","nodeType":"VariableDeclaration","scope":2091,"src":"18513:32:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":2085,"nodeType":"UserDefinedTypeName","pathNode":{"id":2084,"name":"PoolSwapParams","nameLocations":["18513:14:16"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"18513:14:16"},"referencedDeclaration":2510,"src":"18513:14:16","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:16"},"returnParameters":{"id":2090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:16","nodeType":"VariableDeclaration","scope":2091,"src":"18575:32:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2088,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:16"},"scope":2164,"src":"18441:168:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2092,"nodeType":"StructuredDocumentation","src":"18615:145:16","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":2098,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:16","nodeType":"FunctionDefinition","parameters":{"id":2093,"nodeType":"ParameterList","parameters":[],"src":"18798:2:16"},"returnParameters":{"id":2097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2096,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:16","nodeType":"VariableDeclaration","scope":2098,"src":"18824:44:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"},"typeName":{"id":2095,"nodeType":"UserDefinedTypeName","pathNode":{"id":2094,"name":"IProtocolFeeController","nameLocations":["18824:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":779,"src":"18824:22:16"},"referencedDeclaration":779,"src":"18824:22:16","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$779","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:16"},"scope":2164,"src":"18765:105:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2099,"nodeType":"StructuredDocumentation","src":"19098:296:16","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":2106,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:16","nodeType":"FunctionDefinition","parameters":{"id":2102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2101,"mutability":"mutable","name":"pool","nameLocation":"19437:4:16","nodeType":"VariableDeclaration","scope":2106,"src":"19429:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2100,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:16"},"returnParameters":{"id":2105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2104,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:16","nodeType":"VariableDeclaration","scope":2106,"src":"19466:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2103,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:16"},"scope":2164,"src":"19399:88:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2107,"nodeType":"StructuredDocumentation","src":"19493:679:16","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":2122,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:16","nodeType":"FunctionDefinition","parameters":{"id":2117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2109,"mutability":"mutable","name":"pool","nameLocation":"20227:4:16","nodeType":"VariableDeclaration","scope":2122,"src":"20219:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2108,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2111,"mutability":"mutable","name":"from","nameLocation":"20249:4:16","nodeType":"VariableDeclaration","scope":2122,"src":"20241:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2110,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2113,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:16","nodeType":"VariableDeclaration","scope":2122,"src":"20263:24:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2112,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2116,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:16","nodeType":"VariableDeclaration","scope":2122,"src":"20297:30:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2114,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2115,"nodeType":"ArrayTypeName","src":"20297:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:16"},"returnParameters":{"id":2121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2120,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:16","nodeType":"VariableDeclaration","scope":2122,"src":"20352:27:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2118,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2119,"nodeType":"ArrayTypeName","src":"20352:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:16"},"scope":2164,"src":"20177:204:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2123,"nodeType":"StructuredDocumentation","src":"20602:699:16","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":2130,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:16","nodeType":"FunctionDefinition","parameters":{"id":2126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2125,"mutability":"mutable","name":"data","nameLocation":"21336:4:16","nodeType":"VariableDeclaration","scope":2130,"src":"21321:19:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2124,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:16"},"returnParameters":{"id":2129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2128,"mutability":"mutable","name":"result","nameLocation":"21373:6:16","nodeType":"VariableDeclaration","scope":2130,"src":"21360:19:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2127,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:16"},"scope":2164,"src":"21306:75:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2131,"nodeType":"StructuredDocumentation","src":"21387:731:16","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":2136,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:16","nodeType":"FunctionDefinition","parameters":{"id":2134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2133,"mutability":"mutable","name":"data","nameLocation":"22162:4:16","nodeType":"VariableDeclaration","scope":2136,"src":"22147:19:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2132,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:16"},"returnParameters":{"id":2135,"nodeType":"ParameterList","parameters":[],"src":"22176:0:16"},"scope":2164,"src":"22123:54:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2137,"nodeType":"StructuredDocumentation","src":"22183:239:16","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":2142,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:16","nodeType":"FunctionDefinition","parameters":{"id":2138,"nodeType":"ParameterList","parameters":[],"src":"22451:2:16"},"returnParameters":{"id":2141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2140,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:16","nodeType":"VariableDeclaration","scope":2142,"src":"22477:18:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:16"},"scope":2164,"src":"22427:70:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2143,"nodeType":"StructuredDocumentation","src":"22503:302:16","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":2148,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:16","nodeType":"FunctionDefinition","parameters":{"id":2144,"nodeType":"ParameterList","parameters":[],"src":"22845:2:16"},"returnParameters":{"id":2147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2146,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:16","nodeType":"VariableDeclaration","scope":2148,"src":"22871:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2145,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:16"},"scope":2164,"src":"22810:92:16","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2149,"nodeType":"StructuredDocumentation","src":"22908:162:16","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":2156,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:16","nodeType":"FunctionDefinition","parameters":{"id":2154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2151,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:16","nodeType":"VariableDeclaration","scope":2156,"src":"23103:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2153,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:16","nodeType":"VariableDeclaration","scope":2156,"src":"23121:24:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2152,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:16"},"returnParameters":{"id":2155,"nodeType":"ParameterList","parameters":[],"src":"23155:0:16"},"scope":2164,"src":"23075:81:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2157,"nodeType":"StructuredDocumentation","src":"23380:284:16","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":2163,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:16","nodeType":"FunctionDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[],"src":"23691:2:16"},"returnParameters":{"id":2162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2161,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:16","nodeType":"VariableDeclaration","scope":2163,"src":"23717:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"},"typeName":{"id":2160,"nodeType":"UserDefinedTypeName","pathNode":{"id":2159,"name":"IAuthorizer","nameLocations":["23717:11:16"],"nodeType":"IdentifierPath","referencedDeclaration":115,"src":"23717:11:16"},"referencedDeclaration":115,"src":"23717:11:16","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:16"},"scope":2164,"src":"23669:72:16","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2165,"src":"767:22976:16","usedErrors":[],"usedEvents":[]}],"src":"46:23698:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AddLiquidityParams":[2561],"AfterSwapParams":[2539],"BufferWrapOrUnwrapParams":[2600],"FEE_BITLENGTH":[2603],"FEE_SCALING_FACTOR":[2606],"HookFlags":[2365],"HooksConfig":[2389],"IERC20":[7403],"IERC4626":[7300],"IRateProvider":[89],"IVaultMain":[2300],"LiquidityManagement":[2318],"MAX_FEE_PERCENTAGE":[2609],"PoolConfig":[2343],"PoolConfigBits":[2320],"PoolData":[2467],"PoolRoleAccounts":[2415],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"RemoveLiquidityParams":[2582],"Rounding":[2470],"SwapKind":[2473],"SwapState":[2399],"TokenConfig":[2432],"TokenInfo":[2442],"TokenType":[2419],"VaultState":[2407],"VaultSwapParams":[2492],"WrappingDirection":[2585]},"id":2301,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2166,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:17"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2301,"sourceUnit":7404,"src":"72:72:17","symbolAliases":[{"foreign":{"id":2167,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2169,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2301,"sourceUnit":2610,"src":"146:26:17","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":2170,"nodeType":"StructuredDocumentation","src":"174:232:17","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2300,"linearizedBaseContracts":[2300],"name":"IVaultMain","nameLocation":"417:10:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2171,"nodeType":"StructuredDocumentation","src":"656:431:17","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":2178,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:17","nodeType":"FunctionDefinition","parameters":{"id":2174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2173,"mutability":"mutable","name":"data","nameLocation":"1123:4:17","nodeType":"VariableDeclaration","scope":2178,"src":"1108:19:17","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2172,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:17"},"returnParameters":{"id":2177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2176,"mutability":"mutable","name":"result","nameLocation":"1160:6:17","nodeType":"VariableDeclaration","scope":2178,"src":"1147:19:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2175,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:17"},"scope":2300,"src":"1092:76:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2179,"nodeType":"StructuredDocumentation","src":"1174:1291:17","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":2189,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:17","nodeType":"FunctionDefinition","parameters":{"id":2185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"token","nameLocation":"2493:5:17","nodeType":"VariableDeclaration","scope":2189,"src":"2486:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2181,"nodeType":"UserDefinedTypeName","pathNode":{"id":2180,"name":"IERC20","nameLocations":["2486:6:17"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2486:6:17"},"referencedDeclaration":7403,"src":"2486:6:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:17","nodeType":"VariableDeclaration","scope":2189,"src":"2500:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2183,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:17"},"returnParameters":{"id":2188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2187,"mutability":"mutable","name":"credit","nameLocation":"2546:6:17","nodeType":"VariableDeclaration","scope":2189,"src":"2538:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2186,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:17"},"scope":2300,"src":"2470:84:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2190,"nodeType":"StructuredDocumentation","src":"2560:315:17","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2200,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:17","nodeType":"FunctionDefinition","parameters":{"id":2198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2193,"mutability":"mutable","name":"token","nameLocation":"2903:5:17","nodeType":"VariableDeclaration","scope":2200,"src":"2896:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2192,"nodeType":"UserDefinedTypeName","pathNode":{"id":2191,"name":"IERC20","nameLocations":["2896:6:17"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2896:6:17"},"referencedDeclaration":7403,"src":"2896:6:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2195,"mutability":"mutable","name":"to","nameLocation":"2918:2:17","nodeType":"VariableDeclaration","scope":2200,"src":"2910:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2194,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2197,"mutability":"mutable","name":"amount","nameLocation":"2930:6:17","nodeType":"VariableDeclaration","scope":2200,"src":"2922:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2196,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:17"},"returnParameters":{"id":2199,"nodeType":"ParameterList","parameters":[],"src":"2946:0:17"},"scope":2300,"src":"2880:67:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2201,"nodeType":"StructuredDocumentation","src":"3161:412:17","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2213,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:17","nodeType":"FunctionDefinition","parameters":{"id":2205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2204,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:17","nodeType":"VariableDeclaration","scope":2213,"src":"3601:38:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2492_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2203,"nodeType":"UserDefinedTypeName","pathNode":{"id":2202,"name":"VaultSwapParams","nameLocations":["3601:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":2492,"src":"3601:15:17"},"referencedDeclaration":2492,"src":"3601:15:17","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2492_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:17"},"returnParameters":{"id":2212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:17","nodeType":"VariableDeclaration","scope":2213,"src":"3664:27:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2206,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2209,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:17","nodeType":"VariableDeclaration","scope":2213,"src":"3693:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2208,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2211,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:17","nodeType":"VariableDeclaration","scope":2213,"src":"3714:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2210,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:17"},"scope":2300,"src":"3578:158:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2214,"nodeType":"StructuredDocumentation","src":"3954:523:17","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2227,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:17","nodeType":"FunctionDefinition","parameters":{"id":2218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2217,"mutability":"mutable","name":"params","nameLocation":"4539:6:17","nodeType":"VariableDeclaration","scope":2227,"src":"4513:32:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2561_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2216,"nodeType":"UserDefinedTypeName","pathNode":{"id":2215,"name":"AddLiquidityParams","nameLocations":["4513:18:17"],"nodeType":"IdentifierPath","referencedDeclaration":2561,"src":"4513:18:17"},"referencedDeclaration":2561,"src":"4513:18:17","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2561_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:17"},"returnParameters":{"id":2226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2221,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:17","nodeType":"VariableDeclaration","scope":2227,"src":"4570:26:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2219,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2220,"nodeType":"ArrayTypeName","src":"4570:9:17","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2223,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:17","nodeType":"VariableDeclaration","scope":2227,"src":"4598:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2222,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2225,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:17","nodeType":"VariableDeclaration","scope":2227,"src":"4620:23:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2224,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:17"},"scope":2300,"src":"4482:163:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2228,"nodeType":"StructuredDocumentation","src":"4864:644:17","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2241,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:17","nodeType":"FunctionDefinition","parameters":{"id":2232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2231,"mutability":"mutable","name":"params","nameLocation":"5576:6:17","nodeType":"VariableDeclaration","scope":2241,"src":"5547:35:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2582_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2230,"nodeType":"UserDefinedTypeName","pathNode":{"id":2229,"name":"RemoveLiquidityParams","nameLocations":["5547:21:17"],"nodeType":"IdentifierPath","referencedDeclaration":2582,"src":"5547:21:17"},"referencedDeclaration":2582,"src":"5547:21:17","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2582_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:17"},"returnParameters":{"id":2240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2234,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:17","nodeType":"VariableDeclaration","scope":2241,"src":"5607:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2233,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2237,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:17","nodeType":"VariableDeclaration","scope":2241,"src":"5628:27:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2235,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2236,"nodeType":"ArrayTypeName","src":"5628:9:17","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2239,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:17","nodeType":"VariableDeclaration","scope":2241,"src":"5657:23:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2238,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:17","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:17"},"scope":2300,"src":"5513:169:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2242,"nodeType":"StructuredDocumentation","src":"5912:385:17","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2254,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:17","nodeType":"FunctionDefinition","parameters":{"id":2248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2244,"mutability":"mutable","name":"pool","nameLocation":"6361:4:17","nodeType":"VariableDeclaration","scope":2254,"src":"6353:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2243,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2247,"mutability":"mutable","name":"token","nameLocation":"6382:5:17","nodeType":"VariableDeclaration","scope":2254,"src":"6375:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2246,"nodeType":"UserDefinedTypeName","pathNode":{"id":2245,"name":"IERC20","nameLocations":["6375:6:17"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"6375:6:17"},"referencedDeclaration":7403,"src":"6375:6:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:17"},"returnParameters":{"id":2253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2250,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:17","nodeType":"VariableDeclaration","scope":2254,"src":"6417:18:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2249,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"index","nameLocation":"6445:5:17","nodeType":"VariableDeclaration","scope":2254,"src":"6437:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2251,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:17"},"scope":2300,"src":"6302:150:17","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2255,"nodeType":"StructuredDocumentation","src":"6683:460:17","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2266,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:17","nodeType":"FunctionDefinition","parameters":{"id":2262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2257,"mutability":"mutable","name":"owner","nameLocation":"7174:5:17","nodeType":"VariableDeclaration","scope":2266,"src":"7166:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2256,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"to","nameLocation":"7189:2:17","nodeType":"VariableDeclaration","scope":2266,"src":"7181:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2258,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2261,"mutability":"mutable","name":"amount","nameLocation":"7201:6:17","nodeType":"VariableDeclaration","scope":2266,"src":"7193:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2260,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:17"},"returnParameters":{"id":2265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2266,"src":"7227:4:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2263,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:17"},"scope":2300,"src":"7148:85:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2267,"nodeType":"StructuredDocumentation","src":"7239:544:17","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2280,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:17","nodeType":"FunctionDefinition","parameters":{"id":2276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2269,"mutability":"mutable","name":"spender","nameLocation":"7818:7:17","nodeType":"VariableDeclaration","scope":2280,"src":"7810:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2268,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2271,"mutability":"mutable","name":"from","nameLocation":"7835:4:17","nodeType":"VariableDeclaration","scope":2280,"src":"7827:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2270,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2273,"mutability":"mutable","name":"to","nameLocation":"7849:2:17","nodeType":"VariableDeclaration","scope":2280,"src":"7841:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2272,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2275,"mutability":"mutable","name":"amount","nameLocation":"7861:6:17","nodeType":"VariableDeclaration","scope":2280,"src":"7853:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2274,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:17"},"returnParameters":{"id":2279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2278,"mutability":"mutable","name":"success","nameLocation":"7892:7:17","nodeType":"VariableDeclaration","scope":2280,"src":"7887:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2277,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:17"},"scope":2300,"src":"7788:113:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2281,"nodeType":"StructuredDocumentation","src":"8128:575:17","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2293,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:17","nodeType":"FunctionDefinition","parameters":{"id":2285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2284,"mutability":"mutable","name":"params","nameLocation":"8784:6:17","nodeType":"VariableDeclaration","scope":2293,"src":"8752:38:17","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2600_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2283,"nodeType":"UserDefinedTypeName","pathNode":{"id":2282,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:17"],"nodeType":"IdentifierPath","referencedDeclaration":2600,"src":"8752:24:17"},"referencedDeclaration":2600,"src":"8752:24:17","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2600_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:17"},"returnParameters":{"id":2292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2287,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:17","nodeType":"VariableDeclaration","scope":2293,"src":"8815:27:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2286,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:17","nodeType":"VariableDeclaration","scope":2293,"src":"8844:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:17","nodeType":"VariableDeclaration","scope":2293,"src":"8865:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2290,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:17"},"scope":2300,"src":"8708:179:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2294,"nodeType":"StructuredDocumentation","src":"9115:345:17","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2299,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:17","nodeType":"FunctionDefinition","parameters":{"id":2295,"nodeType":"ParameterList","parameters":[],"src":"9491:2:17"},"returnParameters":{"id":2298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2297,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:17","nodeType":"VariableDeclaration","scope":2299,"src":"9517:22:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2296,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:17"},"scope":2300,"src":"9465:76:17","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2301,"src":"407:9136:17","usedErrors":[],"usedEvents":[]}],"src":"46:9498:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AddLiquidityParams":[2561],"AfterSwapParams":[2539],"BufferWrapOrUnwrapParams":[2600],"FEE_BITLENGTH":[2603],"FEE_SCALING_FACTOR":[2606],"HookFlags":[2365],"HooksConfig":[2389],"IERC20":[7403],"IERC4626":[7300],"IRateProvider":[89],"LiquidityManagement":[2318],"MAX_FEE_PERCENTAGE":[2609],"PoolConfig":[2343],"PoolConfigBits":[2320],"PoolData":[2467],"PoolRoleAccounts":[2415],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"RemoveLiquidityParams":[2582],"Rounding":[2470],"SwapKind":[2473],"SwapState":[2399],"TokenConfig":[2432],"TokenInfo":[2442],"TokenType":[2419],"VaultState":[2407],"VaultSwapParams":[2492],"WrappingDirection":[2585]},"id":2610,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2302,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2304,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":7404,"src":"72:72:18","symbolAliases":[{"foreign":{"id":2303,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2306,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":7301,"src":"145:75:18","symbolAliases":[{"foreign":{"id":2305,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7300,"src":"154:8:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2308,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2610,"sourceUnit":90,"src":"222:76:18","symbolAliases":[{"foreign":{"id":2307,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89,"src":"231:13:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2309,"nodeType":"StructuredDocumentation","src":"300:472:18","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2318,"members":[{"constant":false,"id":2311,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:18","nodeType":"VariableDeclaration","scope":2318,"src":"806:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2310,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2313,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:18","nodeType":"VariableDeclaration","scope":2318,"src":"843:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2312,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2315,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:18","nodeType":"VariableDeclaration","scope":2318,"src":"878:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2314,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2317,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:18","nodeType":"VariableDeclaration","scope":2318,"src":"916:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2316,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:18","nodeType":"StructDefinition","scope":2610,"src":"773:165:18","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2320,"name":"PoolConfigBits","nameLocation":"1015:14:18","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:18","underlyingType":{"id":2319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2321,"nodeType":"StructuredDocumentation","src":"1043:1034:18","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2343,"members":[{"constant":false,"id":2324,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:18","nodeType":"VariableDeclaration","scope":2343,"src":"2102:39:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2323,"nodeType":"UserDefinedTypeName","pathNode":{"id":2322,"name":"LiquidityManagement","nameLocations":["2102:19:18"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"2102:19:18"},"referencedDeclaration":2318,"src":"2102:19:18","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:18","nodeType":"VariableDeclaration","scope":2343,"src":"2147:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:18","nodeType":"VariableDeclaration","scope":2343,"src":"2184:34:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2327,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:18","nodeType":"VariableDeclaration","scope":2343,"src":"2224:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2329,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:18","nodeType":"VariableDeclaration","scope":2343,"src":"2265:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2331,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:18","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:18","nodeType":"VariableDeclaration","scope":2343,"src":"2295:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2333,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:18","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:18","nodeType":"VariableDeclaration","scope":2343,"src":"2326:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2335,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:18","nodeType":"VariableDeclaration","scope":2343,"src":"2353:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2337,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:18","nodeType":"VariableDeclaration","scope":2343,"src":"2381:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2339,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2342,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:18","nodeType":"VariableDeclaration","scope":2343,"src":"2404:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2341,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:18","nodeType":"StructDefinition","scope":2610,"src":"2078:354:18","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2344,"nodeType":"StructuredDocumentation","src":"2434:352:18","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2365,"members":[{"constant":false,"id":2346,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:18","nodeType":"VariableDeclaration","scope":2365,"src":"2810:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2345,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2348,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:18","nodeType":"VariableDeclaration","scope":2365,"src":"2846:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2347,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2350,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:18","nodeType":"VariableDeclaration","scope":2365,"src":"2883:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2349,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:18","nodeType":"VariableDeclaration","scope":2365,"src":"2919:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2351,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2354,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:18","nodeType":"VariableDeclaration","scope":2365,"src":"2961:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2353,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2356,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:18","nodeType":"VariableDeclaration","scope":2365,"src":"2992:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2355,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2358,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:18","nodeType":"VariableDeclaration","scope":2365,"src":"3022:33:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2357,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:18","nodeType":"VariableDeclaration","scope":2365,"src":"3061:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2359,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:18","nodeType":"VariableDeclaration","scope":2365,"src":"3099:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2361,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2364,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:18","nodeType":"VariableDeclaration","scope":2365,"src":"3141:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2363,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:18","nodeType":"StructDefinition","scope":2610,"src":"2787:392:18","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2366,"nodeType":"StructuredDocumentation","src":"3181:101:18","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2389,"members":[{"constant":false,"id":2368,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:18","nodeType":"VariableDeclaration","scope":2389,"src":"3307:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2367,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2370,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:18","nodeType":"VariableDeclaration","scope":2389,"src":"3343:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2369,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2372,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:18","nodeType":"VariableDeclaration","scope":2389,"src":"3380:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2371,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:18","nodeType":"VariableDeclaration","scope":2389,"src":"3416:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2373,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2376,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:18","nodeType":"VariableDeclaration","scope":2389,"src":"3458:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2375,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:18","nodeType":"VariableDeclaration","scope":2389,"src":"3489:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2377,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2380,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:18","nodeType":"VariableDeclaration","scope":2389,"src":"3519:33:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2379,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2382,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:18","nodeType":"VariableDeclaration","scope":2389,"src":"3558:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2381,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2384,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:18","nodeType":"VariableDeclaration","scope":2389,"src":"3596:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2383,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2386,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:18","nodeType":"VariableDeclaration","scope":2389,"src":"3638:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2385,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2388,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:18","nodeType":"VariableDeclaration","scope":2389,"src":"3679:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2387,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:18","nodeType":"StructDefinition","scope":2610,"src":"3282:421:18","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2390,"nodeType":"StructuredDocumentation","src":"3705:364:18","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2399,"members":[{"constant":false,"id":2392,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:18","nodeType":"VariableDeclaration","scope":2399,"src":"4093:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2391,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:18","nodeType":"VariableDeclaration","scope":2399,"src":"4114:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2393,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2396,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:18","nodeType":"VariableDeclaration","scope":2399,"src":"4136:27:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2395,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2398,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:18","nodeType":"VariableDeclaration","scope":2399,"src":"4169:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2397,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:18","nodeType":"StructDefinition","scope":2610,"src":"4070:127:18","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2400,"nodeType":"StructuredDocumentation","src":"4199:381:18","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2407,"members":[{"constant":false,"id":2402,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:18","nodeType":"VariableDeclaration","scope":2407,"src":"4605:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2401,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2404,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:18","nodeType":"VariableDeclaration","scope":2407,"src":"4631:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2403,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2406,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:18","nodeType":"VariableDeclaration","scope":2407,"src":"4655:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2405,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:18","nodeType":"StructDefinition","scope":2610,"src":"4581:98:18","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2408,"nodeType":"StructuredDocumentation","src":"4681:461:18","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2415,"members":[{"constant":false,"id":2410,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:18","nodeType":"VariableDeclaration","scope":2415,"src":"5173:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2409,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2412,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:18","nodeType":"VariableDeclaration","scope":2415,"src":"5199:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2411,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2414,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:18","nodeType":"VariableDeclaration","scope":2415,"src":"5227:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2413,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:18","nodeType":"StructDefinition","scope":2610,"src":"5143:106:18","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"9245:1024:18","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2419,"members":[{"id":2417,"name":"STANDARD","nameLocation":"10291:8:18","nodeType":"EnumValue","src":"10291:8:18"},{"id":2418,"name":"WITH_RATE","nameLocation":"10305:9:18","nodeType":"EnumValue","src":"10305:9:18"}],"name":"TokenType","nameLocation":"10275:9:18","nodeType":"EnumDefinition","src":"10270:46:18"},{"canonicalName":"TokenConfig","documentation":{"id":2420,"nodeType":"StructuredDocumentation","src":"10318:915:18","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2432,"members":[{"constant":false,"id":2423,"mutability":"mutable","name":"token","nameLocation":"11266:5:18","nodeType":"VariableDeclaration","scope":2432,"src":"11259:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2422,"nodeType":"UserDefinedTypeName","pathNode":{"id":2421,"name":"IERC20","nameLocations":["11259:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"11259:6:18"},"referencedDeclaration":7403,"src":"11259:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2426,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:18","nodeType":"VariableDeclaration","scope":2432,"src":"11277:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"},"typeName":{"id":2425,"nodeType":"UserDefinedTypeName","pathNode":{"id":2424,"name":"TokenType","nameLocations":["11277:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":2419,"src":"11277:9:18"},"referencedDeclaration":2419,"src":"11277:9:18","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2429,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:18","nodeType":"VariableDeclaration","scope":2432,"src":"11302:26:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$89","typeString":"contract IRateProvider"},"typeName":{"id":2428,"nodeType":"UserDefinedTypeName","pathNode":{"id":2427,"name":"IRateProvider","nameLocations":["11302:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":89,"src":"11302:13:18"},"referencedDeclaration":89,"src":"11302:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$89","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2431,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:18","nodeType":"VariableDeclaration","scope":2432,"src":"11334:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2430,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:18","nodeType":"StructDefinition","scope":2610,"src":"11234:121:18","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2433,"nodeType":"StructuredDocumentation","src":"11357:592:18","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2442,"members":[{"constant":false,"id":2436,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:18","nodeType":"VariableDeclaration","scope":2442,"src":"11973:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"},"typeName":{"id":2435,"nodeType":"UserDefinedTypeName","pathNode":{"id":2434,"name":"TokenType","nameLocations":["11973:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":2419,"src":"11973:9:18"},"referencedDeclaration":2419,"src":"11973:9:18","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2439,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:18","nodeType":"VariableDeclaration","scope":2442,"src":"11998:26:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$89","typeString":"contract IRateProvider"},"typeName":{"id":2438,"nodeType":"UserDefinedTypeName","pathNode":{"id":2437,"name":"IRateProvider","nameLocations":["11998:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":89,"src":"11998:13:18"},"referencedDeclaration":89,"src":"11998:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$89","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2441,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:18","nodeType":"VariableDeclaration","scope":2442,"src":"12030:18:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2440,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:18","nodeType":"StructDefinition","scope":2610,"src":"11950:101:18","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2443,"nodeType":"StructuredDocumentation","src":"12053:761:18","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2467,"members":[{"constant":false,"id":2446,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:18","nodeType":"VariableDeclaration","scope":2467,"src":"12837:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2320","typeString":"PoolConfigBits"},"typeName":{"id":2445,"nodeType":"UserDefinedTypeName","pathNode":{"id":2444,"name":"PoolConfigBits","nameLocations":["12837:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":2320,"src":"12837:14:18"},"referencedDeclaration":2320,"src":"12837:14:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2320","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2450,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:18","nodeType":"VariableDeclaration","scope":2467,"src":"12872:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2448,"nodeType":"UserDefinedTypeName","pathNode":{"id":2447,"name":"IERC20","nameLocations":["12872:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"12872:6:18"},"referencedDeclaration":7403,"src":"12872:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":2449,"nodeType":"ArrayTypeName","src":"12872:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2454,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:18","nodeType":"VariableDeclaration","scope":2467,"src":"12893:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2452,"nodeType":"UserDefinedTypeName","pathNode":{"id":2451,"name":"TokenInfo","nameLocations":["12893:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"12893:9:18"},"referencedDeclaration":2442,"src":"12893:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"id":2453,"nodeType":"ArrayTypeName","src":"12893:11:18","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2457,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:18","nodeType":"VariableDeclaration","scope":2467,"src":"12920:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2455,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2456,"nodeType":"ArrayTypeName","src":"12920:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2460,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:18","nodeType":"VariableDeclaration","scope":2467,"src":"12947:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2458,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2459,"nodeType":"ArrayTypeName","src":"12947:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2463,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:18","nodeType":"VariableDeclaration","scope":2467,"src":"12983:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2461,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2462,"nodeType":"ArrayTypeName","src":"12983:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2466,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:18","nodeType":"VariableDeclaration","scope":2467,"src":"13009:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2464,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2465,"nodeType":"ArrayTypeName","src":"13009:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:18","nodeType":"StructDefinition","scope":2610,"src":"12815:228:18","visibility":"public"},{"canonicalName":"Rounding","id":2470,"members":[{"id":2468,"name":"ROUND_UP","nameLocation":"13065:8:18","nodeType":"EnumValue","src":"13065:8:18"},{"id":2469,"name":"ROUND_DOWN","nameLocation":"13079:10:18","nodeType":"EnumValue","src":"13079:10:18"}],"name":"Rounding","nameLocation":"13050:8:18","nodeType":"EnumDefinition","src":"13045:46:18"},{"canonicalName":"SwapKind","id":2473,"members":[{"id":2471,"name":"EXACT_IN","nameLocation":"13318:8:18","nodeType":"EnumValue","src":"13318:8:18"},{"id":2472,"name":"EXACT_OUT","nameLocation":"13332:9:18","nodeType":"EnumValue","src":"13332:9:18"}],"name":"SwapKind","nameLocation":"13303:8:18","nodeType":"EnumDefinition","src":"13298:45:18"},{"canonicalName":"VaultSwapParams","documentation":{"id":2474,"nodeType":"StructuredDocumentation","src":"14089:558:18","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2492,"members":[{"constant":false,"id":2477,"mutability":"mutable","name":"kind","nameLocation":"14686:4:18","nodeType":"VariableDeclaration","scope":2492,"src":"14677:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"},"typeName":{"id":2476,"nodeType":"UserDefinedTypeName","pathNode":{"id":2475,"name":"SwapKind","nameLocations":["14677:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":2473,"src":"14677:8:18"},"referencedDeclaration":2473,"src":"14677:8:18","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2479,"mutability":"mutable","name":"pool","nameLocation":"14704:4:18","nodeType":"VariableDeclaration","scope":2492,"src":"14696:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2482,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:18","nodeType":"VariableDeclaration","scope":2492,"src":"14714:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2481,"nodeType":"UserDefinedTypeName","pathNode":{"id":2480,"name":"IERC20","nameLocations":["14714:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"14714:6:18"},"referencedDeclaration":7403,"src":"14714:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:18","nodeType":"VariableDeclaration","scope":2492,"src":"14734:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2484,"nodeType":"UserDefinedTypeName","pathNode":{"id":2483,"name":"IERC20","nameLocations":["14734:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"14734:6:18"},"referencedDeclaration":7403,"src":"14734:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2487,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:18","nodeType":"VariableDeclaration","scope":2492,"src":"14755:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2486,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2489,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:18","nodeType":"VariableDeclaration","scope":2492,"src":"14783:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2488,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2491,"mutability":"mutable","name":"userData","nameLocation":"14811:8:18","nodeType":"VariableDeclaration","scope":2492,"src":"14805:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2490,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:18","nodeType":"StructDefinition","scope":2610,"src":"14648:174:18","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2493,"nodeType":"StructuredDocumentation","src":"14824:530:18","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2510,"members":[{"constant":false,"id":2496,"mutability":"mutable","name":"kind","nameLocation":"15392:4:18","nodeType":"VariableDeclaration","scope":2510,"src":"15383:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"},"typeName":{"id":2495,"nodeType":"UserDefinedTypeName","pathNode":{"id":2494,"name":"SwapKind","nameLocations":["15383:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":2473,"src":"15383:8:18"},"referencedDeclaration":2473,"src":"15383:8:18","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2498,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:18","nodeType":"VariableDeclaration","scope":2510,"src":"15402:27:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2497,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:18","nodeType":"VariableDeclaration","scope":2510,"src":"15435:26:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2499,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2500,"nodeType":"ArrayTypeName","src":"15435:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2503,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:18","nodeType":"VariableDeclaration","scope":2510,"src":"15467:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2502,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2505,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:18","nodeType":"VariableDeclaration","scope":2510,"src":"15488:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2504,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2507,"mutability":"mutable","name":"router","nameLocation":"15518:6:18","nodeType":"VariableDeclaration","scope":2510,"src":"15510:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2506,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2509,"mutability":"mutable","name":"userData","nameLocation":"15536:8:18","nodeType":"VariableDeclaration","scope":2510,"src":"15530:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2508,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:18","nodeType":"StructDefinition","scope":2610,"src":"15355:192:18","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2511,"nodeType":"StructuredDocumentation","src":"15549:813:18","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2539,"members":[{"constant":false,"id":2514,"mutability":"mutable","name":"kind","nameLocation":"16401:4:18","nodeType":"VariableDeclaration","scope":2539,"src":"16392:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"},"typeName":{"id":2513,"nodeType":"UserDefinedTypeName","pathNode":{"id":2512,"name":"SwapKind","nameLocations":["16392:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":2473,"src":"16392:8:18"},"referencedDeclaration":2473,"src":"16392:8:18","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2517,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:18","nodeType":"VariableDeclaration","scope":2539,"src":"16411:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2516,"nodeType":"UserDefinedTypeName","pathNode":{"id":2515,"name":"IERC20","nameLocations":["16411:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"16411:6:18"},"referencedDeclaration":7403,"src":"16411:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2520,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:18","nodeType":"VariableDeclaration","scope":2539,"src":"16431:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":2519,"nodeType":"UserDefinedTypeName","pathNode":{"id":2518,"name":"IERC20","nameLocations":["16431:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"16431:6:18"},"referencedDeclaration":7403,"src":"16431:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2522,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:18","nodeType":"VariableDeclaration","scope":2539,"src":"16452:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2524,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:18","nodeType":"VariableDeclaration","scope":2539,"src":"16482:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2523,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2526,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:18","nodeType":"VariableDeclaration","scope":2539,"src":"16513:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2525,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2528,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:18","nodeType":"VariableDeclaration","scope":2539,"src":"16549:31:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2527,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2530,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:18","nodeType":"VariableDeclaration","scope":2539,"src":"16586:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2529,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2532,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:18","nodeType":"VariableDeclaration","scope":2539,"src":"16624:27:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2531,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2534,"mutability":"mutable","name":"router","nameLocation":"16665:6:18","nodeType":"VariableDeclaration","scope":2539,"src":"16657:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2533,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2536,"mutability":"mutable","name":"pool","nameLocation":"16685:4:18","nodeType":"VariableDeclaration","scope":2539,"src":"16677:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2535,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2538,"mutability":"mutable","name":"userData","nameLocation":"16701:8:18","nodeType":"VariableDeclaration","scope":2539,"src":"16695:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2537,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:18","nodeType":"StructDefinition","scope":2610,"src":"16363:349:18","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2545,"members":[{"id":2540,"name":"PROPORTIONAL","nameLocation":"16951:12:18","nodeType":"EnumValue","src":"16951:12:18"},{"id":2541,"name":"UNBALANCED","nameLocation":"16969:10:18","nodeType":"EnumValue","src":"16969:10:18"},{"id":2542,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:18","nodeType":"EnumValue","src":"16985:22:18"},{"id":2543,"name":"DONATION","nameLocation":"17013:8:18","nodeType":"EnumValue","src":"17013:8:18"},{"id":2544,"name":"CUSTOM","nameLocation":"17027:6:18","nodeType":"EnumValue","src":"17027:6:18"}],"name":"AddLiquidityKind","nameLocation":"16928:16:18","nodeType":"EnumDefinition","src":"16923:112:18"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2546,"nodeType":"StructuredDocumentation","src":"17037:320:18","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2561,"members":[{"constant":false,"id":2548,"mutability":"mutable","name":"pool","nameLocation":"17398:4:18","nodeType":"VariableDeclaration","scope":2561,"src":"17390:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2547,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2550,"mutability":"mutable","name":"to","nameLocation":"17416:2:18","nodeType":"VariableDeclaration","scope":2561,"src":"17408:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2549,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2553,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:18","nodeType":"VariableDeclaration","scope":2561,"src":"17424:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2551,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2552,"nodeType":"ArrayTypeName","src":"17424:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2555,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:18","nodeType":"VariableDeclaration","scope":2561,"src":"17452:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2554,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2558,"mutability":"mutable","name":"kind","nameLocation":"17498:4:18","nodeType":"VariableDeclaration","scope":2561,"src":"17481:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":2557,"nodeType":"UserDefinedTypeName","pathNode":{"id":2556,"name":"AddLiquidityKind","nameLocations":["17481:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"17481:16:18"},"referencedDeclaration":2545,"src":"17481:16:18","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2560,"mutability":"mutable","name":"userData","nameLocation":"17514:8:18","nodeType":"VariableDeclaration","scope":2561,"src":"17508:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2559,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:18","nodeType":"StructDefinition","scope":2610,"src":"17358:167:18","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2566,"members":[{"id":2562,"name":"PROPORTIONAL","nameLocation":"17770:12:18","nodeType":"EnumValue","src":"17770:12:18"},{"id":2563,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:18","nodeType":"EnumValue","src":"17788:21:18"},{"id":2564,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:18","nodeType":"EnumValue","src":"17815:22:18"},{"id":2565,"name":"CUSTOM","nameLocation":"17843:6:18","nodeType":"EnumValue","src":"17843:6:18"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:18","nodeType":"EnumDefinition","src":"17739:112:18"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2567,"nodeType":"StructuredDocumentation","src":"17853:330:18","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2582,"members":[{"constant":false,"id":2569,"mutability":"mutable","name":"pool","nameLocation":"18227:4:18","nodeType":"VariableDeclaration","scope":2582,"src":"18219:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2568,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2571,"mutability":"mutable","name":"from","nameLocation":"18245:4:18","nodeType":"VariableDeclaration","scope":2582,"src":"18237:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2570,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2573,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:18","nodeType":"VariableDeclaration","scope":2582,"src":"18255:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2572,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2576,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:18","nodeType":"VariableDeclaration","scope":2582,"src":"18283:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2574,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2575,"nodeType":"ArrayTypeName","src":"18283:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2579,"mutability":"mutable","name":"kind","nameLocation":"18332:4:18","nodeType":"VariableDeclaration","scope":2582,"src":"18312:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2578,"nodeType":"UserDefinedTypeName","pathNode":{"id":2577,"name":"RemoveLiquidityKind","nameLocations":["18312:19:18"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"18312:19:18"},"referencedDeclaration":2566,"src":"18312:19:18","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2581,"mutability":"mutable","name":"userData","nameLocation":"18348:8:18","nodeType":"VariableDeclaration","scope":2582,"src":"18342:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2580,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:18","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:18","nodeType":"StructDefinition","scope":2610,"src":"18184:175:18","visibility":"public"},{"canonicalName":"WrappingDirection","id":2585,"members":[{"id":2583,"name":"WRAP","nameLocation":"18602:4:18","nodeType":"EnumValue","src":"18602:4:18"},{"id":2584,"name":"UNWRAP","nameLocation":"18612:6:18","nodeType":"EnumValue","src":"18612:6:18"}],"name":"WrappingDirection","nameLocation":"18578:17:18","nodeType":"EnumDefinition","src":"18573:47:18"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2586,"nodeType":"StructuredDocumentation","src":"18622:499:18","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2600,"members":[{"constant":false,"id":2589,"mutability":"mutable","name":"kind","nameLocation":"19169:4:18","nodeType":"VariableDeclaration","scope":2600,"src":"19160:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"},"typeName":{"id":2588,"nodeType":"UserDefinedTypeName","pathNode":{"id":2587,"name":"SwapKind","nameLocations":["19160:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":2473,"src":"19160:8:18"},"referencedDeclaration":2473,"src":"19160:8:18","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2592,"mutability":"mutable","name":"direction","nameLocation":"19197:9:18","nodeType":"VariableDeclaration","scope":2600,"src":"19179:27:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2585","typeString":"enum WrappingDirection"},"typeName":{"id":2591,"nodeType":"UserDefinedTypeName","pathNode":{"id":2590,"name":"WrappingDirection","nameLocations":["19179:17:18"],"nodeType":"IdentifierPath","referencedDeclaration":2585,"src":"19179:17:18"},"referencedDeclaration":2585,"src":"19179:17:18","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2585","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2595,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:18","nodeType":"VariableDeclaration","scope":2600,"src":"19212:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"},"typeName":{"id":2594,"nodeType":"UserDefinedTypeName","pathNode":{"id":2593,"name":"IERC4626","nameLocations":["19212:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":7300,"src":"19212:8:18"},"referencedDeclaration":7300,"src":"19212:8:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$7300","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2597,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:18","nodeType":"VariableDeclaration","scope":2600,"src":"19239:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2596,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2599,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:18","nodeType":"VariableDeclaration","scope":2600,"src":"19267:16:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2598,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:18","nodeType":"StructDefinition","scope":2610,"src":"19122:164:18","visibility":"public"},{"constant":true,"id":2603,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:18","nodeType":"VariableDeclaration","scope":2610,"src":"19594:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2601,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:18","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2606,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:18","nodeType":"VariableDeclaration","scope":2610,"src":"19631:42:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2604,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:18","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2609,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:18","nodeType":"VariableDeclaration","scope":2610,"src":"19879:48:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2607,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2608,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:18","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:18"},"id":18},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","exportedSymbols":{"BasePoolAuthentication":[2645],"CommonAuthentication":[7022],"IVault":[849]},"id":2646,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2611,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":2613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2646,"sourceUnit":850,"src":"72:81:19","symbolAliases":[{"foreign":{"id":2612,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"81:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","id":2615,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2646,"sourceUnit":7023,"src":"155:98:19","symbolAliases":[{"foreign":{"id":2614,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7022,"src":"164:20:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2617,"name":"CommonAuthentication","nameLocations":["388:20:19"],"nodeType":"IdentifierPath","referencedDeclaration":7022,"src":"388:20:19"},"id":2618,"nodeType":"InheritanceSpecifier","src":"388:20:19"}],"canonicalName":"BasePoolAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2616,"nodeType":"StructuredDocumentation","src":"255:89:19","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":2645,"linearizedBaseContracts":[2645,7022,3400,69],"name":"BasePoolAuthentication","nameLocation":"362:22:19","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2621,"mutability":"immutable","name":"_vault","nameLocation":"440:6:19","nodeType":"VariableDeclaration","scope":2645,"src":"415:31:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":2620,"nodeType":"UserDefinedTypeName","pathNode":{"id":2619,"name":"IVault","nameLocations":["415:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"415:6:19"},"referencedDeclaration":849,"src":"415:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":2643,"nodeType":"Block","src":"776:64:19","statements":[]},"documentation":{"id":2622,"nodeType":"StructuredDocumentation","src":"453:211:19","text":" @dev Pools should use the pool factory as the disambiguator passed into the base Authentication contract.\n Otherwise, permissions would conflict if different pools reused function names."},"id":2644,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2630,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2625,"src":"733:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"id":2637,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2627,"src":"764:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"756:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":2635,"name":"uint160","nodeType":"ElementaryTypeName","src":"756:7:19","typeDescriptions":{}}},"id":2638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:16:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2634,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"748:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2633,"name":"uint256","nodeType":"ElementaryTypeName","src":"748:7:19","typeDescriptions":{}}},"id":2639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"748:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"740:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2631,"name":"bytes32","nodeType":"ElementaryTypeName","src":"740:7:19","typeDescriptions":{}}},"id":2640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"740:34:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2641,"kind":"baseConstructorSpecifier","modifierName":{"id":2629,"name":"CommonAuthentication","nameLocations":["712:20:19"],"nodeType":"IdentifierPath","referencedDeclaration":7022,"src":"712:20:19"},"nodeType":"ModifierInvocation","src":"712:63:19"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2625,"mutability":"mutable","name":"vault","nameLocation":"688:5:19","nodeType":"VariableDeclaration","scope":2644,"src":"681:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":2624,"nodeType":"UserDefinedTypeName","pathNode":{"id":2623,"name":"IVault","nameLocations":["681:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"681:6:19"},"referencedDeclaration":849,"src":"681:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":2627,"mutability":"mutable","name":"factory","nameLocation":"703:7:19","nodeType":"VariableDeclaration","scope":2644,"src":"695:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2626,"name":"address","nodeType":"ElementaryTypeName","src":"695:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"680:31:19"},"returnParameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"776:0:19"},"scope":2645,"src":"669:171:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":2646,"src":"344:498:19","usedErrors":[60,6842],"usedEvents":[]}],"src":"46:797:19"},"id":19},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","exportedSymbols":{"BasePoolFactory":[2995],"BaseSplitCodeFactory":[3606],"FactoryWidePauseWindow":[3764],"IBasePoolFactory":[239],"IVault":[849],"LiquidityManagement":[2318],"PoolRoleAccounts":[2415],"SingletonAuthentication":[7081],"TokenConfig":[2432]},"id":2996,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2647,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":2649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":240,"src":"72:101:20","symbolAliases":[{"foreign":{"id":2648,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":239,"src":"81:16:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":2651,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":850,"src":"174:81:20","symbolAliases":[{"foreign":{"id":2650,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"183:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":2655,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":2610,"src":"256:141:20","symbolAliases":[{"foreign":{"id":2652,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"269:11:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2653,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"286:16:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2654,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2318,"src":"308:19:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol","id":2657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":3607,"src":"399:115:20","symbolAliases":[{"foreign":{"id":2656,"name":"BaseSplitCodeFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3606,"src":"408:20:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","id":2659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":3765,"src":"515:119:20","symbolAliases":[{"foreign":{"id":2658,"name":"FactoryWidePauseWindow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3764,"src":"524:22:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":2661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2996,"sourceUnit":7082,"src":"635:104:20","symbolAliases":[{"foreign":{"id":2660,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7081,"src":"644:23:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2663,"name":"IBasePoolFactory","nameLocations":["2947:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":239,"src":"2947:16:20"},"id":2664,"nodeType":"InheritanceSpecifier","src":"2947:16:20"},{"baseName":{"id":2665,"name":"BaseSplitCodeFactory","nameLocations":["2969:20:20"],"nodeType":"IdentifierPath","referencedDeclaration":3606,"src":"2969:20:20"},"id":2666,"nodeType":"InheritanceSpecifier","src":"2969:20:20"},{"baseName":{"id":2667,"name":"SingletonAuthentication","nameLocations":["2995:23:20"],"nodeType":"IdentifierPath","referencedDeclaration":7081,"src":"2995:23:20"},"id":2668,"nodeType":"InheritanceSpecifier","src":"2995:23:20"},{"baseName":{"id":2669,"name":"FactoryWidePauseWindow","nameLocations":["3024:22:20"],"nodeType":"IdentifierPath","referencedDeclaration":3764,"src":"3024:22:20"},"id":2670,"nodeType":"InheritanceSpecifier","src":"3024:22:20"}],"canonicalName":"BasePoolFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":2662,"nodeType":"StructuredDocumentation","src":"741:2164:20","text":" @notice Base contract for Pool factories.\n Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have\n arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts\n created by the factory) is very powerful.\n Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook\n contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty\n factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token\n count and weights are fixed).\n Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n prevent the creation of any future pools from the factory.\n Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault\n could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious\n parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by\n deploying and registering in a single `create` function.\n It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended\n initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not\n initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the\n deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious\n consequences, beyond being a DoS.\n Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning,\n the best practice would be to create (i.e., deploy and register) and initialize in the same transaction."},"fullyImplemented":true,"id":2995,"linearizedBaseContracts":[2995,3764,7081,7022,3400,3606,239,69],"name":"BasePoolFactory","nameLocation":"2924:15:20","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2674,"mutability":"mutable","name":"_isPoolFromFactory","nameLocation":"3105:18:20","nodeType":"VariableDeclaration","scope":2995,"src":"3053:70:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":2673,"keyName":"pool","keyNameLocation":"3069:4:20","keyType":{"id":2671,"name":"address","nodeType":"ElementaryTypeName","src":"3061:7:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"3053:43:20","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isFromFactory","valueNameLocation":"3082:13:20","valueType":{"id":2672,"name":"bool","nodeType":"ElementaryTypeName","src":"3077:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"constant":false,"id":2677,"mutability":"mutable","name":"_pools","nameLocation":"3147:6:20","nodeType":"VariableDeclaration","scope":2995,"src":"3129:24:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":2675,"name":"address","nodeType":"ElementaryTypeName","src":"3129:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2676,"nodeType":"ArrayTypeName","src":"3129:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":2679,"mutability":"mutable","name":"_disabled","nameLocation":"3173:9:20","nodeType":"VariableDeclaration","scope":2995,"src":"3160:22:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2678,"name":"bool","nodeType":"ElementaryTypeName","src":"3160:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"documentation":{"id":2680,"nodeType":"StructuredDocumentation","src":"3189:83:20","text":"@notice A pool creator was specified for a pool from a Balancer core pool type."},"errorSelector":"61ee1764","id":2682,"name":"StandardPoolWithCreator","nameLocation":"3283:23:20","nodeType":"ErrorDefinition","parameters":{"id":2681,"nodeType":"ParameterList","parameters":[],"src":"3306:2:20"},"src":"3277:32:20"},{"body":{"id":2701,"nodeType":"Block","src":"3536:64:20","statements":[]},"id":2702,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2692,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2689,"src":"3447:12:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":2693,"kind":"baseConstructorSpecifier","modifierName":{"id":2691,"name":"BaseSplitCodeFactory","nameLocations":["3426:20:20"],"nodeType":"IdentifierPath","referencedDeclaration":3606,"src":"3426:20:20"},"nodeType":"ModifierInvocation","src":"3426:34:20"},{"arguments":[{"id":2695,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2685,"src":"3485:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"id":2696,"kind":"baseConstructorSpecifier","modifierName":{"id":2694,"name":"SingletonAuthentication","nameLocations":["3461:23:20"],"nodeType":"IdentifierPath","referencedDeclaration":7081,"src":"3461:23:20"},"nodeType":"ModifierInvocation","src":"3461:30:20"},{"arguments":[{"id":2698,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2687,"src":"3515:19:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":2699,"kind":"baseConstructorSpecifier","modifierName":{"id":2697,"name":"FactoryWidePauseWindow","nameLocations":["3492:22:20"],"nodeType":"IdentifierPath","referencedDeclaration":3764,"src":"3492:22:20"},"nodeType":"ModifierInvocation","src":"3492:43:20"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2685,"mutability":"mutable","name":"vault","nameLocation":"3343:5:20","nodeType":"VariableDeclaration","scope":2702,"src":"3336:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":2684,"nodeType":"UserDefinedTypeName","pathNode":{"id":2683,"name":"IVault","nameLocations":["3336:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"3336:6:20"},"referencedDeclaration":849,"src":"3336:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":2687,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"3365:19:20","nodeType":"VariableDeclaration","scope":2702,"src":"3358:26:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2686,"name":"uint32","nodeType":"ElementaryTypeName","src":"3358:6:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2689,"mutability":"mutable","name":"creationCode","nameLocation":"3407:12:20","nodeType":"VariableDeclaration","scope":2702,"src":"3394:25:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2688,"name":"bytes","nodeType":"ElementaryTypeName","src":"3394:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3326:99:20"},"returnParameters":{"id":2700,"nodeType":"ParameterList","parameters":[],"src":"3536:0:20"},"scope":2995,"src":"3315:285:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[194],"body":{"id":2714,"nodeType":"Block","src":"3713:48:20","statements":[{"expression":{"baseExpression":{"id":2710,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2674,"src":"3730:18:20","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2712,"indexExpression":{"id":2711,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2705,"src":"3749:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3730:24:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2709,"id":2713,"nodeType":"Return","src":"3723:31:20"}]},"documentation":{"id":2703,"nodeType":"StructuredDocumentation","src":"3606:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6634b753","id":2715,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"3652:17:20","nodeType":"FunctionDefinition","parameters":{"id":2706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2705,"mutability":"mutable","name":"pool","nameLocation":"3678:4:20","nodeType":"VariableDeclaration","scope":2715,"src":"3670:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2704,"name":"address","nodeType":"ElementaryTypeName","src":"3670:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3669:14:20"},"returnParameters":{"id":2709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2708,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2715,"src":"3707:4:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2707,"name":"bool","nodeType":"ElementaryTypeName","src":"3707:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3706:6:20"},"scope":2995,"src":"3643:118:20","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[200],"body":{"id":2724,"nodeType":"Block","src":"3860:37:20","statements":[{"expression":{"expression":{"id":2721,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"3877:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3884:6:20","memberName":"length","nodeType":"MemberAccess","src":"3877:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2720,"id":2723,"nodeType":"Return","src":"3870:20:20"}]},"documentation":{"id":2716,"nodeType":"StructuredDocumentation","src":"3767:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"8eec5d70","id":2725,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"3813:12:20","nodeType":"FunctionDefinition","parameters":{"id":2717,"nodeType":"ParameterList","parameters":[],"src":"3825:2:20"},"returnParameters":{"id":2720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2725,"src":"3851:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2718,"name":"uint256","nodeType":"ElementaryTypeName","src":"3851:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3850:9:20"},"scope":2995,"src":"3804:93:20","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[218],"body":{"id":2734,"nodeType":"Block","src":"4001:30:20","statements":[{"expression":{"id":2732,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4018:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":2731,"id":2733,"nodeType":"Return","src":"4011:13:20"}]},"documentation":{"id":2726,"nodeType":"StructuredDocumentation","src":"3903:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"673a2a1f","id":2735,"implemented":true,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"3949:8:20","nodeType":"FunctionDefinition","parameters":{"id":2727,"nodeType":"ParameterList","parameters":[],"src":"3957:2:20"},"returnParameters":{"id":2731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2730,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2735,"src":"3983:16:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2728,"name":"address","nodeType":"ElementaryTypeName","src":"3983:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2729,"nodeType":"ArrayTypeName","src":"3983:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3982:18:20"},"scope":2995,"src":"3940:91:20","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[211],"body":{"id":2806,"nodeType":"Block","src":"4176:472:20","statements":[{"assignments":[2747],"declarations":[{"constant":false,"id":2747,"mutability":"mutable","name":"length","nameLocation":"4194:6:20","nodeType":"VariableDeclaration","scope":2806,"src":"4186:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2746,"name":"uint256","nodeType":"ElementaryTypeName","src":"4186:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2750,"initialValue":{"expression":{"id":2748,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4203:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":2749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4210:6:20","memberName":"length","nodeType":"MemberAccess","src":"4203:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4186:30:20"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2751,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"4230:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2752,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4239:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4230:15:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2758,"nodeType":"IfStatement","src":"4226:71:20","trueBody":{"id":2757,"nodeType":"Block","src":"4247:50:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2754,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":186,"src":"4268:16:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4268:18:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2756,"nodeType":"RevertStatement","src":"4261:25:20"}]}},{"assignments":[2760],"declarations":[{"constant":false,"id":2760,"mutability":"mutable","name":"end","nameLocation":"4411:3:20","nodeType":"VariableDeclaration","scope":2806,"src":"4403:11:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2759,"name":"uint256","nodeType":"ElementaryTypeName","src":"4403:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2764,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2761,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"4417:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2762,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"4425:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4417:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4403:27:20"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2765,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2760,"src":"4444:3:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2766,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4450:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4444:12:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2775,"nodeType":"IfStatement","src":"4440:65:20","trueBody":{"id":2774,"nodeType":"Block","src":"4458:47:20","statements":[{"expression":{"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2768,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"4472:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2769,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2747,"src":"4480:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2770,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"4489:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4480:14:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4472:22:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2773,"nodeType":"ExpressionStatement","src":"4472:22:20"}]}},{"expression":{"id":2782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2776,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2744,"src":"4515:5:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2780,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"4537:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4523:13:20","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":2777,"name":"address","nodeType":"ElementaryTypeName","src":"4527:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2778,"nodeType":"ArrayTypeName","src":"4527:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":2781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:20:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"4515:28:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":2783,"nodeType":"ExpressionStatement","src":"4515:28:20"},{"body":{"id":2804,"nodeType":"Block","src":"4589:53:20","statements":[{"expression":{"id":2802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2794,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2744,"src":"4603:5:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":2796,"indexExpression":{"id":2795,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4609:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4603:8:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":2797,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"4614:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":2801,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2798,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2738,"src":"4621:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2799,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4629:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4621:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4614:17:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4603:28:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2803,"nodeType":"ExpressionStatement","src":"4603:28:20"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2788,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4573:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2789,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2740,"src":"4577:5:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4573:9:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2805,"initializationExpression":{"assignments":[2785],"declarations":[{"constant":false,"id":2785,"mutability":"mutable","name":"i","nameLocation":"4566:1:20","nodeType":"VariableDeclaration","scope":2805,"src":"4558:9:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"4558:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2787,"initialValue":{"hexValue":"30","id":2786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4570:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4558:13:20"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":2792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4584:3:20","subExpression":{"id":2791,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4584:1:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2793,"nodeType":"ExpressionStatement","src":"4584:3:20"},"nodeType":"ForStatement","src":"4553:89:20"}]},"documentation":{"id":2736,"nodeType":"StructuredDocumentation","src":"4037:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"53a72f7e","id":2807,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"4083:15:20","nodeType":"FunctionDefinition","parameters":{"id":2741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2738,"mutability":"mutable","name":"start","nameLocation":"4107:5:20","nodeType":"VariableDeclaration","scope":2807,"src":"4099:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2737,"name":"uint256","nodeType":"ElementaryTypeName","src":"4099:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2740,"mutability":"mutable","name":"count","nameLocation":"4122:5:20","nodeType":"VariableDeclaration","scope":2807,"src":"4114:13:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2739,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4098:30:20"},"returnParameters":{"id":2745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2744,"mutability":"mutable","name":"pools","nameLocation":"4169:5:20","nodeType":"VariableDeclaration","scope":2807,"src":"4152:22:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":2742,"name":"address","nodeType":"ElementaryTypeName","src":"4152:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2743,"nodeType":"ArrayTypeName","src":"4152:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4151:24:20"},"scope":2995,"src":"4074:574:20","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[234],"body":{"id":2815,"nodeType":"Block","src":"4740:33:20","statements":[{"expression":{"id":2813,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4757:9:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2812,"id":2814,"nodeType":"Return","src":"4750:16:20"}]},"documentation":{"id":2808,"nodeType":"StructuredDocumentation","src":"4654:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6c57f5a9","id":2816,"implemented":true,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"4700:10:20","nodeType":"FunctionDefinition","parameters":{"id":2809,"nodeType":"ParameterList","parameters":[],"src":"4710:2:20"},"returnParameters":{"id":2812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2816,"src":"4734:4:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2810,"name":"bool","nodeType":"ElementaryTypeName","src":"4734:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4733:6:20"},"scope":2995,"src":"4691:82:20","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[228],"body":{"id":2837,"nodeType":"Block","src":"4920:127:20","statements":[{"assignments":[2827],"declarations":[{"constant":false,"id":2827,"mutability":"mutable","name":"finalSalt","nameLocation":"4938:9:20","nodeType":"VariableDeclaration","scope":2837,"src":"4930:17:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4930:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2831,"initialValue":{"arguments":[{"id":2829,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2821,"src":"4968:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2828,"name":"_computeFinalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"4950:17:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":2830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4950:23:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4930:43:20"},{"expression":{"arguments":[{"id":2833,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2819,"src":"5013:15:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2834,"name":"finalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2827,"src":"5030:9:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2832,"name":"_getDeploymentAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3605,"src":"4991:21:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) view returns (address)"}},"id":2835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4991:49:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2825,"id":2836,"nodeType":"Return","src":"4984:56:20"}]},"documentation":{"id":2817,"nodeType":"StructuredDocumentation","src":"4779:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"44f6fec7","id":2838,"implemented":true,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"4825:20:20","nodeType":"FunctionDefinition","parameters":{"id":2822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2819,"mutability":"mutable","name":"constructorArgs","nameLocation":"4859:15:20","nodeType":"VariableDeclaration","scope":2838,"src":"4846:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2818,"name":"bytes","nodeType":"ElementaryTypeName","src":"4846:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2821,"mutability":"mutable","name":"salt","nameLocation":"4884:4:20","nodeType":"VariableDeclaration","scope":2838,"src":"4876:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2820,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4876:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4845:44:20"},"returnParameters":{"id":2825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2838,"src":"4911:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2823,"name":"address","nodeType":"ElementaryTypeName","src":"4911:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4910:9:20"},"scope":2995,"src":"4816:231:20","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[238],"body":{"id":2854,"nodeType":"Block","src":"5131:93:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2844,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"5141:14:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5141:16:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2846,"nodeType":"ExpressionStatement","src":"5141:16:20"},{"expression":{"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2847,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"5168:9:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5180:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5168:16:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2850,"nodeType":"ExpressionStatement","src":"5168:16:20"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2851,"name":"FactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":180,"src":"5200:15:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5200:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2853,"nodeType":"EmitStatement","src":"5195:22:20"}]},"documentation":{"id":2839,"nodeType":"StructuredDocumentation","src":"5053:32:20","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"2f2770db","id":2855,"implemented":true,"kind":"function","modifiers":[{"id":2842,"kind":"modifierInvocation","modifierName":{"id":2841,"name":"authenticate","nameLocations":["5118:12:20"],"nodeType":"IdentifierPath","referencedDeclaration":3348,"src":"5118:12:20"},"nodeType":"ModifierInvocation","src":"5118:12:20"}],"name":"disable","nameLocation":"5099:7:20","nodeType":"FunctionDefinition","parameters":{"id":2840,"nodeType":"ParameterList","parameters":[],"src":"5106:2:20"},"returnParameters":{"id":2843,"nodeType":"ParameterList","parameters":[],"src":"5131:0:20"},"scope":2995,"src":"5090:134:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2865,"nodeType":"Block","src":"5270:76:20","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":2858,"name":"isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2816,"src":"5284:10:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":2859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5284:12:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2864,"nodeType":"IfStatement","src":"5280:60:20","trueBody":{"id":2863,"nodeType":"Block","src":"5298:42:20","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2860,"name":"Disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":183,"src":"5319:8:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5319:10:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2862,"nodeType":"RevertStatement","src":"5312:17:20"}]}}]},"id":2866,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"5239:14:20","nodeType":"FunctionDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[],"src":"5253:2:20"},"returnParameters":{"id":2857,"nodeType":"ParameterList","parameters":[],"src":"5270:0:20"},"scope":2995,"src":"5230:116:20","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2890,"nodeType":"Block","src":"5417:135:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2871,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2866,"src":"5427:14:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5427:16:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2873,"nodeType":"ExpressionStatement","src":"5427:16:20"},{"expression":{"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":2874,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2674,"src":"5454:18:20","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":2876,"indexExpression":{"id":2875,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"5473:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5454:24:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":2877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5481:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5454:31:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2879,"nodeType":"ExpressionStatement","src":"5454:31:20"},{"expression":{"arguments":[{"id":2883,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"5507:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2880,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"5495:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":2882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5502:4:20","memberName":"push","nodeType":"MemberAccess","src":"5495:11:20","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":2884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5495:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2885,"nodeType":"ExpressionStatement","src":"5495:17:20"},{"eventCall":{"arguments":[{"id":2887,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"5540:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2886,"name":"PoolCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":177,"src":"5528:11:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5528:17:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2889,"nodeType":"EmitStatement","src":"5523:22:20"}]},"id":2891,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPoolWithFactory","nameLocation":"5361:24:20","nodeType":"FunctionDefinition","parameters":{"id":2869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2868,"mutability":"mutable","name":"pool","nameLocation":"5394:4:20","nodeType":"VariableDeclaration","scope":2891,"src":"5386:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2867,"name":"address","nodeType":"ElementaryTypeName","src":"5386:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5385:14:20"},"returnParameters":{"id":2870,"nodeType":"ParameterList","parameters":[],"src":"5417:0:20"},"scope":2995,"src":"5352:200:20","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":2910,"nodeType":"Block","src":"5965:78:20","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":2902,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6003:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6007:6:20","memberName":"sender","nodeType":"MemberAccess","src":"6003:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":2904,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6015:5:20","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:7:20","memberName":"chainid","nodeType":"MemberAccess","src":"6015:13:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2906,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2894,"src":"6030:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2900,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5992:3:20","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5996:6:20","memberName":"encode","nodeType":"MemberAccess","src":"5992:10:20","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5992:43:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2899,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5982:9:20","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5982:54:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2898,"id":2909,"nodeType":"Return","src":"5975:61:20"}]},"documentation":{"id":2892,"nodeType":"StructuredDocumentation","src":"5558:321:20","text":" @dev Factories that require a custom-calculated salt can override to replace this default salt processing.\n By default, the pool address determinants include the sender and chain id, as well as the user-provided salt,\n so contracts will generally not have the same address on different L2s."},"id":2911,"implemented":true,"kind":"function","modifiers":[],"name":"_computeFinalSalt","nameLocation":"5893:17:20","nodeType":"FunctionDefinition","parameters":{"id":2895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2894,"mutability":"mutable","name":"salt","nameLocation":"5919:4:20","nodeType":"VariableDeclaration","scope":2911,"src":"5911:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2893,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5911:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5910:14:20"},"returnParameters":{"id":2898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2897,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2911,"src":"5956:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2896,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5956:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5955:9:20"},"scope":2995,"src":"5884:159:20","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":2937,"nodeType":"Block","src":"6142:154:20","statements":[{"assignments":[2921],"declarations":[{"constant":false,"id":2921,"mutability":"mutable","name":"finalSalt","nameLocation":"6160:9:20","nodeType":"VariableDeclaration","scope":2937,"src":"6152:17:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2920,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6152:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2925,"initialValue":{"arguments":[{"id":2923,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2915,"src":"6190:4:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2922,"name":"_computeFinalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2911,"src":"6172:17:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":2924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6172:23:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6152:43:20"},{"expression":{"id":2931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2926,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"6205:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2928,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2913,"src":"6221:15:20","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":2929,"name":"finalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"6238:9:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2927,"name":"_create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3581,"src":"6212:8:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) returns (address)"}},"id":2930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6212:36:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6205:43:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2932,"nodeType":"ExpressionStatement","src":"6205:43:20"},{"expression":{"arguments":[{"id":2934,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"6284:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2933,"name":"_registerPoolWithFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2891,"src":"6259:24:20","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6259:30:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2936,"nodeType":"ExpressionStatement","src":"6259:30:20"}]},"id":2938,"implemented":true,"kind":"function","modifiers":[],"name":"_create","nameLocation":"6058:7:20","nodeType":"FunctionDefinition","parameters":{"id":2916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2913,"mutability":"mutable","name":"constructorArgs","nameLocation":"6079:15:20","nodeType":"VariableDeclaration","scope":2938,"src":"6066:28:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2912,"name":"bytes","nodeType":"ElementaryTypeName","src":"6066:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":2915,"mutability":"mutable","name":"salt","nameLocation":"6104:4:20","nodeType":"VariableDeclaration","scope":2938,"src":"6096:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2914,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6096:7:20","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6065:44:20"},"returnParameters":{"id":2919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"mutability":"mutable","name":"pool","nameLocation":"6136:4:20","nodeType":"VariableDeclaration","scope":2938,"src":"6128:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2917,"name":"address","nodeType":"ElementaryTypeName","src":"6128:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6127:14:20"},"scope":2995,"src":"6049:247:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2973,"nodeType":"Block","src":"6612:284:20","statements":[{"expression":{"arguments":[{"id":2962,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"6659:4:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2963,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2944,"src":"6677:6:20","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":2964,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"6697:17:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":2965,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3763,"src":"6728:28:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":2966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6728:30:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":2967,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2948,"src":"6772:17:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":2968,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2951,"src":"6803:12:20","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":2969,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2953,"src":"6829:17:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2970,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2956,"src":"6860:19:20","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2959,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"6622:8:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$849_$","typeString":"function () view returns (contract IVault)"}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6622:10:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":2961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6633:12:20","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":1836,"src":"6622:23:20","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$2415_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$2318_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":2971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6622:267:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2972,"nodeType":"ExpressionStatement","src":"6622:267:20"}]},"id":2974,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPoolWithVault","nameLocation":"6311:22:20","nodeType":"FunctionDefinition","parameters":{"id":2957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2940,"mutability":"mutable","name":"pool","nameLocation":"6351:4:20","nodeType":"VariableDeclaration","scope":2974,"src":"6343:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2939,"name":"address","nodeType":"ElementaryTypeName","src":"6343:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2944,"mutability":"mutable","name":"tokens","nameLocation":"6386:6:20","nodeType":"VariableDeclaration","scope":2974,"src":"6365:27:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":2942,"nodeType":"UserDefinedTypeName","pathNode":{"id":2941,"name":"TokenConfig","nameLocations":["6365:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"6365:11:20"},"referencedDeclaration":2432,"src":"6365:11:20","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":2943,"nodeType":"ArrayTypeName","src":"6365:13:20","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":2946,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6410:17:20","nodeType":"VariableDeclaration","scope":2974,"src":"6402:25:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2945,"name":"uint256","nodeType":"ElementaryTypeName","src":"6402:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2948,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6442:17:20","nodeType":"VariableDeclaration","scope":2974,"src":"6437:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2947,"name":"bool","nodeType":"ElementaryTypeName","src":"6437:4:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2951,"mutability":"mutable","name":"roleAccounts","nameLocation":"6493:12:20","nodeType":"VariableDeclaration","scope":2974,"src":"6469:36:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":2950,"nodeType":"UserDefinedTypeName","pathNode":{"id":2949,"name":"PoolRoleAccounts","nameLocations":["6469:16:20"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"6469:16:20"},"referencedDeclaration":2415,"src":"6469:16:20","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":2953,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6523:17:20","nodeType":"VariableDeclaration","scope":2974,"src":"6515:25:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2952,"name":"address","nodeType":"ElementaryTypeName","src":"6515:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2956,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6577:19:20","nodeType":"VariableDeclaration","scope":2974,"src":"6550:46:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2955,"nodeType":"UserDefinedTypeName","pathNode":{"id":2954,"name":"LiquidityManagement","nameLocations":["6550:19:20"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"6550:19:20"},"referencedDeclaration":2318,"src":"6550:19:20","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"6333:269:20"},"returnParameters":{"id":2958,"nodeType":"ParameterList","parameters":[],"src":"6612:0:20"},"scope":2995,"src":"6302:594:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2985,"nodeType":"Block","src":"7085:34:20","statements":[{"expression":{"arguments":[{"hexValue":"30","id":2982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7110:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7102:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2980,"name":"address","nodeType":"ElementaryTypeName","src":"7102:7:20","typeDescriptions":{}}},"id":2983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7102:10:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":2979,"id":2984,"nodeType":"Return","src":"7095:17:20"}]},"documentation":{"id":2975,"nodeType":"StructuredDocumentation","src":"6902:109:20","text":"@notice A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks)."},"functionSelector":"ec888061","id":2986,"implemented":true,"kind":"function","modifiers":[],"name":"getDefaultPoolHooksContract","nameLocation":"7025:27:20","nodeType":"FunctionDefinition","parameters":{"id":2976,"nodeType":"ParameterList","parameters":[],"src":"7052:2:20"},"returnParameters":{"id":2979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2986,"src":"7076:7:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2977,"name":"address","nodeType":"ElementaryTypeName","src":"7076:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7075:9:20"},"scope":2995,"src":"7016:103:20","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":2993,"nodeType":"Block","src":"7539:64:20","statements":[]},"documentation":{"id":2987,"nodeType":"StructuredDocumentation","src":"7125:299:20","text":" @notice Convenience function for constructing a LiquidityManagement object.\n @dev Users can call this to create a structure with all false arguments, then set the ones they need to true.\n @return liquidityManagement Liquidity management flags, all initialized to false"},"functionSelector":"193ad50f","id":2994,"implemented":true,"kind":"function","modifiers":[],"name":"getDefaultLiquidityManagement","nameLocation":"7438:29:20","nodeType":"FunctionDefinition","parameters":{"id":2988,"nodeType":"ParameterList","parameters":[],"src":"7467:2:20"},"returnParameters":{"id":2992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2991,"mutability":"mutable","name":"liquidityManagement","nameLocation":"7518:19:20","nodeType":"VariableDeclaration","scope":2994,"src":"7491:46:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2990,"nodeType":"UserDefinedTypeName","pathNode":{"id":2989,"name":"LiquidityManagement","nameLocations":["7491:19:20"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"7491:19:20"},"referencedDeclaration":2318,"src":"7491:19:20","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"7490:48:20"},"scope":2995,"src":"7429:174:20","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":2996,"src":"2906:4699:20","usedErrors":[60,183,186,2682,3643,3697,6842],"usedEvents":[177,180]}],"src":"46:7560:20"},"id":20},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","exportedSymbols":{"IERC20":[7403],"IPoolInfo":[54],"IVault":[849],"PoolConfig":[2343],"PoolInfo":[3130],"TokenInfo":[2442]},"id":3131,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2997,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2999,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3131,"sourceUnit":7404,"src":"72:72:21","symbolAliases":[{"foreign":{"id":2998,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":3002,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3131,"sourceUnit":2610,"src":"146:100:21","symbolAliases":[{"foreign":{"id":3000,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2442,"src":"155:9:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":3001,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2343,"src":"166:10:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","id":3004,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3131,"sourceUnit":55,"src":"247:92:21","symbolAliases":[{"foreign":{"id":3003,"name":"IPoolInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54,"src":"256:9:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":3006,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3131,"sourceUnit":850,"src":"340:81:21","symbolAliases":[{"foreign":{"id":3005,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"349:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3008,"name":"IPoolInfo","nameLocations":["660:9:21"],"nodeType":"IdentifierPath","referencedDeclaration":54,"src":"660:9:21"},"id":3009,"nodeType":"InheritanceSpecifier","src":"660:9:21"}],"canonicalName":"PoolInfo","contractDependencies":[],"contractKind":"contract","documentation":{"id":3007,"nodeType":"StructuredDocumentation","src":"423:215:21","text":" @notice Standard implementation of the `IPoolInfo` interface.\n @dev Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for\n commonly requested data."},"fullyImplemented":true,"id":3130,"linearizedBaseContracts":[3130,54],"name":"PoolInfo","nameLocation":"648:8:21","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3012,"mutability":"immutable","name":"_vault","nameLocation":"701:6:21","nodeType":"VariableDeclaration","scope":3130,"src":"676:31:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":3011,"nodeType":"UserDefinedTypeName","pathNode":{"id":3010,"name":"IVault","nameLocations":["676:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"676:6:21"},"referencedDeclaration":849,"src":"676:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":3022,"nodeType":"Block","src":"740:31:21","statements":[{"expression":{"id":3020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3018,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"750:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3019,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"759:5:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"src":"750:14:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3021,"nodeType":"ExpressionStatement","src":"750:14:21"}]},"id":3023,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3015,"mutability":"mutable","name":"vault","nameLocation":"733:5:21","nodeType":"VariableDeclaration","scope":3023,"src":"726:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":3014,"nodeType":"UserDefinedTypeName","pathNode":{"id":3013,"name":"IVault","nameLocations":["726:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"726:6:21"},"referencedDeclaration":849,"src":"726:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"725:14:21"},"returnParameters":{"id":3017,"nodeType":"ParameterList","parameters":[],"src":"740:0:21"},"scope":3130,"src":"714:57:21","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[14],"body":{"id":3039,"nodeType":"Block","src":"875:59:21","statements":[{"expression":{"arguments":[{"arguments":[{"id":3035,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"921:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}],"id":3034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"913:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3033,"name":"address","nodeType":"ElementaryTypeName","src":"913:7:21","typeDescriptions":{}}},"id":3036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"913:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3031,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"892:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"899:13:21","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1883,"src":"892:20:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":3037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"892:35:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":3030,"id":3038,"nodeType":"Return","src":"885:42:21"}]},"documentation":{"id":3024,"nodeType":"StructuredDocumentation","src":"777:25:21","text":"@inheritdoc IPoolInfo"},"functionSelector":"aa6ca808","id":3040,"implemented":true,"kind":"function","modifiers":[],"name":"getTokens","nameLocation":"816:9:21","nodeType":"FunctionDefinition","parameters":{"id":3025,"nodeType":"ParameterList","parameters":[],"src":"825:2:21"},"returnParameters":{"id":3030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3029,"mutability":"mutable","name":"tokens","nameLocation":"867:6:21","nodeType":"VariableDeclaration","scope":3040,"src":"851:22:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3027,"nodeType":"UserDefinedTypeName","pathNode":{"id":3026,"name":"IERC20","nameLocations":["851:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"851:6:21"},"referencedDeclaration":7403,"src":"851:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3028,"nodeType":"ArrayTypeName","src":"851:8:21","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"850:24:21"},"scope":3130,"src":"807:127:21","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[32],"body":{"id":3066,"nodeType":"Block","src":"1230:62:21","statements":[{"expression":{"arguments":[{"arguments":[{"id":3062,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1279:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}],"id":3061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1271:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3060,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:21","typeDescriptions":{}}},"id":3063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1271:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3058,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"1247:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1254:16:21","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"1247:23:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":3064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1247:38:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"functionReturnParameters":3057,"id":3065,"nodeType":"Return","src":"1240:45:21"}]},"documentation":{"id":3041,"nodeType":"StructuredDocumentation","src":"940:25:21","text":"@inheritdoc IPoolInfo"},"functionSelector":"abb1dc44","id":3067,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenInfo","nameLocation":"979:12:21","nodeType":"FunctionDefinition","parameters":{"id":3042,"nodeType":"ParameterList","parameters":[],"src":"991:2:21"},"returnParameters":{"id":3057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3046,"mutability":"mutable","name":"tokens","nameLocation":"1070:6:21","nodeType":"VariableDeclaration","scope":3067,"src":"1054:22:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3044,"nodeType":"UserDefinedTypeName","pathNode":{"id":3043,"name":"IERC20","nameLocations":["1054:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"1054:6:21"},"referencedDeclaration":7403,"src":"1054:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3045,"nodeType":"ArrayTypeName","src":"1054:8:21","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":3050,"mutability":"mutable","name":"tokenInfo","nameLocation":"1109:9:21","nodeType":"VariableDeclaration","scope":3067,"src":"1090:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":3048,"nodeType":"UserDefinedTypeName","pathNode":{"id":3047,"name":"TokenInfo","nameLocations":["1090:9:21"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"1090:9:21"},"referencedDeclaration":2442,"src":"1090:9:21","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"id":3049,"nodeType":"ArrayTypeName","src":"1090:11:21","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":3053,"mutability":"mutable","name":"balancesRaw","nameLocation":"1149:11:21","nodeType":"VariableDeclaration","scope":3067,"src":"1132:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3051,"name":"uint256","nodeType":"ElementaryTypeName","src":"1132:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3052,"nodeType":"ArrayTypeName","src":"1132:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3056,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"1191:24:21","nodeType":"VariableDeclaration","scope":3067,"src":"1174:41:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3054,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3055,"nodeType":"ArrayTypeName","src":"1174:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1040:185:21"},"scope":3130,"src":"970:322:21","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39],"body":{"id":3082,"nodeType":"Block","src":"1424:68:21","statements":[{"expression":{"arguments":[{"arguments":[{"id":3078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1479:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}],"id":3077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1471:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3076,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:21","typeDescriptions":{}}},"id":3079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1471:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3074,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"1441:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1448:22:21","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":1933,"src":"1441:29:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1441:44:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":3073,"id":3081,"nodeType":"Return","src":"1434:51:21"}]},"documentation":{"id":3068,"nodeType":"StructuredDocumentation","src":"1298:25:21","text":"@inheritdoc IPoolInfo"},"functionSelector":"b156aa0a","id":3083,"implemented":true,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"1337:22:21","nodeType":"FunctionDefinition","parameters":{"id":3069,"nodeType":"ParameterList","parameters":[],"src":"1359:2:21"},"returnParameters":{"id":3073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3072,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"1402:20:21","nodeType":"VariableDeclaration","scope":3083,"src":"1385:37:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3070,"name":"uint256","nodeType":"ElementaryTypeName","src":"1385:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3071,"nodeType":"ArrayTypeName","src":"1385:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1384:39:21"},"scope":3130,"src":"1328:164:21","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[45],"body":{"id":3098,"nodeType":"Block","src":"1598:74:21","statements":[{"expression":{"arguments":[{"components":[{"arguments":[{"id":3093,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1658:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}],"id":3092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1650:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3091,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:21","typeDescriptions":{}}},"id":3094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1650:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3095,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1649:15:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3089,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"1615:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1622:26:21","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2071,"src":"1615:33:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":3096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1615:50:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3088,"id":3097,"nodeType":"Return","src":"1608:57:21"}]},"documentation":{"id":3084,"nodeType":"StructuredDocumentation","src":"1498:25:21","text":"@inheritdoc IPoolInfo"},"functionSelector":"d335b0cf","id":3099,"implemented":true,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"1537:26:21","nodeType":"FunctionDefinition","parameters":{"id":3085,"nodeType":"ParameterList","parameters":[],"src":"1563:2:21"},"returnParameters":{"id":3088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3099,"src":"1589:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1588:9:21"},"scope":3130,"src":"1528:144:21","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[53],"body":{"id":3128,"nodeType":"Block","src":"1870:238:21","statements":[{"assignments":[3109],"declarations":[{"constant":false,"id":3109,"mutability":"mutable","name":"poolConfig","nameLocation":"1898:10:21","nodeType":"VariableDeclaration","scope":3128,"src":"1880:28:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":3108,"nodeType":"UserDefinedTypeName","pathNode":{"id":3107,"name":"PoolConfig","nameLocations":["1880:10:21"],"nodeType":"IdentifierPath","referencedDeclaration":2343,"src":"1880:10:21"},"referencedDeclaration":2343,"src":"1880:10:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"id":3117,"initialValue":{"arguments":[{"arguments":[{"id":3114,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1940:4:21","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$3130","typeString":"contract PoolInfo"}],"id":3113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1932:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3112,"name":"address","nodeType":"ElementaryTypeName","src":"1932:7:21","typeDescriptions":{}}},"id":3115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1932:13:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":3110,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"1911:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":3111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1918:13:21","memberName":"getPoolConfig","nodeType":"MemberAccess","referencedDeclaration":1942,"src":"1911:20:21","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolConfig_$2343_memory_ptr_$","typeString":"function (address) view external returns (struct PoolConfig memory)"}},"id":3116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1911:35:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"1880:66:21"},{"expression":{"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3118,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3103,"src":"1957:26:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3119,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3109,"src":"1986:10:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"id":3120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1997:26:21","memberName":"aggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2328,"src":"1986:37:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1957:66:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3122,"nodeType":"ExpressionStatement","src":"1957:66:21"},{"expression":{"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3123,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3105,"src":"2033:27:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3124,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3109,"src":"2063:10:21","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"id":3125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2074:27:21","memberName":"aggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2330,"src":"2063:38:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2033:68:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3127,"nodeType":"ExpressionStatement","src":"2033:68:21"}]},"documentation":{"id":3100,"nodeType":"StructuredDocumentation","src":"1678:25:21","text":"@inheritdoc IPoolInfo"},"functionSelector":"81fa807c","id":3129,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateFeePercentages","nameLocation":"1717:26:21","nodeType":"FunctionDefinition","parameters":{"id":3101,"nodeType":"ParameterList","parameters":[],"src":"1743:2:21"},"returnParameters":{"id":3106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3103,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"1801:26:21","nodeType":"VariableDeclaration","scope":3129,"src":"1793:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3102,"name":"uint256","nodeType":"ElementaryTypeName","src":"1793:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3105,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"1837:27:21","nodeType":"VariableDeclaration","scope":3129,"src":"1829:35:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3104,"name":"uint256","nodeType":"ElementaryTypeName","src":"1829:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1792:73:21"},"scope":3130,"src":"1708:400:21","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3131,"src":"639:1471:21","usedErrors":[],"usedEvents":[]}],"src":"46:2065:21"},"id":21},"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol","exportedSymbols":{"FixedPoint":[4818],"GradualValueChange":[3320],"Math":[11538]},"id":3321,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":3133,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3321,"sourceUnit":4819,"src":"46:92:22","symbolAliases":[{"foreign":{"id":3132,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"55:10:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","id":3135,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3321,"sourceUnit":11539,"src":"139:67:22","symbolAliases":[{"foreign":{"id":3134,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"148:4:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":3136,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"208:24:22"},{"abstract":false,"baseContracts":[],"canonicalName":"GradualValueChange","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":3320,"linearizedBaseContracts":[3320],"name":"GradualValueChange","nameLocation":"279:18:22","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3137,"nodeType":"StructuredDocumentation","src":"304:60:22","text":"@dev Indicates that the start time is after the end time"},"errorSelector":"c9767706","id":3143,"name":"InvalidStartTime","nameLocation":"375:16:22","nodeType":"ErrorDefinition","parameters":{"id":3142,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3139,"mutability":"mutable","name":"resolvedStartTime","nameLocation":"400:17:22","nodeType":"VariableDeclaration","scope":3143,"src":"392:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3138,"name":"uint256","nodeType":"ElementaryTypeName","src":"392:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3141,"mutability":"mutable","name":"endTime","nameLocation":"427:7:22","nodeType":"VariableDeclaration","scope":3143,"src":"419:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3140,"name":"uint256","nodeType":"ElementaryTypeName","src":"419:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"391:44:22"},"src":"369:67:22"},{"global":false,"id":3146,"libraryName":{"id":3144,"name":"FixedPoint","nameLocations":["448:10:22"],"nodeType":"IdentifierPath","referencedDeclaration":4818,"src":"448:10:22"},"nodeType":"UsingForDirective","src":"442:29:22","typeName":{"id":3145,"name":"uint256","nodeType":"ElementaryTypeName","src":"463:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":3172,"nodeType":"Block","src":"651:156:22","statements":[{"assignments":[3160],"declarations":[{"constant":false,"id":3160,"mutability":"mutable","name":"pctProgress","nameLocation":"669:11:22","nodeType":"VariableDeclaration","scope":3172,"src":"661:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3159,"name":"uint256","nodeType":"ElementaryTypeName","src":"661:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3165,"initialValue":{"arguments":[{"id":3162,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3152,"src":"712:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3163,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3154,"src":"723:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3161,"name":"calculateValueChangeProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3319,"src":"683:28:22","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"683:48:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"661:70:22"},{"expression":{"arguments":[{"id":3167,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3148,"src":"766:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3168,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"778:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3169,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3160,"src":"788:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3166,"name":"interpolateValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3266,"src":"749:16:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":3170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"749:51:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3158,"id":3171,"nodeType":"Return","src":"742:58:22"}]},"id":3173,"implemented":true,"kind":"function","modifiers":[],"name":"getInterpolatedValue","nameLocation":"486:20:22","nodeType":"FunctionDefinition","parameters":{"id":3155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3148,"mutability":"mutable","name":"startValue","nameLocation":"524:10:22","nodeType":"VariableDeclaration","scope":3173,"src":"516:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3147,"name":"uint256","nodeType":"ElementaryTypeName","src":"516:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3150,"mutability":"mutable","name":"endValue","nameLocation":"552:8:22","nodeType":"VariableDeclaration","scope":3173,"src":"544:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3149,"name":"uint256","nodeType":"ElementaryTypeName","src":"544:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3152,"mutability":"mutable","name":"startTime","nameLocation":"578:9:22","nodeType":"VariableDeclaration","scope":3173,"src":"570:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3151,"name":"uint256","nodeType":"ElementaryTypeName","src":"570:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3154,"mutability":"mutable","name":"endTime","nameLocation":"605:7:22","nodeType":"VariableDeclaration","scope":3173,"src":"597:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3153,"name":"uint256","nodeType":"ElementaryTypeName","src":"597:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"506:112:22"},"returnParameters":{"id":3158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3173,"src":"642:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3156,"name":"uint256","nodeType":"ElementaryTypeName","src":"642:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"641:9:22"},"scope":3320,"src":"477:330:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3201,"nodeType":"Block","src":"925:457:22","statements":[{"expression":{"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3182,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3180,"src":"1200:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":3185,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1229:5:22","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1235:9:22","memberName":"timestamp","nodeType":"MemberAccess","src":"1229:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3187,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3175,"src":"1246:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3183,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"1220:4:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":3184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1225:3:22","memberName":"max","nodeType":"MemberAccess","referencedDeclaration":10148,"src":"1220:8:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:36:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1200:56:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3190,"nodeType":"ExpressionStatement","src":"1200:56:22"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3191,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3180,"src":"1271:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3192,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3177,"src":"1291:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1271:27:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3200,"nodeType":"IfStatement","src":"1267:109:22","trueBody":{"id":3199,"nodeType":"Block","src":"1300:76:22","statements":[{"errorCall":{"arguments":[{"id":3195,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3180,"src":"1338:17:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3196,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3177,"src":"1357:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3194,"name":"InvalidStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3143,"src":"1321:16:22","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1321:44:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3198,"nodeType":"RevertStatement","src":"1314:51:22"}]}}]},"id":3202,"implemented":true,"kind":"function","modifiers":[],"name":"resolveStartTime","nameLocation":"822:16:22","nodeType":"FunctionDefinition","parameters":{"id":3178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3175,"mutability":"mutable","name":"startTime","nameLocation":"847:9:22","nodeType":"VariableDeclaration","scope":3202,"src":"839:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3174,"name":"uint256","nodeType":"ElementaryTypeName","src":"839:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3177,"mutability":"mutable","name":"endTime","nameLocation":"866:7:22","nodeType":"VariableDeclaration","scope":3202,"src":"858:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3176,"name":"uint256","nodeType":"ElementaryTypeName","src":"858:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"838:36:22"},"returnParameters":{"id":3181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3180,"mutability":"mutable","name":"resolvedStartTime","nameLocation":"906:17:22","nodeType":"VariableDeclaration","scope":3202,"src":"898:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3179,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"897:27:22"},"scope":3320,"src":"813:569:22","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":3265,"nodeType":"Block","src":"1535:536:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3213,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3208,"src":"1549:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":3214,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"1564:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":3215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1575:3:22","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"1564:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1549:29:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3217,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1582:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3218,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3206,"src":"1596:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1582:22:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1549:55:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3224,"nodeType":"IfStatement","src":"1545:101:22","trueBody":{"id":3223,"nodeType":"Block","src":"1606:40:22","statements":[{"expression":{"id":3221,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3206,"src":"1627:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3212,"id":3222,"nodeType":"Return","src":"1620:15:22"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3225,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3208,"src":"1660:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1675:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1660:16:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3231,"nodeType":"IfStatement","src":"1656:64:22","trueBody":{"id":3230,"nodeType":"Block","src":"1678:42:22","statements":[{"expression":{"id":3228,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1699:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3212,"id":3229,"nodeType":"Return","src":"1692:17:22"}]}},{"id":3264,"nodeType":"UncheckedBlock","src":"1730:335:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3232,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1758:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3233,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3206,"src":"1771:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1758:21:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3262,"nodeType":"Block","src":"1921:134:22","statements":[{"assignments":[3250],"declarations":[{"constant":false,"id":3250,"mutability":"mutable","name":"delta","nameLocation":"1947:5:22","nodeType":"VariableDeclaration","scope":3262,"src":"1939:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3249,"name":"uint256","nodeType":"ElementaryTypeName","src":"1939:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3257,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3253,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3206,"src":"1975:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3254,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1986:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1975:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3251,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3208,"src":"1955:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1967:7:22","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"1955:19:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1955:42:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1939:58:22"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3258,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"2022:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3259,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3250,"src":"2035:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2022:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3212,"id":3261,"nodeType":"Return","src":"2015:25:22"}]},"id":3263,"nodeType":"IfStatement","src":"1754:301:22","trueBody":{"id":3248,"nodeType":"Block","src":"1781:134:22","statements":[{"assignments":[3236],"declarations":[{"constant":false,"id":3236,"mutability":"mutable","name":"delta","nameLocation":"1807:5:22","nodeType":"VariableDeclaration","scope":3248,"src":"1799:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3235,"name":"uint256","nodeType":"ElementaryTypeName","src":"1799:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3243,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3239,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1835:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3240,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3206,"src":"1848:8:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1835:21:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3237,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3208,"src":"1815:11:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1827:7:22","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"1815:19:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1815:42:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1799:58:22"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3244,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3204,"src":"1882:10:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3245,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"1895:5:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1882:18:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3212,"id":3247,"nodeType":"Return","src":"1875:25:22"}]}}]}]},"id":3266,"implemented":true,"kind":"function","modifiers":[],"name":"interpolateValue","nameLocation":"1397:16:22","nodeType":"FunctionDefinition","parameters":{"id":3209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3204,"mutability":"mutable","name":"startValue","nameLocation":"1431:10:22","nodeType":"VariableDeclaration","scope":3266,"src":"1423:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3203,"name":"uint256","nodeType":"ElementaryTypeName","src":"1423:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3206,"mutability":"mutable","name":"endValue","nameLocation":"1459:8:22","nodeType":"VariableDeclaration","scope":3266,"src":"1451:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3205,"name":"uint256","nodeType":"ElementaryTypeName","src":"1451:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3208,"mutability":"mutable","name":"pctProgress","nameLocation":"1485:11:22","nodeType":"VariableDeclaration","scope":3266,"src":"1477:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3207,"name":"uint256","nodeType":"ElementaryTypeName","src":"1477:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1413:89:22"},"returnParameters":{"id":3212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3211,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3266,"src":"1526:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3210,"name":"uint256","nodeType":"ElementaryTypeName","src":"1526:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1525:9:22"},"scope":3320,"src":"1388:683:22","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3318,"nodeType":"Block","src":"2398:821:22","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3276,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2412:5:22","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2418:9:22","memberName":"timestamp","nodeType":"MemberAccess","src":"2412:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3278,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3271,"src":"2431:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2412:26:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3284,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2496:5:22","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2502:9:22","memberName":"timestamp","nodeType":"MemberAccess","src":"2496:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3286,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3269,"src":"2515:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2496:28:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3291,"nodeType":"IfStatement","src":"2492:67:22","trueBody":{"id":3290,"nodeType":"Block","src":"2526:33:22","statements":[{"expression":{"hexValue":"30","id":3288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2547:1:22","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3275,"id":3289,"nodeType":"Return","src":"2540:8:22"}]}},"id":3292,"nodeType":"IfStatement","src":"2408:151:22","trueBody":{"id":3283,"nodeType":"Block","src":"2440:46:22","statements":[{"expression":{"expression":{"id":3280,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"2461:10:22","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":3281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2472:3:22","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"2461:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3275,"id":3282,"nodeType":"Return","src":"2454:21:22"}]}},{"assignments":[3294],"declarations":[{"constant":false,"id":3294,"mutability":"mutable","name":"totalSeconds","nameLocation":"2689:12:22","nodeType":"VariableDeclaration","scope":3318,"src":"2681:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3293,"name":"uint256","nodeType":"ElementaryTypeName","src":"2681:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3295,"nodeType":"VariableDeclarationStatement","src":"2681:20:22"},{"assignments":[3297],"declarations":[{"constant":false,"id":3297,"mutability":"mutable","name":"secondsElapsed","nameLocation":"2719:14:22","nodeType":"VariableDeclaration","scope":3318,"src":"2711:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2711:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3298,"nodeType":"VariableDeclarationStatement","src":"2711:22:22"},{"id":3312,"nodeType":"UncheckedBlock","src":"2744:127:22","statements":[{"expression":{"id":3303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3299,"name":"totalSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3294,"src":"2768:12:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3300,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3271,"src":"2783:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3301,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3269,"src":"2793:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2783:19:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2768:34:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3304,"nodeType":"ExpressionStatement","src":"2768:34:22"},{"expression":{"id":3310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3305,"name":"secondsElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"2816:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3306,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2833:5:22","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2839:9:22","memberName":"timestamp","nodeType":"MemberAccess","src":"2833:15:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3308,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3269,"src":"2851:9:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2833:27:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2816:44:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3311,"nodeType":"ExpressionStatement","src":"2816:44:22"}]},{"expression":{"arguments":[{"id":3315,"name":"totalSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3294,"src":"3199:12:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":3313,"name":"secondsElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3297,"src":"3176:14:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3191:7:22","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"3176:22:22","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3176:36:22","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3275,"id":3317,"nodeType":"Return","src":"3169:43:22"}]},"documentation":{"id":3267,"nodeType":"StructuredDocumentation","src":"2077:210:22","text":" @dev Returns a fixed-point number representing how far along the current value change is, where 0 means the\n change has not yet started, and FixedPoint.ONE means it has fully completed."},"id":3319,"implemented":true,"kind":"function","modifiers":[],"name":"calculateValueChangeProgress","nameLocation":"2301:28:22","nodeType":"FunctionDefinition","parameters":{"id":3272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3269,"mutability":"mutable","name":"startTime","nameLocation":"2338:9:22","nodeType":"VariableDeclaration","scope":3319,"src":"2330:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3268,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3271,"mutability":"mutable","name":"endTime","nameLocation":"2357:7:22","nodeType":"VariableDeclaration","scope":3319,"src":"2349:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3270,"name":"uint256","nodeType":"ElementaryTypeName","src":"2349:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2329:36:22"},"returnParameters":{"id":3275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3319,"src":"2389:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3273,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2388:9:22"},"scope":3320,"src":"2292:927:22","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3321,"src":"271:2950:22","usedErrors":[3143],"usedEvents":[]}],"src":"46:3176:22"},"id":22},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[3400],"IAuthentication":[69]},"id":3401,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3322,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":3324,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3401,"sourceUnit":70,"src":"72:116:23","symbolAliases":[{"foreign":{"id":3323,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":69,"src":"81:15:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":3326,"name":"IAuthentication","nameLocations":["625:15:23"],"nodeType":"IdentifierPath","referencedDeclaration":69,"src":"625:15:23"},"id":3327,"nodeType":"InheritanceSpecifier","src":"625:15:23"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":3325,"nodeType":"StructuredDocumentation","src":"190:398:23","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":3400,"linearizedBaseContracts":[3400,69],"name":"Authentication","nameLocation":"607:14:23","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3329,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:23","nodeType":"VariableDeclaration","scope":3400,"src":"647:48:23","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3328,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":3339,"nodeType":"Block","src":"1337:63:23","statements":[{"expression":{"id":3337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3335,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3329,"src":"1347:22:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3336,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3332,"src":"1372:21:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3338,"nodeType":"ExpressionStatement","src":"1347:46:23"}]},"documentation":{"id":3330,"nodeType":"StructuredDocumentation","src":"702:587:23","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":3340,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3332,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:23","nodeType":"VariableDeclaration","scope":3340,"src":"1306:29:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3331,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:23"},"returnParameters":{"id":3334,"nodeType":"ParameterList","parameters":[],"src":"1337:0:23"},"scope":3400,"src":"1294:106:23","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":3347,"nodeType":"Block","src":"1549:49:23","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":3343,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3371,"src":"1559:19:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":3344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3345,"nodeType":"ExpressionStatement","src":"1559:21:23"},{"id":3346,"nodeType":"PlaceholderStatement","src":"1590:1:23"}]},"documentation":{"id":3341,"nodeType":"StructuredDocumentation","src":"1406:114:23","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":3348,"name":"authenticate","nameLocation":"1534:12:23","nodeType":"ModifierDefinition","parameters":{"id":3342,"nodeType":"ParameterList","parameters":[],"src":"1546:2:23"},"src":"1525:73:23","virtual":false,"visibility":"internal"},{"body":{"id":3370,"nodeType":"Block","src":"1733:156:23","statements":[{"assignments":[3353],"declarations":[{"constant":false,"id":3353,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:23","nodeType":"VariableDeclaration","scope":3370,"src":"1743:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3352,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3358,"initialValue":{"arguments":[{"expression":{"id":3355,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:23","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:23","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:23","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":3354,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"1762:11:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":3357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:23"},{"condition":{"id":3364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:23","subExpression":{"arguments":[{"id":3360,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3353,"src":"1810:8:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3361,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:23","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:23","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:23","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":3359,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3399,"src":"1798:11:23","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":3363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3369,"nodeType":"IfStatement","src":"1793:90:23","trueBody":{"id":3368,"nodeType":"Block","src":"1833:50:23","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3365,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"1854:16:23","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3367,"nodeType":"RevertStatement","src":"1847:25:23"}]}}]},"documentation":{"id":3349,"nodeType":"StructuredDocumentation","src":"1604:79:23","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":3371,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:23","nodeType":"FunctionDefinition","parameters":{"id":3350,"nodeType":"ParameterList","parameters":[],"src":"1716:2:23"},"returnParameters":{"id":3351,"nodeType":"ParameterList","parameters":[],"src":"1733:0:23"},"scope":3400,"src":"1688:201:23","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[68],"body":{"id":3388,"nodeType":"Block","src":"2008:353:23","statements":[{"expression":{"arguments":[{"arguments":[{"id":3383,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3329,"src":"2320:22:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3384,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3374,"src":"2344:8:23","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":3381,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:23","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:23","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:23","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3380,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:23","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:23","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3379,"id":3387,"nodeType":"Return","src":"2286:68:23"}]},"documentation":{"id":3372,"nodeType":"StructuredDocumentation","src":"1895:31:23","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":3389,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:23","nodeType":"FunctionDefinition","overrides":{"id":3376,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:23"},"parameters":{"id":3375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3374,"mutability":"mutable","name":"selector","nameLocation":"1959:8:23","nodeType":"VariableDeclaration","scope":3389,"src":"1952:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":3373,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:23","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:23"},"returnParameters":{"id":3379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3389,"src":"1999:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:23"},"scope":3400,"src":"1931:430:23","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":3390,"nodeType":"StructuredDocumentation","src":"2367:304:23","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":3399,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:23","nodeType":"FunctionDefinition","parameters":{"id":3395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3392,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:23","nodeType":"VariableDeclaration","scope":3399,"src":"2697:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:23","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3394,"mutability":"mutable","name":"user","nameLocation":"2723:4:23","nodeType":"VariableDeclaration","scope":3399,"src":"2715:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3393,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:23"},"returnParameters":{"id":3398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3397,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3399,"src":"2760:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3396,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:23"},"scope":3400,"src":"2676:90:23","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":3401,"src":"589:2179:23","usedErrors":[60],"usedEvents":[]}],"src":"46:2723:23"},"id":23},"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol","exportedSymbols":{"BaseSplitCodeFactory":[3606],"CodeDeployer":[3680],"Create2":[7564]},"id":3607,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3402,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol","file":"./CodeDeployer.sol","id":3403,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3607,"sourceUnit":3681,"src":"72:28:24","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Create2.sol","file":"@openzeppelin/contracts/utils/Create2.sol","id":3405,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3607,"sourceUnit":7565,"src":"101:68:24","symbolAliases":[{"foreign":{"id":3404,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"110:7:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BaseSplitCodeFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":3406,"nodeType":"StructuredDocumentation","src":"171:294:24","text":" @dev Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when\n the contract's creation code grows close to 24kB.\n Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB."},"fullyImplemented":true,"id":3606,"linearizedBaseContracts":[3606],"name":"BaseSplitCodeFactory","nameLocation":"475:20:24","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":3408,"mutability":"immutable","name":"_creationCodeContractA","nameLocation":"940:22:24","nodeType":"VariableDeclaration","scope":3606,"src":"914:48:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3407,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":3410,"mutability":"immutable","name":"_creationCodeSizeA","nameLocation":"994:18:24","nodeType":"VariableDeclaration","scope":3606,"src":"968:44:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3409,"name":"uint256","nodeType":"ElementaryTypeName","src":"968:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":3412,"mutability":"immutable","name":"_creationCodeContractB","nameLocation":"1045:22:24","nodeType":"VariableDeclaration","scope":3606,"src":"1019:48:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3411,"name":"address","nodeType":"ElementaryTypeName","src":"1019:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":3414,"mutability":"immutable","name":"_creationCodeSizeB","nameLocation":"1099:18:24","nodeType":"VariableDeclaration","scope":3606,"src":"1073:44:24","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3413,"name":"uint256","nodeType":"ElementaryTypeName","src":"1073:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":3481,"nodeType":"Block","src":"1290:3308:24","statements":[{"assignments":[3421],"declarations":[{"constant":false,"id":3421,"mutability":"mutable","name":"creationCodeSize","nameLocation":"1308:16:24","nodeType":"VariableDeclaration","scope":3481,"src":"1300:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3420,"name":"uint256","nodeType":"ElementaryTypeName","src":"1300:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3424,"initialValue":{"expression":{"id":3422,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3417,"src":"1327:12:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1340:6:24","memberName":"length","nodeType":"MemberAccess","src":"1327:19:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1300:46:24"},{"assignments":[3426],"declarations":[{"constant":false,"id":3426,"mutability":"mutable","name":"creationCodeSizeA","nameLocation":"1682:17:24","nodeType":"VariableDeclaration","scope":3481,"src":"1674:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1674:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3430,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3427,"name":"creationCodeSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"1702:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":3428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1721:1:24","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1702:20:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1674:48:24"},{"expression":{"id":3433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3431,"name":"_creationCodeSizeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3410,"src":"1732:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3432,"name":"creationCodeSizeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"1753:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1732:38:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3434,"nodeType":"ExpressionStatement","src":"1732:38:24"},{"assignments":[3436],"declarations":[{"constant":false,"id":3436,"mutability":"mutable","name":"creationCodeSizeB","nameLocation":"1789:17:24","nodeType":"VariableDeclaration","scope":3481,"src":"1781:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3435,"name":"uint256","nodeType":"ElementaryTypeName","src":"1781:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3440,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3437,"name":"creationCodeSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3421,"src":"1809:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3438,"name":"creationCodeSizeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3426,"src":"1828:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1809:36:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1781:64:24"},{"expression":{"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3441,"name":"_creationCodeSizeB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3414,"src":"1855:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3442,"name":"creationCodeSizeB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3436,"src":"1876:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1855:38:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3444,"nodeType":"ExpressionStatement","src":"1855:38:24"},{"assignments":[3446],"declarations":[{"constant":false,"id":3446,"mutability":"mutable","name":"creationCodeA","nameLocation":"2469:13:24","nodeType":"VariableDeclaration","scope":3481,"src":"2456:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3445,"name":"bytes","nodeType":"ElementaryTypeName","src":"2456:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3447,"nodeType":"VariableDeclarationStatement","src":"2456:26:24"},{"AST":{"nativeSrc":"2501:106:24","nodeType":"YulBlock","src":"2501:106:24","statements":[{"nativeSrc":"2515:29:24","nodeType":"YulAssignment","src":"2515:29:24","value":{"name":"creationCode","nativeSrc":"2532:12:24","nodeType":"YulIdentifier","src":"2532:12:24"},"variableNames":[{"name":"creationCodeA","nativeSrc":"2515:13:24","nodeType":"YulIdentifier","src":"2515:13:24"}]},{"expression":{"arguments":[{"name":"creationCodeA","nativeSrc":"2564:13:24","nodeType":"YulIdentifier","src":"2564:13:24"},{"name":"creationCodeSizeA","nativeSrc":"2579:17:24","nodeType":"YulIdentifier","src":"2579:17:24"}],"functionName":{"name":"mstore","nativeSrc":"2557:6:24","nodeType":"YulIdentifier","src":"2557:6:24"},"nativeSrc":"2557:40:24","nodeType":"YulFunctionCall","src":"2557:40:24"},"nativeSrc":"2557:40:24","nodeType":"YulExpressionStatement","src":"2557:40:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3417,"isOffset":false,"isSlot":false,"src":"2532:12:24","valueSize":1},{"declaration":3446,"isOffset":false,"isSlot":false,"src":"2515:13:24","valueSize":1},{"declaration":3446,"isOffset":false,"isSlot":false,"src":"2564:13:24","valueSize":1},{"declaration":3426,"isOffset":false,"isSlot":false,"src":"2579:17:24","valueSize":1}],"id":3448,"nodeType":"InlineAssembly","src":"2492:115:24"},{"assignments":[3450],"declarations":[{"constant":false,"id":3450,"mutability":"mutable","name":"preventExecution","nameLocation":"2956:16:24","nodeType":"VariableDeclaration","scope":3481,"src":"2951:21:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3449,"name":"bool","nodeType":"ElementaryTypeName","src":"2951:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3452,"initialValue":{"hexValue":"66616c7365","id":3451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2975:5:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"2951:29:24"},{"expression":{"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"_creationCodeContractA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3408,"src":"2991:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3456,"name":"creationCodeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"3036:13:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3457,"name":"preventExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"3051:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3454,"name":"CodeDeployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"3016:12:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CodeDeployer_$3680_$","typeString":"type(library CodeDeployer)"}},"id":3455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3029:6:24","memberName":"deploy","nodeType":"MemberAccess","referencedDeclaration":3679,"src":"3016:19:24","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bool_$returns$_t_address_$","typeString":"function (bytes memory,bool) returns (address)"}},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3016:52:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2991:77:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3460,"nodeType":"ExpressionStatement","src":"2991:77:24"},{"assignments":[3462],"declarations":[{"constant":false,"id":3462,"mutability":"mutable","name":"creationCodeB","nameLocation":"3369:13:24","nodeType":"VariableDeclaration","scope":3481,"src":"3356:26:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3461,"name":"bytes","nodeType":"ElementaryTypeName","src":"3356:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3463,"nodeType":"VariableDeclarationStatement","src":"3356:26:24"},{"assignments":[3465],"declarations":[{"constant":false,"id":3465,"mutability":"mutable","name":"lastByteA","nameLocation":"3400:9:24","nodeType":"VariableDeclaration","scope":3481,"src":"3392:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3392:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3466,"nodeType":"VariableDeclarationStatement","src":"3392:17:24"},{"AST":{"nativeSrc":"3429:323:24","nodeType":"YulBlock","src":"3429:323:24","statements":[{"nativeSrc":"3590:53:24","nodeType":"YulAssignment","src":"3590:53:24","value":{"arguments":[{"name":"creationCode","nativeSrc":"3611:12:24","nodeType":"YulIdentifier","src":"3611:12:24"},{"name":"creationCodeSizeA","nativeSrc":"3625:17:24","nodeType":"YulIdentifier","src":"3625:17:24"}],"functionName":{"name":"add","nativeSrc":"3607:3:24","nodeType":"YulIdentifier","src":"3607:3:24"},"nativeSrc":"3607:36:24","nodeType":"YulFunctionCall","src":"3607:36:24"},"variableNames":[{"name":"creationCodeB","nativeSrc":"3590:13:24","nodeType":"YulIdentifier","src":"3590:13:24"}]},{"nativeSrc":"3656:33:24","nodeType":"YulAssignment","src":"3656:33:24","value":{"arguments":[{"name":"creationCodeB","nativeSrc":"3675:13:24","nodeType":"YulIdentifier","src":"3675:13:24"}],"functionName":{"name":"mload","nativeSrc":"3669:5:24","nodeType":"YulIdentifier","src":"3669:5:24"},"nativeSrc":"3669:20:24","nodeType":"YulFunctionCall","src":"3669:20:24"},"variableNames":[{"name":"lastByteA","nativeSrc":"3656:9:24","nodeType":"YulIdentifier","src":"3656:9:24"}]},{"expression":{"arguments":[{"name":"creationCodeB","nativeSrc":"3709:13:24","nodeType":"YulIdentifier","src":"3709:13:24"},{"name":"creationCodeSizeB","nativeSrc":"3724:17:24","nodeType":"YulIdentifier","src":"3724:17:24"}],"functionName":{"name":"mstore","nativeSrc":"3702:6:24","nodeType":"YulIdentifier","src":"3702:6:24"},"nativeSrc":"3702:40:24","nodeType":"YulFunctionCall","src":"3702:40:24"},"nativeSrc":"3702:40:24","nodeType":"YulExpressionStatement","src":"3702:40:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3417,"isOffset":false,"isSlot":false,"src":"3611:12:24","valueSize":1},{"declaration":3462,"isOffset":false,"isSlot":false,"src":"3590:13:24","valueSize":1},{"declaration":3462,"isOffset":false,"isSlot":false,"src":"3675:13:24","valueSize":1},{"declaration":3462,"isOffset":false,"isSlot":false,"src":"3709:13:24","valueSize":1},{"declaration":3426,"isOffset":false,"isSlot":false,"src":"3625:17:24","valueSize":1},{"declaration":3436,"isOffset":false,"isSlot":false,"src":"3724:17:24","valueSize":1},{"declaration":3465,"isOffset":false,"isSlot":false,"src":"3656:9:24","valueSize":1}],"id":3467,"nodeType":"InlineAssembly","src":"3420:332:24"},{"expression":{"id":3470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3468,"name":"preventExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"4233:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4252:4:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4233:23:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3471,"nodeType":"ExpressionStatement","src":"4233:23:24"},{"expression":{"id":3478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3472,"name":"_creationCodeContractB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"4266:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3475,"name":"creationCodeB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3462,"src":"4311:13:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":3476,"name":"preventExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"4326:16:24","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":3473,"name":"CodeDeployer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3680,"src":"4291:12:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_CodeDeployer_$3680_$","typeString":"type(library CodeDeployer)"}},"id":3474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4304:6:24","memberName":"deploy","nodeType":"MemberAccess","referencedDeclaration":3679,"src":"4291:19:24","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bool_$returns$_t_address_$","typeString":"function (bytes memory,bool) returns (address)"}},"id":3477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4291:52:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4266:77:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3479,"nodeType":"ExpressionStatement","src":"4266:77:24"},{"AST":{"nativeSrc":"4484:108:24","nodeType":"YulBlock","src":"4484:108:24","statements":[{"expression":{"arguments":[{"name":"creationCodeA","nativeSrc":"4505:13:24","nodeType":"YulIdentifier","src":"4505:13:24"},{"name":"creationCodeSize","nativeSrc":"4520:16:24","nodeType":"YulIdentifier","src":"4520:16:24"}],"functionName":{"name":"mstore","nativeSrc":"4498:6:24","nodeType":"YulIdentifier","src":"4498:6:24"},"nativeSrc":"4498:39:24","nodeType":"YulFunctionCall","src":"4498:39:24"},"nativeSrc":"4498:39:24","nodeType":"YulExpressionStatement","src":"4498:39:24"},{"expression":{"arguments":[{"name":"creationCodeB","nativeSrc":"4557:13:24","nodeType":"YulIdentifier","src":"4557:13:24"},{"name":"lastByteA","nativeSrc":"4572:9:24","nodeType":"YulIdentifier","src":"4572:9:24"}],"functionName":{"name":"mstore","nativeSrc":"4550:6:24","nodeType":"YulIdentifier","src":"4550:6:24"},"nativeSrc":"4550:32:24","nodeType":"YulFunctionCall","src":"4550:32:24"},"nativeSrc":"4550:32:24","nodeType":"YulExpressionStatement","src":"4550:32:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3446,"isOffset":false,"isSlot":false,"src":"4505:13:24","valueSize":1},{"declaration":3462,"isOffset":false,"isSlot":false,"src":"4557:13:24","valueSize":1},{"declaration":3421,"isOffset":false,"isSlot":false,"src":"4520:16:24","valueSize":1},{"declaration":3465,"isOffset":false,"isSlot":false,"src":"4572:9:24","valueSize":1}],"id":3480,"nodeType":"InlineAssembly","src":"4475:117:24"}]},"documentation":{"id":3415,"nodeType":"StructuredDocumentation","src":"1124:122:24","text":" @dev The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`."},"id":3482,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3417,"mutability":"mutable","name":"creationCode","nameLocation":"1276:12:24","nodeType":"VariableDeclaration","scope":3482,"src":"1263:25:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3416,"name":"bytes","nodeType":"ElementaryTypeName","src":"1263:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1262:27:24"},"returnParameters":{"id":3419,"nodeType":"ParameterList","parameters":[],"src":"1290:0:24"},"scope":3606,"src":"1251:3347:24","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3494,"nodeType":"Block","src":"4813:72:24","statements":[{"expression":{"components":[{"id":3490,"name":"_creationCodeContractA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3408,"src":"4831:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3491,"name":"_creationCodeContractB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"4855:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":3492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4830:48:24","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$","typeString":"tuple(address,address)"}},"functionReturnParameters":3489,"id":3493,"nodeType":"Return","src":"4823:55:24"}]},"documentation":{"id":3483,"nodeType":"StructuredDocumentation","src":"4604:109:24","text":"@dev Returns the two addresses where the creation code of the contract created by this factory is stored."},"functionSelector":"174481fa","id":3495,"implemented":true,"kind":"function","modifiers":[],"name":"getCreationCodeContracts","nameLocation":"4727:24:24","nodeType":"FunctionDefinition","parameters":{"id":3484,"nodeType":"ParameterList","parameters":[],"src":"4751:2:24"},"returnParameters":{"id":3489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3486,"mutability":"mutable","name":"contractA","nameLocation":"4783:9:24","nodeType":"VariableDeclaration","scope":3495,"src":"4775:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3485,"name":"address","nodeType":"ElementaryTypeName","src":"4775:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3488,"mutability":"mutable","name":"contractB","nameLocation":"4802:9:24","nodeType":"VariableDeclaration","scope":3495,"src":"4794:17:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3487,"name":"address","nodeType":"ElementaryTypeName","src":"4794:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4774:38:24"},"scope":3606,"src":"4718:167:24","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3505,"nodeType":"Block","src":"5030:52:24","statements":[{"expression":{"arguments":[{"hexValue":"","id":3502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5072:2:24","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":3501,"name":"_getCreationCodeWithArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"5047:24:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bytes memory)"}},"id":3503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5047:28:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":3500,"id":3504,"nodeType":"Return","src":"5040:35:24"}]},"documentation":{"id":3496,"nodeType":"StructuredDocumentation","src":"4891:72:24","text":"@dev Returns the creation code of the contract this factory creates."},"functionSelector":"00c194db","id":3506,"implemented":true,"kind":"function","modifiers":[],"name":"getCreationCode","nameLocation":"4977:15:24","nodeType":"FunctionDefinition","parameters":{"id":3497,"nodeType":"ParameterList","parameters":[],"src":"4992:2:24"},"returnParameters":{"id":3500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3499,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3506,"src":"5016:12:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3498,"name":"bytes","nodeType":"ElementaryTypeName","src":"5016:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5015:14:24"},"scope":3606,"src":"4968:114:24","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":3556,"nodeType":"Block","src":"5317:2774:24","statements":[{"assignments":[3515],"declarations":[{"constant":false,"id":3515,"mutability":"mutable","name":"creationCodeContractA","nameLocation":"6136:21:24","nodeType":"VariableDeclaration","scope":3556,"src":"6128:29:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3514,"name":"address","nodeType":"ElementaryTypeName","src":"6128:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3517,"initialValue":{"id":3516,"name":"_creationCodeContractA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3408,"src":"6160:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6128:54:24"},{"assignments":[3519],"declarations":[{"constant":false,"id":3519,"mutability":"mutable","name":"creationCodeSizeA","nameLocation":"6200:17:24","nodeType":"VariableDeclaration","scope":3556,"src":"6192:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3518,"name":"uint256","nodeType":"ElementaryTypeName","src":"6192:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3521,"initialValue":{"id":3520,"name":"_creationCodeSizeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3410,"src":"6220:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6192:46:24"},{"assignments":[3523],"declarations":[{"constant":false,"id":3523,"mutability":"mutable","name":"creationCodeContractB","nameLocation":"6256:21:24","nodeType":"VariableDeclaration","scope":3556,"src":"6248:29:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3522,"name":"address","nodeType":"ElementaryTypeName","src":"6248:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3525,"initialValue":{"id":3524,"name":"_creationCodeContractB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3412,"src":"6280:22:24","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6248:54:24"},{"assignments":[3527],"declarations":[{"constant":false,"id":3527,"mutability":"mutable","name":"creationCodeSizeB","nameLocation":"6320:17:24","nodeType":"VariableDeclaration","scope":3556,"src":"6312:25:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3526,"name":"uint256","nodeType":"ElementaryTypeName","src":"6312:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3529,"initialValue":{"id":3528,"name":"_creationCodeSizeB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3414,"src":"6340:18:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6312:46:24"},{"assignments":[3531],"declarations":[{"constant":false,"id":3531,"mutability":"mutable","name":"creationCodeSize","nameLocation":"6377:16:24","nodeType":"VariableDeclaration","scope":3556,"src":"6369:24:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3530,"name":"uint256","nodeType":"ElementaryTypeName","src":"6369:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3535,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3532,"name":"creationCodeSizeA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3519,"src":"6396:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3533,"name":"creationCodeSizeB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3527,"src":"6416:17:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6396:37:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6369:64:24"},{"assignments":[3537],"declarations":[{"constant":false,"id":3537,"mutability":"mutable","name":"constructorArgsSize","nameLocation":"6451:19:24","nodeType":"VariableDeclaration","scope":3556,"src":"6443:27:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3536,"name":"uint256","nodeType":"ElementaryTypeName","src":"6443:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3540,"initialValue":{"expression":{"id":3538,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3509,"src":"6473:15:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6489:6:24","memberName":"length","nodeType":"MemberAccess","src":"6473:22:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6443:52:24"},{"assignments":[3542],"declarations":[{"constant":false,"id":3542,"mutability":"mutable","name":"codeSize","nameLocation":"6514:8:24","nodeType":"VariableDeclaration","scope":3556,"src":"6506:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3541,"name":"uint256","nodeType":"ElementaryTypeName","src":"6506:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3546,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3543,"name":"creationCodeSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3531,"src":"6525:16:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3544,"name":"constructorArgsSize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3537,"src":"6544:19:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6525:38:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6506:57:24"},{"AST":{"nativeSrc":"6583:835:24","nodeType":"YulBlock","src":"6583:835:24","statements":[{"nativeSrc":"6833:19:24","nodeType":"YulAssignment","src":"6833:19:24","value":{"arguments":[{"kind":"number","nativeSrc":"6847:4:24","nodeType":"YulLiteral","src":"6847:4:24","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"6841:5:24","nodeType":"YulIdentifier","src":"6841:5:24"},"nativeSrc":"6841:11:24","nodeType":"YulFunctionCall","src":"6841:11:24"},"variableNames":[{"name":"code","nativeSrc":"6833:4:24","nodeType":"YulIdentifier","src":"6833:4:24"}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"6872:4:24","nodeType":"YulLiteral","src":"6872:4:24","type":"","value":"0x40"},{"arguments":[{"name":"code","nativeSrc":"6882:4:24","nodeType":"YulIdentifier","src":"6882:4:24"},{"arguments":[{"name":"codeSize","nativeSrc":"6892:8:24","nodeType":"YulIdentifier","src":"6892:8:24"},{"kind":"number","nativeSrc":"6902:2:24","nodeType":"YulLiteral","src":"6902:2:24","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"6888:3:24","nodeType":"YulIdentifier","src":"6888:3:24"},"nativeSrc":"6888:17:24","nodeType":"YulFunctionCall","src":"6888:17:24"}],"functionName":{"name":"add","nativeSrc":"6878:3:24","nodeType":"YulIdentifier","src":"6878:3:24"},"nativeSrc":"6878:28:24","nodeType":"YulFunctionCall","src":"6878:28:24"}],"functionName":{"name":"mstore","nativeSrc":"6865:6:24","nodeType":"YulIdentifier","src":"6865:6:24"},"nativeSrc":"6865:42:24","nodeType":"YulFunctionCall","src":"6865:42:24"},"nativeSrc":"6865:42:24","nodeType":"YulExpressionStatement","src":"6865:42:24"},{"expression":{"arguments":[{"name":"code","nativeSrc":"7007:4:24","nodeType":"YulIdentifier","src":"7007:4:24"},{"name":"codeSize","nativeSrc":"7013:8:24","nodeType":"YulIdentifier","src":"7013:8:24"}],"functionName":{"name":"mstore","nativeSrc":"7000:6:24","nodeType":"YulIdentifier","src":"7000:6:24"},"nativeSrc":"7000:22:24","nodeType":"YulFunctionCall","src":"7000:22:24"},"nativeSrc":"7000:22:24","nodeType":"YulExpressionStatement","src":"7000:22:24"},{"nativeSrc":"7109:30:24","nodeType":"YulVariableDeclaration","src":"7109:30:24","value":{"arguments":[{"name":"code","nativeSrc":"7130:4:24","nodeType":"YulIdentifier","src":"7130:4:24"},{"kind":"number","nativeSrc":"7136:2:24","nodeType":"YulLiteral","src":"7136:2:24","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7126:3:24","nodeType":"YulIdentifier","src":"7126:3:24"},"nativeSrc":"7126:13:24","nodeType":"YulFunctionCall","src":"7126:13:24"},"variables":[{"name":"dataStart","nativeSrc":"7113:9:24","nodeType":"YulTypedName","src":"7113:9:24","type":""}]},{"expression":{"arguments":[{"name":"creationCodeContractA","nativeSrc":"7164:21:24","nodeType":"YulIdentifier","src":"7164:21:24"},{"name":"dataStart","nativeSrc":"7187:9:24","nodeType":"YulIdentifier","src":"7187:9:24"},{"kind":"number","nativeSrc":"7198:1:24","nodeType":"YulLiteral","src":"7198:1:24","type":"","value":"0"},{"name":"creationCodeSizeA","nativeSrc":"7201:17:24","nodeType":"YulIdentifier","src":"7201:17:24"}],"functionName":{"name":"extcodecopy","nativeSrc":"7152:11:24","nodeType":"YulIdentifier","src":"7152:11:24"},"nativeSrc":"7152:67:24","nodeType":"YulFunctionCall","src":"7152:67:24"},"nativeSrc":"7152:67:24","nodeType":"YulExpressionStatement","src":"7152:67:24"},{"expression":{"arguments":[{"name":"creationCodeContractB","nativeSrc":"7329:21:24","nodeType":"YulIdentifier","src":"7329:21:24"},{"arguments":[{"name":"dataStart","nativeSrc":"7356:9:24","nodeType":"YulIdentifier","src":"7356:9:24"},{"name":"creationCodeSizeA","nativeSrc":"7367:17:24","nodeType":"YulIdentifier","src":"7367:17:24"}],"functionName":{"name":"add","nativeSrc":"7352:3:24","nodeType":"YulIdentifier","src":"7352:3:24"},"nativeSrc":"7352:33:24","nodeType":"YulFunctionCall","src":"7352:33:24"},{"kind":"number","nativeSrc":"7387:1:24","nodeType":"YulLiteral","src":"7387:1:24","type":"","value":"1"},{"name":"creationCodeSizeB","nativeSrc":"7390:17:24","nodeType":"YulIdentifier","src":"7390:17:24"}],"functionName":{"name":"extcodecopy","nativeSrc":"7317:11:24","nodeType":"YulIdentifier","src":"7317:11:24"},"nativeSrc":"7317:91:24","nodeType":"YulFunctionCall","src":"7317:91:24"},"nativeSrc":"7317:91:24","nodeType":"YulExpressionStatement","src":"7317:91:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3512,"isOffset":false,"isSlot":false,"src":"6833:4:24","valueSize":1},{"declaration":3512,"isOffset":false,"isSlot":false,"src":"6882:4:24","valueSize":1},{"declaration":3512,"isOffset":false,"isSlot":false,"src":"7007:4:24","valueSize":1},{"declaration":3512,"isOffset":false,"isSlot":false,"src":"7130:4:24","valueSize":1},{"declaration":3542,"isOffset":false,"isSlot":false,"src":"6892:8:24","valueSize":1},{"declaration":3542,"isOffset":false,"isSlot":false,"src":"7013:8:24","valueSize":1},{"declaration":3515,"isOffset":false,"isSlot":false,"src":"7164:21:24","valueSize":1},{"declaration":3523,"isOffset":false,"isSlot":false,"src":"7329:21:24","valueSize":1},{"declaration":3519,"isOffset":false,"isSlot":false,"src":"7201:17:24","valueSize":1},{"declaration":3519,"isOffset":false,"isSlot":false,"src":"7367:17:24","valueSize":1},{"declaration":3527,"isOffset":false,"isSlot":false,"src":"7390:17:24","valueSize":1}],"id":3547,"nodeType":"InlineAssembly","src":"6574:844:24"},{"assignments":[3549],"declarations":[{"constant":false,"id":3549,"mutability":"mutable","name":"constructorArgsDataPtr","nameLocation":"7654:22:24","nodeType":"VariableDeclaration","scope":3556,"src":"7646:30:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3548,"name":"uint256","nodeType":"ElementaryTypeName","src":"7646:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3550,"nodeType":"VariableDeclarationStatement","src":"7646:30:24"},{"assignments":[3552],"declarations":[{"constant":false,"id":3552,"mutability":"mutable","name":"constructorArgsCodeDataPtr","nameLocation":"7694:26:24","nodeType":"VariableDeclaration","scope":3556,"src":"7686:34:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3551,"name":"uint256","nodeType":"ElementaryTypeName","src":"7686:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3553,"nodeType":"VariableDeclarationStatement","src":"7686:34:24"},{"AST":{"nativeSrc":"7739:153:24","nodeType":"YulBlock","src":"7739:153:24","statements":[{"nativeSrc":"7753:50:24","nodeType":"YulAssignment","src":"7753:50:24","value":{"arguments":[{"name":"constructorArgs","nativeSrc":"7783:15:24","nodeType":"YulIdentifier","src":"7783:15:24"},{"kind":"number","nativeSrc":"7800:2:24","nodeType":"YulLiteral","src":"7800:2:24","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7779:3:24","nodeType":"YulIdentifier","src":"7779:3:24"},"nativeSrc":"7779:24:24","nodeType":"YulFunctionCall","src":"7779:24:24"},"variableNames":[{"name":"constructorArgsDataPtr","nativeSrc":"7753:22:24","nodeType":"YulIdentifier","src":"7753:22:24"}]},{"nativeSrc":"7816:66:24","nodeType":"YulAssignment","src":"7816:66:24","value":{"arguments":[{"arguments":[{"name":"code","nativeSrc":"7854:4:24","nodeType":"YulIdentifier","src":"7854:4:24"},{"kind":"number","nativeSrc":"7860:2:24","nodeType":"YulLiteral","src":"7860:2:24","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"7850:3:24","nodeType":"YulIdentifier","src":"7850:3:24"},"nativeSrc":"7850:13:24","nodeType":"YulFunctionCall","src":"7850:13:24"},{"name":"creationCodeSize","nativeSrc":"7865:16:24","nodeType":"YulIdentifier","src":"7865:16:24"}],"functionName":{"name":"add","nativeSrc":"7846:3:24","nodeType":"YulIdentifier","src":"7846:3:24"},"nativeSrc":"7846:36:24","nodeType":"YulFunctionCall","src":"7846:36:24"},"variableNames":[{"name":"constructorArgsCodeDataPtr","nativeSrc":"7816:26:24","nodeType":"YulIdentifier","src":"7816:26:24"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3512,"isOffset":false,"isSlot":false,"src":"7854:4:24","valueSize":1},{"declaration":3509,"isOffset":false,"isSlot":false,"src":"7783:15:24","valueSize":1},{"declaration":3552,"isOffset":false,"isSlot":false,"src":"7816:26:24","valueSize":1},{"declaration":3549,"isOffset":false,"isSlot":false,"src":"7753:22:24","valueSize":1},{"declaration":3531,"isOffset":false,"isSlot":false,"src":"7865:16:24","valueSize":1}],"id":3554,"nodeType":"InlineAssembly","src":"7730:162:24"},{"AST":{"nativeSrc":"7983:102:24","nodeType":"YulBlock","src":"7983:102:24","statements":[{"expression":{"arguments":[{"name":"constructorArgsCodeDataPtr","nativeSrc":"8003:26:24","nodeType":"YulIdentifier","src":"8003:26:24"},{"name":"constructorArgsDataPtr","nativeSrc":"8031:22:24","nodeType":"YulIdentifier","src":"8031:22:24"},{"name":"constructorArgsSize","nativeSrc":"8055:19:24","nodeType":"YulIdentifier","src":"8055:19:24"}],"functionName":{"name":"mcopy","nativeSrc":"7997:5:24","nodeType":"YulIdentifier","src":"7997:5:24"},"nativeSrc":"7997:78:24","nodeType":"YulFunctionCall","src":"7997:78:24"},"nativeSrc":"7997:78:24","nodeType":"YulExpressionStatement","src":"7997:78:24"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3552,"isOffset":false,"isSlot":false,"src":"8003:26:24","valueSize":1},{"declaration":3549,"isOffset":false,"isSlot":false,"src":"8031:22:24","valueSize":1},{"declaration":3537,"isOffset":false,"isSlot":false,"src":"8055:19:24","valueSize":1}],"flags":["memory-safe"],"id":3555,"nodeType":"InlineAssembly","src":"7958:127:24"}]},"documentation":{"id":3507,"nodeType":"StructuredDocumentation","src":"5088:119:24","text":" @dev Returns the creation code that will result in a contract being deployed with `constructorArgs`."},"id":3557,"implemented":true,"kind":"function","modifiers":[],"name":"_getCreationCodeWithArgs","nameLocation":"5221:24:24","nodeType":"FunctionDefinition","parameters":{"id":3510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3509,"mutability":"mutable","name":"constructorArgs","nameLocation":"5259:15:24","nodeType":"VariableDeclaration","scope":3557,"src":"5246:28:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3508,"name":"bytes","nodeType":"ElementaryTypeName","src":"5246:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5245:30:24"},"returnParameters":{"id":3513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3512,"mutability":"mutable","name":"code","nameLocation":"5311:4:24","nodeType":"VariableDeclaration","scope":3557,"src":"5298:17:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3511,"name":"bytes","nodeType":"ElementaryTypeName","src":"5298:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5297:19:24"},"scope":3606,"src":"5212:2879:24","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":3580,"nodeType":"Block","src":"8429:141:24","statements":[{"assignments":[3568],"declarations":[{"constant":false,"id":3568,"mutability":"mutable","name":"creationCode","nameLocation":"8452:12:24","nodeType":"VariableDeclaration","scope":3580,"src":"8439:25:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3567,"name":"bytes","nodeType":"ElementaryTypeName","src":"8439:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3572,"initialValue":{"arguments":[{"id":3570,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3560,"src":"8492:15:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3569,"name":"_getCreationCodeWithArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"8467:24:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bytes memory)"}},"id":3571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8467:41:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"8439:69:24"},{"expression":{"arguments":[{"hexValue":"30","id":3575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8541:1:24","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":3576,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3562,"src":"8544:4:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3577,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3568,"src":"8550:12:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":3573,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"8526:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Create2_$7564_$","typeString":"type(library Create2)"}},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8534:6:24","memberName":"deploy","nodeType":"MemberAccess","referencedDeclaration":7529,"src":"8526:14:24","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (uint256,bytes32,bytes memory) returns (address)"}},"id":3578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8526:37:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3566,"id":3579,"nodeType":"Return","src":"8519:44:24"}]},"documentation":{"id":3558,"nodeType":"StructuredDocumentation","src":"8097:230:24","text":" @dev Deploys a contract with constructor arguments and a user-provided salt, using the create2 opcode.\n To create `constructorArgs`, call `abi.encode()` with the contract's constructor arguments, in order."},"id":3581,"implemented":true,"kind":"function","modifiers":[],"name":"_create2","nameLocation":"8341:8:24","nodeType":"FunctionDefinition","parameters":{"id":3563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3560,"mutability":"mutable","name":"constructorArgs","nameLocation":"8363:15:24","nodeType":"VariableDeclaration","scope":3581,"src":"8350:28:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3559,"name":"bytes","nodeType":"ElementaryTypeName","src":"8350:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3562,"mutability":"mutable","name":"salt","nameLocation":"8388:4:24","nodeType":"VariableDeclaration","scope":3581,"src":"8380:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3561,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8380:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8349:44:24"},"returnParameters":{"id":3566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3581,"src":"8420:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3564,"name":"address","nodeType":"ElementaryTypeName","src":"8420:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8419:9:24"},"scope":3606,"src":"8332:238:24","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":3604,"nodeType":"Block","src":"8683:157:24","statements":[{"assignments":[3591],"declarations":[{"constant":false,"id":3591,"mutability":"mutable","name":"creationCode","nameLocation":"8706:12:24","nodeType":"VariableDeclaration","scope":3604,"src":"8693:25:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3590,"name":"bytes","nodeType":"ElementaryTypeName","src":"8693:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3595,"initialValue":{"arguments":[{"id":3593,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3583,"src":"8746:15:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3592,"name":"_getCreationCodeWithArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3557,"src":"8721:24:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bytes memory)"}},"id":3594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8721:41:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"8693:69:24"},{"expression":{"arguments":[{"id":3598,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3585,"src":"8803:4:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":3600,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3591,"src":"8819:12:24","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3599,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"8809:9:24","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8809:23:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3596,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7564,"src":"8780:7:24","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Create2_$7564_$","typeString":"type(library Create2)"}},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8788:14:24","memberName":"computeAddress","nodeType":"MemberAccess","referencedDeclaration":7549,"src":"8780:22:24","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,bytes32) view returns (address)"}},"id":3602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8780:53:24","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":3589,"id":3603,"nodeType":"Return","src":"8773:60:24"}]},"id":3605,"implemented":true,"kind":"function","modifiers":[],"name":"_getDeploymentAddress","nameLocation":"8585:21:24","nodeType":"FunctionDefinition","parameters":{"id":3586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3583,"mutability":"mutable","name":"constructorArgs","nameLocation":"8620:15:24","nodeType":"VariableDeclaration","scope":3605,"src":"8607:28:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3582,"name":"bytes","nodeType":"ElementaryTypeName","src":"8607:5:24","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3585,"mutability":"mutable","name":"salt","nameLocation":"8645:4:24","nodeType":"VariableDeclaration","scope":3605,"src":"8637:12:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3584,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8637:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8606:44:24"},"returnParameters":{"id":3589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3605,"src":"8674:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3587,"name":"address","nodeType":"ElementaryTypeName","src":"8674:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8673:9:24"},"scope":3606,"src":"8576:264:24","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":3607,"src":"466:8376:24","usedErrors":[3643],"usedEvents":[]}],"src":"46:8797:24"},"id":24},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[3638],"IERC20":[7403]},"id":3639,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3608,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3610,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3639,"sourceUnit":7404,"src":"72:72:25","symbolAliases":[{"foreign":{"id":3609,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":3611,"nodeType":"StructuredDocumentation","src":"146:71:25","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":3638,"linearizedBaseContracts":[3638],"name":"CastingHelpers","nameLocation":"225:14:25","nodeType":"ContractDefinition","nodes":[{"body":{"id":3623,"nodeType":"Block","src":"410:140:25","statements":[{"AST":{"nativeSrc":"501:43:25","nodeType":"YulBlock","src":"501:43:25","statements":[{"nativeSrc":"515:19:25","nodeType":"YulAssignment","src":"515:19:25","value":{"name":"addresses","nativeSrc":"525:9:25","nodeType":"YulIdentifier","src":"525:9:25"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:25","nodeType":"YulIdentifier","src":"515:6:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3615,"isOffset":false,"isSlot":false,"src":"525:9:25","valueSize":1},{"declaration":3620,"isOffset":false,"isSlot":false,"src":"515:6:25","valueSize":1}],"flags":["memory-safe"],"id":3622,"nodeType":"InlineAssembly","src":"476:68:25"}]},"documentation":{"id":3612,"nodeType":"StructuredDocumentation","src":"246:66:25","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":3624,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:25","nodeType":"FunctionDefinition","parameters":{"id":3616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3615,"mutability":"mutable","name":"addresses","nameLocation":"352:9:25","nodeType":"VariableDeclaration","scope":3624,"src":"335:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3613,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3614,"nodeType":"ArrayTypeName","src":"335:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:25"},"returnParameters":{"id":3621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3620,"mutability":"mutable","name":"tokens","nameLocation":"402:6:25","nodeType":"VariableDeclaration","scope":3624,"src":"386:22:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3618,"nodeType":"UserDefinedTypeName","pathNode":{"id":3617,"name":"IERC20","nameLocations":["386:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"386:6:25"},"referencedDeclaration":7403,"src":"386:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3619,"nodeType":"ArrayTypeName","src":"386:8:25","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:25"},"scope":3638,"src":"317:233:25","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3636,"nodeType":"Block","src":"712:140:25","statements":[{"AST":{"nativeSrc":"803:43:25","nodeType":"YulBlock","src":"803:43:25","statements":[{"nativeSrc":"817:19:25","nodeType":"YulAssignment","src":"817:19:25","value":{"name":"tokens","nativeSrc":"830:6:25","nodeType":"YulIdentifier","src":"830:6:25"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:25","nodeType":"YulIdentifier","src":"817:9:25"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":3633,"isOffset":false,"isSlot":false,"src":"817:9:25","valueSize":1},{"declaration":3629,"isOffset":false,"isSlot":false,"src":"830:6:25","valueSize":1}],"flags":["memory-safe"],"id":3635,"nodeType":"InlineAssembly","src":"778:68:25"}]},"documentation":{"id":3625,"nodeType":"StructuredDocumentation","src":"556:57:25","text":"@dev Returns an IERC20[] array as an address[] array."},"id":3637,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:25","nodeType":"FunctionDefinition","parameters":{"id":3630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3629,"mutability":"mutable","name":"tokens","nameLocation":"653:6:25","nodeType":"VariableDeclaration","scope":3637,"src":"637:22:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3627,"nodeType":"UserDefinedTypeName","pathNode":{"id":3626,"name":"IERC20","nameLocations":["637:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"637:6:25"},"referencedDeclaration":7403,"src":"637:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3628,"nodeType":"ArrayTypeName","src":"637:8:25","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:25"},"returnParameters":{"id":3634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3633,"mutability":"mutable","name":"addresses","nameLocation":"701:9:25","nodeType":"VariableDeclaration","scope":3637,"src":"684:26:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":3631,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3632,"nodeType":"ArrayTypeName","src":"684:9:25","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:25"},"scope":3638,"src":"618:234:25","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":3639,"src":"217:637:25","usedErrors":[],"usedEvents":[]}],"src":"46:809:25"},"id":25},"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol","exportedSymbols":{"CodeDeployer":[3680]},"id":3681,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3640,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"CodeDeployer","contractDependencies":[],"contractKind":"library","documentation":{"id":3641,"nodeType":"StructuredDocumentation","src":"72:199:26","text":" @dev Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as\n contract code, which can be retrieved via the `extcodecopy` opcode."},"fullyImplemented":true,"id":3680,"linearizedBaseContracts":[3680],"name":"CodeDeployer","nameLocation":"280:12:26","nodeType":"ContractDefinition","nodes":[{"errorSelector":"fef82207","id":3643,"name":"CodeDeploymentFailed","nameLocation":"305:20:26","nodeType":"ErrorDefinition","parameters":{"id":3642,"nodeType":"ParameterList","parameters":[],"src":"325:2:26"},"src":"299:29:26"},{"constant":true,"id":3646,"mutability":"constant","name":"_DEPLOYER_CREATION_CODE","nameLocation":"1783:23:26","nodeType":"VariableDeclaration","scope":3680,"src":"1758:125:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3644,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1758:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307836303230333830333830363032303630303033393630303066336665666566656665666566656665666566656665666566656665666566656665666566656665","id":3645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1817:66:26","typeDescriptions":{"typeIdentifier":"t_rational_43478959162261259322985507790388014220090819270403161015765007512459448090366_by_1","typeString":"int_const 4347...(69 digits omitted)...0366"},"value":"0x602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe"},"visibility":"private"},{"constant":true,"id":3649,"mutability":"constant","name":"_PROTECTED_DEPLOYER_CREATION_CODE","nameLocation":"3629:33:26","nodeType":"VariableDeclaration","scope":3680,"src":"3604:135:26","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3604:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307836306665363030303533363032303338303338303630323036303031333936303031303136303030663366656665666566656665666566656665666566656665","id":3648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3673:66:26","typeDescriptions":{"typeIdentifier":"t_rational_43871475194877038889163795305760172645897152794273359703116171544696555765502_by_1","typeString":"int_const 4387...(69 digits omitted)...5502"},"value":"0x60fe600053602038038060206001396001016000f3fefefefefefefefefefefe"},"visibility":"private"},{"body":{"id":3678,"nodeType":"Block","src":"4237:1365:26","statements":[{"assignments":[3660],"declarations":[{"constant":false,"id":3660,"mutability":"mutable","name":"deployerCreationCode","nameLocation":"4255:20:26","nodeType":"VariableDeclaration","scope":3678,"src":"4247:28:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3659,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4247:7:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3665,"initialValue":{"condition":{"id":3661,"name":"preventExecution","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3654,"src":"4278:16:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3663,"name":"_DEPLOYER_CREATION_CODE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"4333:23:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4278:78:26","trueExpression":{"id":3662,"name":"_PROTECTED_DEPLOYER_CREATION_CODE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3649,"src":"4297:33:26","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4247:109:26"},{"AST":{"nativeSrc":"4681:706:26","nodeType":"YulBlock","src":"4681:706:26","statements":[{"nativeSrc":"4695:29:26","nodeType":"YulVariableDeclaration","src":"4695:29:26","value":{"arguments":[{"name":"code","nativeSrc":"4719:4:26","nodeType":"YulIdentifier","src":"4719:4:26"}],"functionName":{"name":"mload","nativeSrc":"4713:5:26","nodeType":"YulIdentifier","src":"4713:5:26"},"nativeSrc":"4713:11:26","nodeType":"YulFunctionCall","src":"4713:11:26"},"variables":[{"name":"codeLength","nativeSrc":"4699:10:26","nodeType":"YulTypedName","src":"4699:10:26","type":""}]},{"expression":{"arguments":[{"name":"code","nativeSrc":"4953:4:26","nodeType":"YulIdentifier","src":"4953:4:26"},{"name":"deployerCreationCode","nativeSrc":"4959:20:26","nodeType":"YulIdentifier","src":"4959:20:26"}],"functionName":{"name":"mstore","nativeSrc":"4946:6:26","nodeType":"YulIdentifier","src":"4946:6:26"},"nativeSrc":"4946:34:26","nodeType":"YulFunctionCall","src":"4946:34:26"},"nativeSrc":"4946:34:26","nodeType":"YulExpressionStatement","src":"4946:34:26"},{"nativeSrc":"5202:51:26","nodeType":"YulAssignment","src":"5202:51:26","value":{"arguments":[{"kind":"number","nativeSrc":"5224:1:26","nodeType":"YulLiteral","src":"5224:1:26","type":"","value":"0"},{"name":"code","nativeSrc":"5227:4:26","nodeType":"YulIdentifier","src":"5227:4:26"},{"arguments":[{"name":"codeLength","nativeSrc":"5237:10:26","nodeType":"YulIdentifier","src":"5237:10:26"},{"kind":"number","nativeSrc":"5249:2:26","nodeType":"YulLiteral","src":"5249:2:26","type":"","value":"32"}],"functionName":{"name":"add","nativeSrc":"5233:3:26","nodeType":"YulIdentifier","src":"5233:3:26"},"nativeSrc":"5233:19:26","nodeType":"YulFunctionCall","src":"5233:19:26"}],"functionName":{"name":"create","nativeSrc":"5217:6:26","nodeType":"YulIdentifier","src":"5217:6:26"},"nativeSrc":"5217:36:26","nodeType":"YulFunctionCall","src":"5217:36:26"},"variableNames":[{"name":"destination","nativeSrc":"5202:11:26","nodeType":"YulIdentifier","src":"5202:11:26"}]},{"expression":{"arguments":[{"name":"code","nativeSrc":"5360:4:26","nodeType":"YulIdentifier","src":"5360:4:26"},{"name":"codeLength","nativeSrc":"5366:10:26","nodeType":"YulIdentifier","src":"5366:10:26"}],"functionName":{"name":"mstore","nativeSrc":"5353:6:26","nodeType":"YulIdentifier","src":"5353:6:26"},"nativeSrc":"5353:24:26","nodeType":"YulFunctionCall","src":"5353:24:26"},"nativeSrc":"5353:24:26","nodeType":"YulExpressionStatement","src":"5353:24:26"}]},"evmVersion":"cancun","externalReferences":[{"declaration":3652,"isOffset":false,"isSlot":false,"src":"4719:4:26","valueSize":1},{"declaration":3652,"isOffset":false,"isSlot":false,"src":"4953:4:26","valueSize":1},{"declaration":3652,"isOffset":false,"isSlot":false,"src":"5227:4:26","valueSize":1},{"declaration":3652,"isOffset":false,"isSlot":false,"src":"5360:4:26","valueSize":1},{"declaration":3660,"isOffset":false,"isSlot":false,"src":"4959:20:26","valueSize":1},{"declaration":3657,"isOffset":false,"isSlot":false,"src":"5202:11:26","valueSize":1}],"id":3666,"nodeType":"InlineAssembly","src":"4672:715:26"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3667,"name":"destination","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3657,"src":"5515:11:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3670,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5538:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5530:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3668,"name":"address","nodeType":"ElementaryTypeName","src":"5530:7:26","typeDescriptions":{}}},"id":3671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5530:10:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5515:25:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3677,"nodeType":"IfStatement","src":"5511:85:26","trueBody":{"id":3676,"nodeType":"Block","src":"5542:54:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3673,"name":"CodeDeploymentFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"5563:20:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5563:22:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3675,"nodeType":"RevertStatement","src":"5556:29:26"}]}}]},"documentation":{"id":3650,"nodeType":"StructuredDocumentation","src":"3746:389:26","text":" @dev Deploys a contract with `code` as its code, returning the destination address.\n If preventExecution is set, prepend an invalid opcode to ensure the \"contract\" cannot be executed.\n Rather than add a flag, we could simply always prepend the opcode, but there might be use cases where fidelity\n is required.\n Reverts if deployment fails."},"id":3679,"implemented":true,"kind":"function","modifiers":[],"name":"deploy","nameLocation":"4149:6:26","nodeType":"FunctionDefinition","parameters":{"id":3655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3652,"mutability":"mutable","name":"code","nameLocation":"4169:4:26","nodeType":"VariableDeclaration","scope":3679,"src":"4156:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3651,"name":"bytes","nodeType":"ElementaryTypeName","src":"4156:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3654,"mutability":"mutable","name":"preventExecution","nameLocation":"4180:16:26","nodeType":"VariableDeclaration","scope":3679,"src":"4175:21:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3653,"name":"bool","nodeType":"ElementaryTypeName","src":"4175:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4155:42:26"},"returnParameters":{"id":3658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3657,"mutability":"mutable","name":"destination","nameLocation":"4224:11:26","nodeType":"VariableDeclaration","scope":3679,"src":"4216:19:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3656,"name":"address","nodeType":"ElementaryTypeName","src":"4216:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4215:21:26"},"scope":3680,"src":"4140:1462:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":3681,"src":"272:5332:26","usedErrors":[3643],"usedEvents":[]}],"src":"46:5559:26"},"id":26},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","exportedSymbols":{"FactoryWidePauseWindow":[3764]},"id":3765,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3682,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"abstract":false,"baseContracts":[],"canonicalName":"FactoryWidePauseWindow","contractDependencies":[],"contractKind":"contract","documentation":{"id":3683,"nodeType":"StructuredDocumentation","src":"72:730:27","text":" @notice Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\n @dev Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory\n will share the same Pause Window end time, after which both old and new Pools will not be pausable.\n All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer\n period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused\n through this buffer period, and cannot be unpaused.\n When the buffer period expires, it will unpause automatically, and remain permissionless forever after."},"fullyImplemented":true,"id":3764,"linearizedBaseContracts":[3764],"name":"FactoryWidePauseWindow","nameLocation":"812:22:27","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":3690,"mutability":"constant","name":"_MAX_TIMESTAMP","nameLocation":"1030:14:27","nodeType":"VariableDeclaration","scope":3764,"src":"1006:57:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3684,"name":"uint32","nodeType":"ElementaryTypeName","src":"1006:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"expression":{"arguments":[{"id":3687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1052:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3686,"name":"uint32","nodeType":"ElementaryTypeName","src":"1052:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":3685,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1047:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":3688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1047:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":3689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1060:3:27","memberName":"max","nodeType":"MemberAccess","src":"1047:16:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":3692,"mutability":"immutable","name":"_pauseWindowDuration","nameLocation":"1095:20:27","nodeType":"VariableDeclaration","scope":3764,"src":"1070:45:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3691,"name":"uint32","nodeType":"ElementaryTypeName","src":"1070:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":3694,"mutability":"immutable","name":"_poolsPauseWindowEndTime","nameLocation":"1212:24:27","nodeType":"VariableDeclaration","scope":3764,"src":"1187:49:27","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3693,"name":"uint32","nodeType":"ElementaryTypeName","src":"1187:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"documentation":{"id":3695,"nodeType":"StructuredDocumentation","src":"1243:88:27","text":"@notice The factory deployer gave a duration that would overflow the Unix timestamp."},"errorSelector":"68755a11","id":3697,"name":"PoolPauseWindowDurationOverflow","nameLocation":"1342:31:27","nodeType":"ErrorDefinition","parameters":{"id":3696,"nodeType":"ParameterList","parameters":[],"src":"1373:2:27"},"src":"1336:40:27"},{"body":{"id":3728,"nodeType":"Block","src":"1422:373:27","statements":[{"assignments":[3703],"declarations":[{"constant":false,"id":3703,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1440:18:27","nodeType":"VariableDeclaration","scope":3728,"src":"1432:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3702,"name":"uint256","nodeType":"ElementaryTypeName","src":"1432:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3708,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3704,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1461:5:27","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1467:9:27","memberName":"timestamp","nodeType":"MemberAccess","src":"1461:15:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3706,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3699,"src":"1479:19:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1461:37:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1432:66:27"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3709,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3703,"src":"1513:18:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3710,"name":"_MAX_TIMESTAMP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"1534:14:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1513:35:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3716,"nodeType":"IfStatement","src":"1509:106:27","trueBody":{"id":3715,"nodeType":"Block","src":"1550:65:27","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3712,"name":"PoolPauseWindowDurationOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3697,"src":"1571:31:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1571:33:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3714,"nodeType":"RevertStatement","src":"1564:40:27"}]}},{"expression":{"id":3719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3717,"name":"_pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3692,"src":"1625:20:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3718,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3699,"src":"1648:19:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1625:42:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3720,"nodeType":"ExpressionStatement","src":"1625:42:27"},{"expression":{"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3721,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"1735:24:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3724,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3703,"src":"1769:18:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1762:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3722,"name":"uint32","nodeType":"ElementaryTypeName","src":"1762:6:27","typeDescriptions":{}}},"id":3725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:26:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1735:53:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3727,"nodeType":"ExpressionStatement","src":"1735:53:27"}]},"id":3729,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":3700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3699,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"1401:19:27","nodeType":"VariableDeclaration","scope":3729,"src":"1394:26:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3698,"name":"uint32","nodeType":"ElementaryTypeName","src":"1394:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1393:28:27"},"returnParameters":{"id":3701,"nodeType":"ParameterList","parameters":[],"src":"1422:0:27"},"scope":3764,"src":"1382:413:27","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":3737,"nodeType":"Block","src":"2056:44:27","statements":[{"expression":{"id":3735,"name":"_pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3692,"src":"2073:20:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":3734,"id":3736,"nodeType":"Return","src":"2066:27:27"}]},"documentation":{"id":3730,"nodeType":"StructuredDocumentation","src":"1801:185:27","text":" @notice Return the pause window duration. This is the time pools will be pausable after factory deployment.\n @return pauseWindowDuration The duration in seconds"},"functionSelector":"78da80cb","id":3738,"implemented":true,"kind":"function","modifiers":[],"name":"getPauseWindowDuration","nameLocation":"2000:22:27","nodeType":"FunctionDefinition","parameters":{"id":3731,"nodeType":"ParameterList","parameters":[],"src":"2022:2:27"},"returnParameters":{"id":3734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3738,"src":"2048:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3732,"name":"uint32","nodeType":"ElementaryTypeName","src":"2048:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2047:8:27"},"scope":3764,"src":"1991:109:27","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3746,"nodeType":"Block","src":"2352:48:27","statements":[{"expression":{"id":3744,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"2369:24:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":3743,"id":3745,"nodeType":"Return","src":"2362:31:27"}]},"documentation":{"id":3739,"nodeType":"StructuredDocumentation","src":"2106:169:27","text":" @notice Returns the original factory pauseWindowEndTime, regardless of the current time.\n @return pauseWindowEndTime The end time as a timestamp"},"functionSelector":"e9d56e19","id":3747,"implemented":true,"kind":"function","modifiers":[],"name":"getOriginalPauseWindowEndTime","nameLocation":"2289:29:27","nodeType":"FunctionDefinition","parameters":{"id":3740,"nodeType":"ParameterList","parameters":[],"src":"2318:2:27"},"returnParameters":{"id":3743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3742,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3747,"src":"2344:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3741,"name":"uint32","nodeType":"ElementaryTypeName","src":"2344:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2343:8:27"},"scope":3764,"src":"2280:120:27","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":3762,"nodeType":"Block","src":"2991:263:27","statements":[{"expression":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3753,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3173:5:27","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:9:27","memberName":"timestamp","nodeType":"MemberAccess","src":"3173:15:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3755,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"3191:24:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3173:42:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3757,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3172:44:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":3759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":3760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3172:75:27","trueExpression":{"id":3758,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3694,"src":"3219:24:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":3752,"id":3761,"nodeType":"Return","src":"3165:82:27"}]},"documentation":{"id":3748,"nodeType":"StructuredDocumentation","src":"2406:511:27","text":" @notice Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\n @dev We intend for all pools deployed by this factory to have the same pause window end time (i.e., after\n this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime`\n until it passes, after which it will return 0.\n @return pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)"},"functionSelector":"db035ebc","id":3763,"implemented":true,"kind":"function","modifiers":[],"name":"getNewPoolPauseWindowEndTime","nameLocation":"2931:28:27","nodeType":"FunctionDefinition","parameters":{"id":3749,"nodeType":"ParameterList","parameters":[],"src":"2959:2:27"},"returnParameters":{"id":3752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3751,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3763,"src":"2983:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3750,"name":"uint32","nodeType":"ElementaryTypeName","src":"2983:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2982:8:27"},"scope":3764,"src":"2922:332:27","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":3765,"src":"803:2453:27","usedErrors":[3697],"usedEvents":[]}],"src":"46:3211:27"},"id":27},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[3638],"IERC20":[7403],"InputHelpers":[4065]},"id":4066,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3766,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3768,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4066,"sourceUnit":7404,"src":"72:72:28","symbolAliases":[{"foreign":{"id":3767,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":3770,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4066,"sourceUnit":3639,"src":"146:54:28","symbolAliases":[{"foreign":{"id":3769,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3638,"src":"155:14:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":4065,"linearizedBaseContracts":[4065],"name":"InputHelpers","nameLocation":"210:12:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3771,"nodeType":"StructuredDocumentation","src":"229:91:28","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":3773,"name":"InputLengthMismatch","nameLocation":"331:19:28","nodeType":"ErrorDefinition","parameters":{"id":3772,"nodeType":"ParameterList","parameters":[],"src":"350:2:28"},"src":"325:28:28"},{"documentation":{"id":3774,"nodeType":"StructuredDocumentation","src":"359:332:28","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":3776,"name":"MultipleNonZeroInputs","nameLocation":"702:21:28","nodeType":"ErrorDefinition","parameters":{"id":3775,"nodeType":"ParameterList","parameters":[],"src":"723:2:28"},"src":"696:30:28"},{"documentation":{"id":3777,"nodeType":"StructuredDocumentation","src":"732:298:28","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":3779,"name":"AllZeroInputs","nameLocation":"1041:13:28","nodeType":"ErrorDefinition","parameters":{"id":3778,"nodeType":"ParameterList","parameters":[],"src":"1054:2:28"},"src":"1035:22:28"},{"documentation":{"id":3780,"nodeType":"StructuredDocumentation","src":"1063:320:28","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":3782,"name":"TokensNotSorted","nameLocation":"1394:15:28","nodeType":"ErrorDefinition","parameters":{"id":3781,"nodeType":"ParameterList","parameters":[],"src":"1409:2:28"},"src":"1388:24:28"},{"body":{"id":3797,"nodeType":"Block","src":"1486:81:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3789,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"1500:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3790,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3786,"src":"1505:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3796,"nodeType":"IfStatement","src":"1496:65:28","trueBody":{"id":3795,"nodeType":"Block","src":"1508:53:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3792,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3773,"src":"1529:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3794,"nodeType":"RevertStatement","src":"1522:28:28"}]}}]},"id":3798,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:28","nodeType":"FunctionDefinition","parameters":{"id":3787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3784,"mutability":"mutable","name":"a","nameLocation":"1458:1:28","nodeType":"VariableDeclaration","scope":3798,"src":"1450:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3783,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3786,"mutability":"mutable","name":"b","nameLocation":"1469:1:28","nodeType":"VariableDeclaration","scope":3798,"src":"1461:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3785,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:28"},"returnParameters":{"id":3788,"nodeType":"ParameterList","parameters":[],"src":"1486:0:28"},"scope":4065,"src":"1418:149:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3819,"nodeType":"Block","src":"1652:91:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3807,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3800,"src":"1666:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3808,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3802,"src":"1671:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3810,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3802,"src":"1676:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3811,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3804,"src":"1681:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3818,"nodeType":"IfStatement","src":"1662:75:28","trueBody":{"id":3817,"nodeType":"Block","src":"1684:53:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3814,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3773,"src":"1705:19:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3816,"nodeType":"RevertStatement","src":"1698:28:28"}]}}]},"id":3820,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:28","nodeType":"FunctionDefinition","parameters":{"id":3805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3800,"mutability":"mutable","name":"a","nameLocation":"1613:1:28","nodeType":"VariableDeclaration","scope":3820,"src":"1605:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3799,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3802,"mutability":"mutable","name":"b","nameLocation":"1624:1:28","nodeType":"VariableDeclaration","scope":3820,"src":"1616:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3801,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3804,"mutability":"mutable","name":"c","nameLocation":"1635:1:28","nodeType":"VariableDeclaration","scope":3820,"src":"1627:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3803,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:28"},"returnParameters":{"id":3806,"nodeType":"ParameterList","parameters":[],"src":"1652:0:28"},"scope":4065,"src":"1573:170:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3878,"nodeType":"Block","src":"1938:451:28","statements":[{"assignments":[3829],"declarations":[{"constant":false,"id":3829,"mutability":"mutable","name":"length","nameLocation":"1956:6:28","nodeType":"VariableDeclaration","scope":3878,"src":"1948:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3828,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3832,"initialValue":{"expression":{"id":3830,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"1965:12:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:28","memberName":"length","nodeType":"MemberAccess","src":"1965:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:28"},{"expression":{"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3833,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"1994:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3834,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3829,"src":"2007:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3836,"nodeType":"ExpressionStatement","src":"1994:19:28"},{"body":{"id":3866,"nodeType":"Block","src":"2061:211:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3847,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3823,"src":"2079:12:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":3849,"indexExpression":{"id":3848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3838,"src":"2092:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3865,"nodeType":"IfStatement","src":"2075:187:28","trueBody":{"id":3864,"nodeType":"Block","src":"2101:161:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3852,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"2123:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3853,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3829,"src":"2137:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3859,"nodeType":"IfStatement","src":"2119:97:28","trueBody":{"id":3858,"nodeType":"Block","src":"2145:71:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3855,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3776,"src":"2174:21:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3857,"nodeType":"RevertStatement","src":"2167:30:28"}]}},{"expression":{"id":3862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3860,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"2233:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3861,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3838,"src":"2246:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3863,"nodeType":"ExpressionStatement","src":"2233:14:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3841,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3838,"src":"2044:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3842,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3829,"src":"2048:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3867,"initializationExpression":{"assignments":[3838],"declarations":[{"constant":false,"id":3838,"mutability":"mutable","name":"i","nameLocation":"2037:1:28","nodeType":"VariableDeclaration","scope":3867,"src":"2029:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3837,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3840,"initialValue":{"hexValue":"30","id":3839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:28","subExpression":{"id":3844,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3838,"src":"2058:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3846,"nodeType":"ExpressionStatement","src":"2056:3:28"},"nodeType":"ForStatement","src":"2024:248:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3868,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"2286:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3869,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3829,"src":"2300:6:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3875,"nodeType":"IfStatement","src":"2282:73:28","trueBody":{"id":3874,"nodeType":"Block","src":"2308:47:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3871,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3779,"src":"2329:13:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3873,"nodeType":"RevertStatement","src":"2322:22:28"}]}},{"expression":{"id":3876,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"2372:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3827,"id":3877,"nodeType":"Return","src":"2365:17:28"}]},"id":3879,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:28","nodeType":"FunctionDefinition","parameters":{"id":3824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3823,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:28","nodeType":"VariableDeclaration","scope":3879,"src":"1864:29:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3821,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3822,"nodeType":"ArrayTypeName","src":"1864:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:28"},"returnParameters":{"id":3827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3826,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:28","nodeType":"VariableDeclaration","scope":3879,"src":"1918:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3825,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:28"},"scope":4065,"src":"1835:554:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3956,"nodeType":"Block","src":"3138:376:28","statements":[{"body":{"id":3952,"nodeType":"Block","src":"3196:288:28","statements":[{"body":{"id":3950,"nodeType":"Block","src":"3262:212:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"id":3927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3919,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3284:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3921,"indexExpression":{"id":3920,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3291:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":3922,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3296:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3926,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3923,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3303:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"3284:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3949,"nodeType":"IfStatement","src":"3280:180:28","trueBody":{"id":3948,"nodeType":"Block","src":"3311:149:28","statements":[{"expression":{"id":3946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":3928,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3387:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3930,"indexExpression":{"id":3929,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3394:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},{"baseExpression":{"id":3931,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3398:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3935,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3932,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3405:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}}],"id":3936,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$7403_$_t_contract$_IERC20_$7403_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":3937,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3416:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3941,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3938,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3423:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":3939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},{"baseExpression":{"id":3942,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3431:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3944,"indexExpression":{"id":3943,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3438:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}}],"id":3945,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:28","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$7403_$_t_contract$_IERC20_$7403_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:28","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3947,"nodeType":"ExpressionStatement","src":"3386:55:28"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3908,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3230:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3909,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3234:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:28","memberName":"length","nodeType":"MemberAccess","src":"3234:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3911,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3892,"src":"3250:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3951,"initializationExpression":{"assignments":[3905],"declarations":[{"constant":false,"id":3905,"mutability":"mutable","name":"j","nameLocation":"3223:1:28","nodeType":"VariableDeclaration","scope":3951,"src":"3215:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3904,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3907,"initialValue":{"hexValue":"30","id":3906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:28","subExpression":{"id":3916,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3905,"src":"3259:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3918,"nodeType":"ExpressionStatement","src":"3257:3:28"},"nodeType":"ForStatement","src":"3210:264:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3892,"src":"3168:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3896,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3172:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:28","memberName":"length","nodeType":"MemberAccess","src":"3172:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":3898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3953,"initializationExpression":{"assignments":[3892],"declarations":[{"constant":false,"id":3892,"mutability":"mutable","name":"i","nameLocation":"3161:1:28","nodeType":"VariableDeclaration","scope":3953,"src":"3153:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3891,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3894,"initialValue":{"hexValue":"30","id":3893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:28","subExpression":{"id":3901,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3892,"src":"3193:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3903,"nodeType":"ExpressionStatement","src":"3191:3:28"},"nodeType":"ForStatement","src":"3148:336:28"},{"expression":{"id":3954,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3884,"src":"3501:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":3890,"id":3955,"nodeType":"Return","src":"3494:13:28"}]},"documentation":{"id":3880,"nodeType":"StructuredDocumentation","src":"2395:654:28","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":3957,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:28","nodeType":"FunctionDefinition","parameters":{"id":3885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3884,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:28","nodeType":"VariableDeclaration","scope":3957,"src":"3074:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3882,"nodeType":"UserDefinedTypeName","pathNode":{"id":3881,"name":"IERC20","nameLocations":["3074:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3074:6:28"},"referencedDeclaration":7403,"src":"3074:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3883,"nodeType":"ArrayTypeName","src":"3074:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:28"},"returnParameters":{"id":3890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3889,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3957,"src":"3121:15:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3887,"nodeType":"UserDefinedTypeName","pathNode":{"id":3886,"name":"IERC20","nameLocations":["3121:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3121:6:28"},"referencedDeclaration":7403,"src":"3121:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3888,"nodeType":"ArrayTypeName","src":"3121:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:28"},"scope":4065,"src":"3054:460:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4011,"nodeType":"Block","src":"3686:341:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3965,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3962,"src":"3700:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:28","memberName":"length","nodeType":"MemberAccess","src":"3700:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":3967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:28","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3971,"nodeType":"IfStatement","src":"3696:54:28","trueBody":{"id":3970,"nodeType":"Block","src":"3719:31:28","statements":[{"functionReturnParameters":3964,"id":3969,"nodeType":"Return","src":"3733:7:28"}]}},{"assignments":[3974],"declarations":[{"constant":false,"id":3974,"mutability":"mutable","name":"previous","nameLocation":"3767:8:28","nodeType":"VariableDeclaration","scope":4011,"src":"3760:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":3973,"nodeType":"UserDefinedTypeName","pathNode":{"id":3972,"name":"IERC20","nameLocations":["3760:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3760:6:28"},"referencedDeclaration":7403,"src":"3760:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"id":3978,"initialValue":{"baseExpression":{"id":3975,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3962,"src":"3778:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3977,"indexExpression":{"hexValue":"30","id":3976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:28"},{"body":{"id":4009,"nodeType":"Block","src":"3842:179:28","statements":[{"assignments":[3992],"declarations":[{"constant":false,"id":3992,"mutability":"mutable","name":"current","nameLocation":"3863:7:28","nodeType":"VariableDeclaration","scope":4009,"src":"3856:14:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":3991,"nodeType":"UserDefinedTypeName","pathNode":{"id":3990,"name":"IERC20","nameLocations":["3856:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3856:6:28"},"referencedDeclaration":7403,"src":"3856:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"}],"id":3996,"initialValue":{"baseExpression":{"id":3993,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3962,"src":"3873:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3995,"indexExpression":{"id":3994,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"3880:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"id":3999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3997,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"3901:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":3998,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"3912:7:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"3901:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4004,"nodeType":"IfStatement","src":"3897:81:28","trueBody":{"id":4003,"nodeType":"Block","src":"3921:57:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4000,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"3946:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4002,"nodeType":"RevertStatement","src":"3939:24:28"}]}},{"expression":{"id":4007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4005,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"3992:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4006,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"4003:7:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"3992:18:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":4008,"nodeType":"ExpressionStatement","src":"3992:18:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3983,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"3818:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":3984,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3962,"src":"3822:6:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":3985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:28","memberName":"length","nodeType":"MemberAccess","src":"3822:13:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4010,"initializationExpression":{"assignments":[3980],"declarations":[{"constant":false,"id":3980,"mutability":"mutable","name":"i","nameLocation":"3811:1:28","nodeType":"VariableDeclaration","scope":4010,"src":"3803:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3979,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3982,"initialValue":{"hexValue":"31","id":3981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":3988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:28","subExpression":{"id":3987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"3839:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3989,"nodeType":"ExpressionStatement","src":"3837:3:28"},"nodeType":"ForStatement","src":"3798:223:28"}]},"documentation":{"id":3958,"nodeType":"StructuredDocumentation","src":"3520:95:28","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":4012,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:28","nodeType":"FunctionDefinition","parameters":{"id":3963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3962,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:28","nodeType":"VariableDeclaration","scope":4012,"src":"3648:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":3960,"nodeType":"UserDefinedTypeName","pathNode":{"id":3959,"name":"IERC20","nameLocations":["3648:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"3648:6:28"},"referencedDeclaration":7403,"src":"3648:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":3961,"nodeType":"ArrayTypeName","src":"3648:8:28","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:28"},"returnParameters":{"id":3964,"nodeType":"ParameterList","parameters":[],"src":"3686:0:28"},"scope":4065,"src":"3620:407:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4063,"nodeType":"Block","src":"4203:347:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":4019,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4016,"src":"4217:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:28","memberName":"length","nodeType":"MemberAccess","src":"4217:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":4021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:28","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4025,"nodeType":"IfStatement","src":"4213:55:28","trueBody":{"id":4024,"nodeType":"Block","src":"4237:31:28","statements":[{"functionReturnParameters":4018,"id":4023,"nodeType":"Return","src":"4251:7:28"}]}},{"assignments":[4027],"declarations":[{"constant":false,"id":4027,"mutability":"mutable","name":"previous","nameLocation":"4286:8:28","nodeType":"VariableDeclaration","scope":4063,"src":"4278:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4026,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4031,"initialValue":{"baseExpression":{"id":4028,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4016,"src":"4297:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4030,"indexExpression":{"hexValue":"30","id":4029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:28"},{"body":{"id":4061,"nodeType":"Block","src":"4363:181:28","statements":[{"assignments":[4044],"declarations":[{"constant":false,"id":4044,"mutability":"mutable","name":"current","nameLocation":"4385:7:28","nodeType":"VariableDeclaration","scope":4061,"src":"4377:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4043,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4048,"initialValue":{"baseExpression":{"id":4045,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4016,"src":"4395:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4047,"indexExpression":{"id":4046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4033,"src":"4403:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:28"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4049,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"4424:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4050,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4044,"src":"4435:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4056,"nodeType":"IfStatement","src":"4420:81:28","trueBody":{"id":4055,"nodeType":"Block","src":"4444:57:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4052,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3782,"src":"4469:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4054,"nodeType":"RevertStatement","src":"4462:24:28"}]}},{"expression":{"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4057,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"4515:8:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4058,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4044,"src":"4526:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4060,"nodeType":"ExpressionStatement","src":"4515:18:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4036,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4033,"src":"4338:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":4037,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4016,"src":"4342:7:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:28","memberName":"length","nodeType":"MemberAccess","src":"4342:14:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4062,"initializationExpression":{"assignments":[4033],"declarations":[{"constant":false,"id":4033,"mutability":"mutable","name":"i","nameLocation":"4331:1:28","nodeType":"VariableDeclaration","scope":4062,"src":"4323:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4032,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4035,"initialValue":{"hexValue":"31","id":4034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:28","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:28","subExpression":{"id":4040,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4033,"src":"4360:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4042,"nodeType":"ExpressionStatement","src":"4358:3:28"},"nodeType":"ForStatement","src":"4318:226:28"}]},"documentation":{"id":4013,"nodeType":"StructuredDocumentation","src":"4033:96:28","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":4064,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:28","nodeType":"FunctionDefinition","parameters":{"id":4017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4016,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:28","nodeType":"VariableDeclaration","scope":4064,"src":"4163:24:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4014,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4015,"nodeType":"ArrayTypeName","src":"4163:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:28"},"returnParameters":{"id":4018,"nodeType":"ParameterList","parameters":[],"src":"4203:0:28"},"scope":4065,"src":"4134:416:28","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4066,"src":"202:4350:28","usedErrors":[3773,3776,3779,3782],"usedEvents":[]}],"src":"46:4507:28"},"id":28},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","exportedSymbols":{"FixedPoint":[4818],"InputHelpers":[4065],"ScalingHelpers":[4479]},"id":4480,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4067,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"../math/FixedPoint.sol","id":4069,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4480,"sourceUnit":4819,"src":"72:52:29","symbolAliases":[{"foreign":{"id":4068,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"81:10:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"./InputHelpers.sol","id":4071,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4480,"sourceUnit":4066,"src":"125:50:29","symbolAliases":[{"foreign":{"id":4070,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"134:12:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ScalingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":4072,"nodeType":"StructuredDocumentation","src":"177:760:29","text":" @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n math, simplifying it greatly.\n The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n or tokens that do not implement `IERC20Metadata.decimals`.\n These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates."},"fullyImplemented":true,"id":4479,"linearizedBaseContracts":[4479],"name":"ScalingHelpers","nameLocation":"946:14:29","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4074,"libraryName":{"id":4073,"name":"FixedPoint","nameLocations":["973:10:29"],"nodeType":"IdentifierPath","referencedDeclaration":4818,"src":"973:10:29"},"nodeType":"UsingForDirective","src":"967:23:29"},{"global":false,"id":4077,"libraryName":{"id":4075,"name":"ScalingHelpers","nameLocations":["1001:14:29"],"nodeType":"IdentifierPath","referencedDeclaration":4479,"src":"1001:14:29"},"nodeType":"UsingForDirective","src":"995:33:29","typeName":{"id":4076,"name":"uint256","nodeType":"ElementaryTypeName","src":"1020:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":4097,"nodeType":"Block","src":"1928:67:29","statements":[{"expression":{"arguments":[{"id":4094,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4084,"src":"1978:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4089,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4080,"src":"1946:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4090,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4082,"src":"1955:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1946:22:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4092,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1945:24:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1970:7:29","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"1945:32:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:43:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4088,"id":4096,"nodeType":"Return","src":"1938:50:29"}]},"documentation":{"id":4078,"nodeType":"StructuredDocumentation","src":"1252:513:29","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded down"},"id":4098,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDown","nameLocation":"1779:28:29","nodeType":"FunctionDefinition","parameters":{"id":4085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4080,"mutability":"mutable","name":"amount","nameLocation":"1825:6:29","nodeType":"VariableDeclaration","scope":4098,"src":"1817:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4079,"name":"uint256","nodeType":"ElementaryTypeName","src":"1817:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4082,"mutability":"mutable","name":"scalingFactor","nameLocation":"1849:13:29","nodeType":"VariableDeclaration","scope":4098,"src":"1841:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4084,"mutability":"mutable","name":"tokenRate","nameLocation":"1880:9:29","nodeType":"VariableDeclaration","scope":4098,"src":"1872:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1872:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1807:88:29"},"returnParameters":{"id":4088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4098,"src":"1919:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4086,"name":"uint256","nodeType":"ElementaryTypeName","src":"1919:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1918:9:29"},"scope":4479,"src":"1770:225:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4118,"nodeType":"Block","src":"2671:65:29","statements":[{"expression":{"arguments":[{"id":4115,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4105,"src":"2719:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4110,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4101,"src":"2689:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4111,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4103,"src":"2698:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2689:22:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4113,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2688:24:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2713:5:29","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4580,"src":"2688:30:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2688:41:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4109,"id":4117,"nodeType":"Return","src":"2681:48:29"}]},"documentation":{"id":4099,"nodeType":"StructuredDocumentation","src":"2001:509:29","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded up"},"id":4119,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUp","nameLocation":"2524:26:29","nodeType":"FunctionDefinition","parameters":{"id":4106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4101,"mutability":"mutable","name":"amount","nameLocation":"2568:6:29","nodeType":"VariableDeclaration","scope":4119,"src":"2560:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4100,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4103,"mutability":"mutable","name":"scalingFactor","nameLocation":"2592:13:29","nodeType":"VariableDeclaration","scope":4119,"src":"2584:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4102,"name":"uint256","nodeType":"ElementaryTypeName","src":"2584:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4105,"mutability":"mutable","name":"tokenRate","nameLocation":"2623:9:29","nodeType":"VariableDeclaration","scope":4119,"src":"2615:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4104,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2550:88:29"},"returnParameters":{"id":4109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4119,"src":"2662:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4107,"name":"uint256","nodeType":"ElementaryTypeName","src":"2662:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2661:9:29"},"scope":4479,"src":"2515:221:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4139,"nodeType":"Block","src":"3432:266:29","statements":[{"expression":{"arguments":[{"id":4133,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4122,"src":"3657:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4134,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4124,"src":"3665:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4135,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4126,"src":"3681:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3665:25:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4131,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"3638:10:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":4132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3649:7:29","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"3638:18:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:53:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4130,"id":4138,"nodeType":"Return","src":"3631:60:29"}]},"documentation":{"id":4120,"nodeType":"StructuredDocumentation","src":"2742:533:29","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded down"},"id":4140,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundDown","nameLocation":"3289:22:29","nodeType":"FunctionDefinition","parameters":{"id":4127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4122,"mutability":"mutable","name":"amount","nameLocation":"3329:6:29","nodeType":"VariableDeclaration","scope":4140,"src":"3321:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4121,"name":"uint256","nodeType":"ElementaryTypeName","src":"3321:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4124,"mutability":"mutable","name":"scalingFactor","nameLocation":"3353:13:29","nodeType":"VariableDeclaration","scope":4140,"src":"3345:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4123,"name":"uint256","nodeType":"ElementaryTypeName","src":"3345:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4126,"mutability":"mutable","name":"tokenRate","nameLocation":"3384:9:29","nodeType":"VariableDeclaration","scope":4140,"src":"3376:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4125,"name":"uint256","nodeType":"ElementaryTypeName","src":"3376:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3311:88:29"},"returnParameters":{"id":4130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4140,"src":"3423:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4128,"name":"uint256","nodeType":"ElementaryTypeName","src":"3423:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3422:9:29"},"scope":4479,"src":"3280:418:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4160,"nodeType":"Block","src":"4388:264:29","statements":[{"expression":{"arguments":[{"id":4154,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4143,"src":"4611:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4155,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"4619:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4156,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4147,"src":"4635:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4619:25:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4152,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"4594:10:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":4153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4605:5:29","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4616,"src":"4594:16:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4594:51:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4151,"id":4159,"nodeType":"Return","src":"4587:58:29"}]},"documentation":{"id":4141,"nodeType":"StructuredDocumentation","src":"3704:529:29","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded up"},"id":4161,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundUp","nameLocation":"4247:20:29","nodeType":"FunctionDefinition","parameters":{"id":4148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"amount","nameLocation":"4285:6:29","nodeType":"VariableDeclaration","scope":4161,"src":"4277:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4142,"name":"uint256","nodeType":"ElementaryTypeName","src":"4277:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4145,"mutability":"mutable","name":"scalingFactor","nameLocation":"4309:13:29","nodeType":"VariableDeclaration","scope":4161,"src":"4301:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4144,"name":"uint256","nodeType":"ElementaryTypeName","src":"4301:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4147,"mutability":"mutable","name":"tokenRate","nameLocation":"4340:9:29","nodeType":"VariableDeclaration","scope":4161,"src":"4332:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4146,"name":"uint256","nodeType":"ElementaryTypeName","src":"4332:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4267:88:29"},"returnParameters":{"id":4151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4161,"src":"4379:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4149,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:29"},"scope":4479,"src":"4238:414:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4184,"nodeType":"Block","src":"4952:280:29","statements":[{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"length","nameLocation":"4970:6:29","nodeType":"VariableDeclaration","scope":4184,"src":"4962:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4170,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4174,"initialValue":{"expression":{"id":4172,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4164,"src":"4979:4:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:29","memberName":"length","nodeType":"MemberAccess","src":"4979:11:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4962:28:29"},{"expression":{"arguments":[{"id":4178,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"5036:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4179,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4167,"src":"5044:2:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5047:6:29","memberName":"length","nodeType":"MemberAccess","src":"5044:9:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4175,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"5000:12:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4065_$","typeString":"type(library InputHelpers)"}},"id":4177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5013:22:29","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":3798,"src":"5000:35:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5000:54:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4182,"nodeType":"ExpressionStatement","src":"5000:54:29"},{"AST":{"nativeSrc":"5146:80:29","nodeType":"YulBlock","src":"5146:80:29","statements":[{"expression":{"arguments":[{"arguments":[{"name":"to","nativeSrc":"5170:2:29","nodeType":"YulIdentifier","src":"5170:2:29"},{"kind":"number","nativeSrc":"5174:4:29","nodeType":"YulLiteral","src":"5174:4:29","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5166:3:29","nodeType":"YulIdentifier","src":"5166:3:29"},"nativeSrc":"5166:13:29","nodeType":"YulFunctionCall","src":"5166:13:29"},{"arguments":[{"name":"from","nativeSrc":"5185:4:29","nodeType":"YulIdentifier","src":"5185:4:29"},{"kind":"number","nativeSrc":"5191:4:29","nodeType":"YulLiteral","src":"5191:4:29","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5181:3:29","nodeType":"YulIdentifier","src":"5181:3:29"},"nativeSrc":"5181:15:29","nodeType":"YulFunctionCall","src":"5181:15:29"},{"arguments":[{"name":"length","nativeSrc":"5202:6:29","nodeType":"YulIdentifier","src":"5202:6:29"},{"kind":"number","nativeSrc":"5210:4:29","nodeType":"YulLiteral","src":"5210:4:29","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"5198:3:29","nodeType":"YulIdentifier","src":"5198:3:29"},"nativeSrc":"5198:17:29","nodeType":"YulFunctionCall","src":"5198:17:29"}],"functionName":{"name":"mcopy","nativeSrc":"5160:5:29","nodeType":"YulIdentifier","src":"5160:5:29"},"nativeSrc":"5160:56:29","nodeType":"YulFunctionCall","src":"5160:56:29"},"nativeSrc":"5160:56:29","nodeType":"YulExpressionStatement","src":"5160:56:29"}]},"evmVersion":"cancun","externalReferences":[{"declaration":4164,"isOffset":false,"isSlot":false,"src":"5185:4:29","valueSize":1},{"declaration":4171,"isOffset":false,"isSlot":false,"src":"5202:6:29","valueSize":1},{"declaration":4167,"isOffset":false,"isSlot":false,"src":"5170:2:29","valueSize":1}],"flags":["memory-safe"],"id":4183,"nodeType":"InlineAssembly","src":"5121:105:29"}]},"id":4185,"implemented":true,"kind":"function","modifiers":[],"name":"copyToArray","nameLocation":"4882:11:29","nodeType":"FunctionDefinition","parameters":{"id":4168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4164,"mutability":"mutable","name":"from","nameLocation":"4911:4:29","nodeType":"VariableDeclaration","scope":4185,"src":"4894:21:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4162,"name":"uint256","nodeType":"ElementaryTypeName","src":"4894:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4163,"nodeType":"ArrayTypeName","src":"4894:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4167,"mutability":"mutable","name":"to","nameLocation":"4934:2:29","nodeType":"VariableDeclaration","scope":4185,"src":"4917:19:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4165,"name":"uint256","nodeType":"ElementaryTypeName","src":"4917:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4166,"nodeType":"ArrayTypeName","src":"4917:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4893:44:29"},"returnParameters":{"id":4169,"nodeType":"ParameterList","parameters":[],"src":"4952:0:29"},"scope":4479,"src":"4873:359:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4241,"nodeType":"Block","src":"5892:301:29","statements":[{"assignments":[4199],"declarations":[{"constant":false,"id":4199,"mutability":"mutable","name":"length","nameLocation":"5910:6:29","nodeType":"VariableDeclaration","scope":4241,"src":"5902:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4198,"name":"uint256","nodeType":"ElementaryTypeName","src":"5902:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4202,"initialValue":{"expression":{"id":4200,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4189,"src":"5919:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5927:6:29","memberName":"length","nodeType":"MemberAccess","src":"5919:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5902:31:29"},{"expression":{"arguments":[{"id":4206,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4199,"src":"5979:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4207,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4192,"src":"5987:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6002:6:29","memberName":"length","nodeType":"MemberAccess","src":"5987:21:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4209,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4195,"src":"6010:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:6:29","memberName":"length","nodeType":"MemberAccess","src":"6010:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4203,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"5943:12:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4065_$","typeString":"type(library InputHelpers)"}},"id":4205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5956:22:29","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":3820,"src":"5943:35:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:85:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4212,"nodeType":"ExpressionStatement","src":"5943:85:29"},{"body":{"id":4239,"nodeType":"Block","src":"6076:111:29","statements":[{"expression":{"id":4237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4223,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4189,"src":"6090:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4225,"indexExpression":{"id":4224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6098:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6090:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4230,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4192,"src":"6143:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4232,"indexExpression":{"id":4231,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6158:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6143:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4233,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4195,"src":"6162:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4235,"indexExpression":{"id":4234,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6173:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4226,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4189,"src":"6103:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4228,"indexExpression":{"id":4227,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6111:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6103:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6114:28:29","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"6103:39:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6103:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6090:86:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4238,"nodeType":"ExpressionStatement","src":"6090:86:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4217,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6059:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4218,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4199,"src":"6063:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6059:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4240,"initializationExpression":{"assignments":[4214],"declarations":[{"constant":false,"id":4214,"mutability":"mutable","name":"i","nameLocation":"6052:1:29","nodeType":"VariableDeclaration","scope":4240,"src":"6044:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4213,"name":"uint256","nodeType":"ElementaryTypeName","src":"6044:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4216,"initialValue":{"hexValue":"30","id":4215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6056:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6044:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6071:3:29","subExpression":{"id":4220,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"6073:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4222,"nodeType":"ExpressionStatement","src":"6071:3:29"},"nodeType":"ForStatement","src":"6039:148:29"}]},"documentation":{"id":4186,"nodeType":"StructuredDocumentation","src":"5238:474:29","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":4242,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDownArray","nameLocation":"5726:33:29","nodeType":"FunctionDefinition","parameters":{"id":4196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4189,"mutability":"mutable","name":"amounts","nameLocation":"5786:7:29","nodeType":"VariableDeclaration","scope":4242,"src":"5769:24:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4187,"name":"uint256","nodeType":"ElementaryTypeName","src":"5769:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4188,"nodeType":"ArrayTypeName","src":"5769:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4192,"mutability":"mutable","name":"scalingFactors","nameLocation":"5820:14:29","nodeType":"VariableDeclaration","scope":4242,"src":"5803:31:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4190,"name":"uint256","nodeType":"ElementaryTypeName","src":"5803:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4191,"nodeType":"ArrayTypeName","src":"5803:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4195,"mutability":"mutable","name":"tokenRates","nameLocation":"5861:10:29","nodeType":"VariableDeclaration","scope":4242,"src":"5844:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5844:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4194,"nodeType":"ArrayTypeName","src":"5844:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5759:118:29"},"returnParameters":{"id":4197,"nodeType":"ParameterList","parameters":[],"src":"5892:0:29"},"scope":4479,"src":"5717:476:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4314,"nodeType":"Block","src":"6920:408:29","statements":[{"assignments":[4259],"declarations":[{"constant":false,"id":4259,"mutability":"mutable","name":"length","nameLocation":"6938:6:29","nodeType":"VariableDeclaration","scope":4314,"src":"6930:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4258,"name":"uint256","nodeType":"ElementaryTypeName","src":"6930:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4262,"initialValue":{"expression":{"id":4260,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4246,"src":"6947:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:29","memberName":"length","nodeType":"MemberAccess","src":"6947:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6930:31:29"},{"expression":{"arguments":[{"id":4266,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4259,"src":"7007:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4267,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4249,"src":"7015:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7030:6:29","memberName":"length","nodeType":"MemberAccess","src":"7015:21:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4269,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4252,"src":"7038:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7049:6:29","memberName":"length","nodeType":"MemberAccess","src":"7038:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4263,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"6971:12:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4065_$","typeString":"type(library InputHelpers)"}},"id":4265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:22:29","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":3820,"src":"6971:35:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6971:85:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4272,"nodeType":"ExpressionStatement","src":"6971:85:29"},{"assignments":[4277],"declarations":[{"constant":false,"id":4277,"mutability":"mutable","name":"amountsScaled18","nameLocation":"7083:15:29","nodeType":"VariableDeclaration","scope":4314,"src":"7066:32:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4275,"name":"uint256","nodeType":"ElementaryTypeName","src":"7066:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4276,"nodeType":"ArrayTypeName","src":"7066:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4283,"initialValue":{"arguments":[{"id":4281,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4259,"src":"7115:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7101:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":4278,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4279,"nodeType":"ArrayTypeName","src":"7105:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":4282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7101:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7066:56:29"},{"body":{"id":4310,"nodeType":"Block","src":"7170:119:29","statements":[{"expression":{"id":4308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4294,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4277,"src":"7184:15:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4296,"indexExpression":{"id":4295,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7200:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7184:18:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4301,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4249,"src":"7245:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4303,"indexExpression":{"id":4302,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7260:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7245:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4304,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4252,"src":"7264:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4306,"indexExpression":{"id":4305,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7275:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7264:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4297,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4246,"src":"7205:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4299,"indexExpression":{"id":4298,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7213:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7205:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7216:28:29","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"7205:39:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7205:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7184:94:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4309,"nodeType":"ExpressionStatement","src":"7184:94:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4288,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7153:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4289,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4259,"src":"7157:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7153:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4311,"initializationExpression":{"assignments":[4285],"declarations":[{"constant":false,"id":4285,"mutability":"mutable","name":"i","nameLocation":"7146:1:29","nodeType":"VariableDeclaration","scope":4311,"src":"7138:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4284,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4287,"initialValue":{"hexValue":"30","id":4286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7150:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7138:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7165:3:29","subExpression":{"id":4291,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"7167:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4293,"nodeType":"ExpressionStatement","src":"7165:3:29"},"nodeType":"ForStatement","src":"7133:156:29"},{"expression":{"id":4312,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4277,"src":"7306:15:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":4257,"id":4313,"nodeType":"Return","src":"7299:22:29"}]},"documentation":{"id":4243,"nodeType":"StructuredDocumentation","src":"6199:510:29","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded down"},"id":4315,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundDownArray","nameLocation":"6723:37:29","nodeType":"FunctionDefinition","parameters":{"id":4253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4246,"mutability":"mutable","name":"amounts","nameLocation":"6787:7:29","nodeType":"VariableDeclaration","scope":4315,"src":"6770:24:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4244,"name":"uint256","nodeType":"ElementaryTypeName","src":"6770:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4245,"nodeType":"ArrayTypeName","src":"6770:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4249,"mutability":"mutable","name":"scalingFactors","nameLocation":"6821:14:29","nodeType":"VariableDeclaration","scope":4315,"src":"6804:31:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4247,"name":"uint256","nodeType":"ElementaryTypeName","src":"6804:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4248,"nodeType":"ArrayTypeName","src":"6804:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4252,"mutability":"mutable","name":"tokenRates","nameLocation":"6862:10:29","nodeType":"VariableDeclaration","scope":4315,"src":"6845:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4250,"name":"uint256","nodeType":"ElementaryTypeName","src":"6845:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4251,"nodeType":"ArrayTypeName","src":"6845:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6760:118:29"},"returnParameters":{"id":4257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4315,"src":"6902:16:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4254,"name":"uint256","nodeType":"ElementaryTypeName","src":"6902:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4255,"nodeType":"ArrayTypeName","src":"6902:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6901:18:29"},"scope":4479,"src":"6714:614:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4371,"nodeType":"Block","src":"7984:299:29","statements":[{"assignments":[4329],"declarations":[{"constant":false,"id":4329,"mutability":"mutable","name":"length","nameLocation":"8002:6:29","nodeType":"VariableDeclaration","scope":4371,"src":"7994:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4328,"name":"uint256","nodeType":"ElementaryTypeName","src":"7994:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4332,"initialValue":{"expression":{"id":4330,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"8011:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8019:6:29","memberName":"length","nodeType":"MemberAccess","src":"8011:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7994:31:29"},{"expression":{"arguments":[{"id":4336,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4329,"src":"8071:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4337,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4322,"src":"8079:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8094:6:29","memberName":"length","nodeType":"MemberAccess","src":"8079:21:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4339,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"8102:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8113:6:29","memberName":"length","nodeType":"MemberAccess","src":"8102:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4333,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"8035:12:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4065_$","typeString":"type(library InputHelpers)"}},"id":4335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8048:22:29","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":3820,"src":"8035:35:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8035:85:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4342,"nodeType":"ExpressionStatement","src":"8035:85:29"},{"body":{"id":4369,"nodeType":"Block","src":"8168:109:29","statements":[{"expression":{"id":4367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4353,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"8182:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4355,"indexExpression":{"id":4354,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8190:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8182:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4360,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4322,"src":"8233:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4362,"indexExpression":{"id":4361,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8248:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8233:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4363,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4325,"src":"8252:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4365,"indexExpression":{"id":4364,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8263:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8252:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4356,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4319,"src":"8195:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4358,"indexExpression":{"id":4357,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8203:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8195:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8206:26:29","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":4119,"src":"8195:37:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8195:71:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8182:84:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4368,"nodeType":"ExpressionStatement","src":"8182:84:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8151:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4348,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4329,"src":"8155:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8151:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4370,"initializationExpression":{"assignments":[4344],"declarations":[{"constant":false,"id":4344,"mutability":"mutable","name":"i","nameLocation":"8144:1:29","nodeType":"VariableDeclaration","scope":4370,"src":"8136:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4343,"name":"uint256","nodeType":"ElementaryTypeName","src":"8136:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4346,"initialValue":{"hexValue":"30","id":4345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8148:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8136:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8163:3:29","subExpression":{"id":4350,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4344,"src":"8165:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4352,"nodeType":"ExpressionStatement","src":"8163:3:29"},"nodeType":"ForStatement","src":"8131:146:29"}]},"documentation":{"id":4316,"nodeType":"StructuredDocumentation","src":"7334:472:29","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":4372,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUpArray","nameLocation":"7820:31:29","nodeType":"FunctionDefinition","parameters":{"id":4326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4319,"mutability":"mutable","name":"amounts","nameLocation":"7878:7:29","nodeType":"VariableDeclaration","scope":4372,"src":"7861:24:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4317,"name":"uint256","nodeType":"ElementaryTypeName","src":"7861:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4318,"nodeType":"ArrayTypeName","src":"7861:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4322,"mutability":"mutable","name":"scalingFactors","nameLocation":"7912:14:29","nodeType":"VariableDeclaration","scope":4372,"src":"7895:31:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4320,"name":"uint256","nodeType":"ElementaryTypeName","src":"7895:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4321,"nodeType":"ArrayTypeName","src":"7895:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4325,"mutability":"mutable","name":"tokenRates","nameLocation":"7953:10:29","nodeType":"VariableDeclaration","scope":4372,"src":"7936:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4323,"name":"uint256","nodeType":"ElementaryTypeName","src":"7936:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4324,"nodeType":"ArrayTypeName","src":"7936:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7851:118:29"},"returnParameters":{"id":4327,"nodeType":"ParameterList","parameters":[],"src":"7984:0:29"},"scope":4479,"src":"7811:472:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4444,"nodeType":"Block","src":"9004:406:29","statements":[{"assignments":[4389],"declarations":[{"constant":false,"id":4389,"mutability":"mutable","name":"length","nameLocation":"9022:6:29","nodeType":"VariableDeclaration","scope":4444,"src":"9014:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4388,"name":"uint256","nodeType":"ElementaryTypeName","src":"9014:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4392,"initialValue":{"expression":{"id":4390,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4376,"src":"9031:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9039:6:29","memberName":"length","nodeType":"MemberAccess","src":"9031:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9014:31:29"},{"expression":{"arguments":[{"id":4396,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"9091:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4397,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4379,"src":"9099:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9114:6:29","memberName":"length","nodeType":"MemberAccess","src":"9099:21:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":4399,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4382,"src":"9122:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9133:6:29","memberName":"length","nodeType":"MemberAccess","src":"9122:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4393,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4065,"src":"9055:12:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$4065_$","typeString":"type(library InputHelpers)"}},"id":4395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9068:22:29","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":3820,"src":"9055:35:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":4401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9055:85:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4402,"nodeType":"ExpressionStatement","src":"9055:85:29"},{"assignments":[4407],"declarations":[{"constant":false,"id":4407,"mutability":"mutable","name":"amountsScaled18","nameLocation":"9167:15:29","nodeType":"VariableDeclaration","scope":4444,"src":"9150:32:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4405,"name":"uint256","nodeType":"ElementaryTypeName","src":"9150:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4406,"nodeType":"ArrayTypeName","src":"9150:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4413,"initialValue":{"arguments":[{"id":4411,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"9199:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9185:13:29","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":4408,"name":"uint256","nodeType":"ElementaryTypeName","src":"9189:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4409,"nodeType":"ArrayTypeName","src":"9189:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":4412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9185:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9150:56:29"},{"body":{"id":4440,"nodeType":"Block","src":"9254:117:29","statements":[{"expression":{"id":4438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":4424,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4407,"src":"9268:15:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4426,"indexExpression":{"id":4425,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9284:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9268:18:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":4431,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4379,"src":"9327:14:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4433,"indexExpression":{"id":4432,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9342:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9327:17:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":4434,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4382,"src":"9346:10:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4436,"indexExpression":{"id":4435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9357:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9346:13:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4427,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4376,"src":"9289:7:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4429,"indexExpression":{"id":4428,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9297:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9289:10:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9300:26:29","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":4119,"src":"9289:37:29","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9289:71:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9268:92:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4439,"nodeType":"ExpressionStatement","src":"9268:92:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9237:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4419,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4389,"src":"9241:6:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9237:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4441,"initializationExpression":{"assignments":[4415],"declarations":[{"constant":false,"id":4415,"mutability":"mutable","name":"i","nameLocation":"9230:1:29","nodeType":"VariableDeclaration","scope":4441,"src":"9222:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4414,"name":"uint256","nodeType":"ElementaryTypeName","src":"9222:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4417,"initialValue":{"hexValue":"30","id":4416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9234:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9222:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9249:3:29","subExpression":{"id":4421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"9251:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4423,"nodeType":"ExpressionStatement","src":"9249:3:29"},"nodeType":"ForStatement","src":"9217:154:29"},{"expression":{"id":4442,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4407,"src":"9388:15:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":4387,"id":4443,"nodeType":"Return","src":"9381:22:29"}]},"documentation":{"id":4373,"nodeType":"StructuredDocumentation","src":"8289:506:29","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded up"},"id":4445,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundUpArray","nameLocation":"8809:35:29","nodeType":"FunctionDefinition","parameters":{"id":4383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"amounts","nameLocation":"8871:7:29","nodeType":"VariableDeclaration","scope":4445,"src":"8854:24:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4374,"name":"uint256","nodeType":"ElementaryTypeName","src":"8854:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4375,"nodeType":"ArrayTypeName","src":"8854:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4379,"mutability":"mutable","name":"scalingFactors","nameLocation":"8905:14:29","nodeType":"VariableDeclaration","scope":4445,"src":"8888:31:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4377,"name":"uint256","nodeType":"ElementaryTypeName","src":"8888:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4378,"nodeType":"ArrayTypeName","src":"8888:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4382,"mutability":"mutable","name":"tokenRates","nameLocation":"8946:10:29","nodeType":"VariableDeclaration","scope":4445,"src":"8929:27:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4380,"name":"uint256","nodeType":"ElementaryTypeName","src":"8929:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4381,"nodeType":"ArrayTypeName","src":"8929:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8844:118:29"},"returnParameters":{"id":4387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4445,"src":"8986:16:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4384,"name":"uint256","nodeType":"ElementaryTypeName","src":"8986:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4385,"nodeType":"ArrayTypeName","src":"8986:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8985:18:29"},"scope":4479,"src":"8800:610:29","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4477,"nodeType":"Block","src":"10004:387:29","statements":[{"assignments":[4454],"declarations":[{"constant":false,"id":4454,"mutability":"mutable","name":"roundedRate","nameLocation":"10022:11:29","nodeType":"VariableDeclaration","scope":4477,"src":"10014:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4453,"name":"uint256","nodeType":"ElementaryTypeName","src":"10014:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4455,"nodeType":"VariableDeclarationStatement","src":"10014:19:29"},{"id":4467,"nodeType":"UncheckedBlock","src":"10242:89:29","statements":[{"expression":{"id":4465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4456,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"10266:11:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4457,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"10281:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":4458,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"10288:10:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":4459,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10299:3:29","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"10288:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10281:21:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":4461,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10280:23:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":4462,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"10306:10:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":4463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10317:3:29","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"10306:14:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10280:40:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10266:54:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4466,"nodeType":"ExpressionStatement","src":"10266:54:29"}]},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4468,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4454,"src":"10347:11:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4469,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"10362:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10347:19:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4472,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"10376:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10383:1:29","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10376:8:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10347:37:29","trueExpression":{"id":4471,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4448,"src":"10369:4:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4452,"id":4476,"nodeType":"Return","src":"10340:44:29"}]},"documentation":{"id":4446,"nodeType":"StructuredDocumentation","src":"9416:509:29","text":" @notice Rounds up a rate informed by a rate provider.\n @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n @param rate The original rate\n @return roundedRate The final rate, with rounding applied"},"id":4478,"implemented":true,"kind":"function","modifiers":[],"name":"computeRateRoundUp","nameLocation":"9939:18:29","nodeType":"FunctionDefinition","parameters":{"id":4449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4448,"mutability":"mutable","name":"rate","nameLocation":"9966:4:29","nodeType":"VariableDeclaration","scope":4478,"src":"9958:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4447,"name":"uint256","nodeType":"ElementaryTypeName","src":"9958:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9957:14:29"},"returnParameters":{"id":4452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4478,"src":"9995:7:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4450,"name":"uint256","nodeType":"ElementaryTypeName","src":"9995:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9994:9:29"},"scope":4479,"src":"9930:461:29","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4480,"src":"938:9455:29","usedErrors":[],"usedEvents":[]}],"src":"46:10348:29"},"id":29},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[99],"Version":[4519]},"id":4520,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4481,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":4483,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4520,"sourceUnit":100,"src":"72:102:30","symbolAliases":[{"foreign":{"id":4482,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":99,"src":"81:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4485,"name":"IVersion","nameLocations":["686:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":99,"src":"686:8:30"},"id":4486,"nodeType":"InheritanceSpecifier","src":"686:8:30"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":4484,"nodeType":"StructuredDocumentation","src":"176:489:30","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":4519,"linearizedBaseContracts":[4519,99],"name":"Version","nameLocation":"675:7:30","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4488,"mutability":"mutable","name":"_version","nameLocation":"716:8:30","nodeType":"VariableDeclaration","scope":4519,"src":"701:23:30","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":4487,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:30","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":4497,"nodeType":"Block","src":"767:38:30","statements":[{"expression":{"arguments":[{"id":4494,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4490,"src":"789:8:30","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":4493,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4518,"src":"777:11:30","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":4495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:30","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4496,"nodeType":"ExpressionStatement","src":"777:21:30"}]},"id":4498,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4490,"mutability":"mutable","name":"version_","nameLocation":"757:8:30","nodeType":"VariableDeclaration","scope":4498,"src":"743:22:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4489,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:30","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:30"},"returnParameters":{"id":4492,"nodeType":"ParameterList","parameters":[],"src":"767:0:30"},"scope":4519,"src":"731:74:30","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[98],"body":{"id":4506,"nodeType":"Block","src":"974:32:30","statements":[{"expression":{"id":4504,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4488,"src":"991:8:30","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":4503,"id":4505,"nodeType":"Return","src":"984:15:30"}]},"documentation":{"id":4499,"nodeType":"StructuredDocumentation","src":"811:101:30","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":4507,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:30","nodeType":"FunctionDefinition","parameters":{"id":4500,"nodeType":"ParameterList","parameters":[],"src":"933:2:30"},"returnParameters":{"id":4503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4502,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4507,"src":"959:13:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4501,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:30","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:30"},"scope":4519,"src":"917:89:30","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":4517,"nodeType":"Block","src":"1146:38:30","statements":[{"expression":{"id":4515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4513,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4488,"src":"1156:8:30","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4514,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4510,"src":"1167:10:30","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:30","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":4516,"nodeType":"ExpressionStatement","src":"1156:21:30"}]},"documentation":{"id":4508,"nodeType":"StructuredDocumentation","src":"1012:73:30","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":4518,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:30","nodeType":"FunctionDefinition","parameters":{"id":4511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4510,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:30","nodeType":"VariableDeclaration","scope":4518,"src":"1111:24:30","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":4509,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:30","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:30"},"returnParameters":{"id":4512,"nodeType":"ParameterList","parameters":[],"src":"1146:0:30"},"scope":4519,"src":"1090:94:30","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4520,"src":"666:520:30","usedErrors":[],"usedEvents":[]}],"src":"46:1141:30"},"id":30},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[4818],"LogExpMath":[6174]},"id":4819,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4521,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":4523,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4819,"sourceUnit":6175,"src":"72:46:31","symbolAliases":[{"foreign":{"id":4522,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6174,"src":"81:10:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":4524,"nodeType":"StructuredDocumentation","src":"120:119:31","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":4818,"linearizedBaseContracts":[4818],"name":"FixedPoint","nameLocation":"247:10:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4525,"nodeType":"StructuredDocumentation","src":"264:39:31","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":4527,"name":"ZeroDivision","nameLocation":"314:12:31","nodeType":"ErrorDefinition","parameters":{"id":4526,"nodeType":"ParameterList","parameters":[],"src":"326:2:31"},"src":"308:21:31"},{"constant":true,"id":4530,"mutability":"constant","name":"ONE","nameLocation":"459:3:31","nodeType":"VariableDeclaration","scope":4818,"src":"433:36:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4528,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":4529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:31","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4535,"mutability":"constant","name":"TWO","nameLocation":"522:3:31","nodeType":"VariableDeclaration","scope":4818,"src":"496:39:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4531,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:31","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4533,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"532:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4540,"mutability":"constant","name":"FOUR","nameLocation":"567:4:31","nodeType":"VariableDeclaration","scope":4818,"src":"541:40:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4536,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":4537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:31","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4538,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"578:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4543,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:31","nodeType":"VariableDeclaration","scope":4818,"src":"587:56:31","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4541,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":4542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:31","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":4562,"nodeType":"Block","src":"733:148:31","statements":[{"assignments":[4553],"declarations":[{"constant":false,"id":4553,"mutability":"mutable","name":"product","nameLocation":"828:7:31","nodeType":"VariableDeclaration","scope":4562,"src":"820:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4552,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4557,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4554,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4545,"src":"838:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4555,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4547,"src":"842:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:31"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4558,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4553,"src":"861:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4559,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"871:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4551,"id":4561,"nodeType":"Return","src":"854:20:31"}]},"id":4563,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:31","nodeType":"FunctionDefinition","parameters":{"id":4548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4545,"mutability":"mutable","name":"a","nameLocation":"687:1:31","nodeType":"VariableDeclaration","scope":4563,"src":"679:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4544,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4547,"mutability":"mutable","name":"b","nameLocation":"698:1:31","nodeType":"VariableDeclaration","scope":4563,"src":"690:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4546,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:31"},"returnParameters":{"id":4551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4563,"src":"724:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4549,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:31"},"scope":4818,"src":"662:219:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4579,"nodeType":"Block","src":"963:351:31","statements":[{"assignments":[4573],"declarations":[{"constant":false,"id":4573,"mutability":"mutable","name":"product","nameLocation":"1058:7:31","nodeType":"VariableDeclaration","scope":4579,"src":"1050:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4572,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4577,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4574,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4565,"src":"1068:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4575,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4567,"src":"1072:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:31"},{"AST":{"nativeSrc":"1211:97:31","nodeType":"YulBlock","src":"1211:97:31","statements":[{"nativeSrc":"1225:73:31","nodeType":"YulAssignment","src":"1225:73:31","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:31","nodeType":"YulIdentifier","src":"1253:7:31"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:31","nodeType":"YulIdentifier","src":"1246:6:31"},"nativeSrc":"1246:15:31","nodeType":"YulFunctionCall","src":"1246:15:31"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:31","nodeType":"YulIdentifier","src":"1239:6:31"},"nativeSrc":"1239:23:31","nodeType":"YulFunctionCall","src":"1239:23:31"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:31","nodeType":"YulIdentifier","src":"1276:7:31"},{"kind":"number","nativeSrc":"1285:1:31","nodeType":"YulLiteral","src":"1285:1:31","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:31","nodeType":"YulIdentifier","src":"1272:3:31"},"nativeSrc":"1272:15:31","nodeType":"YulFunctionCall","src":"1272:15:31"},{"name":"ONE","nativeSrc":"1289:3:31","nodeType":"YulIdentifier","src":"1289:3:31"}],"functionName":{"name":"div","nativeSrc":"1268:3:31","nodeType":"YulIdentifier","src":"1268:3:31"},"nativeSrc":"1268:25:31","nodeType":"YulFunctionCall","src":"1268:25:31"},{"kind":"number","nativeSrc":"1295:1:31","nodeType":"YulLiteral","src":"1295:1:31","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:31","nodeType":"YulIdentifier","src":"1264:3:31"},"nativeSrc":"1264:33:31","nodeType":"YulFunctionCall","src":"1264:33:31"}],"functionName":{"name":"mul","nativeSrc":"1235:3:31","nodeType":"YulIdentifier","src":"1235:3:31"},"nativeSrc":"1235:63:31","nodeType":"YulFunctionCall","src":"1235:63:31"},"variableNames":[{"name":"result","nativeSrc":"1225:6:31","nodeType":"YulIdentifier","src":"1225:6:31"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4530,"isOffset":false,"isSlot":false,"src":"1289:3:31","valueSize":1},{"declaration":4573,"isOffset":false,"isSlot":false,"src":"1253:7:31","valueSize":1},{"declaration":4573,"isOffset":false,"isSlot":false,"src":"1276:7:31","valueSize":1},{"declaration":4570,"isOffset":false,"isSlot":false,"src":"1225:6:31","valueSize":1}],"flags":["memory-safe"],"id":4578,"nodeType":"InlineAssembly","src":"1186:122:31"}]},"id":4580,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:31","nodeType":"FunctionDefinition","parameters":{"id":4568,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4565,"mutability":"mutable","name":"a","nameLocation":"910:1:31","nodeType":"VariableDeclaration","scope":4580,"src":"902:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4564,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4567,"mutability":"mutable","name":"b","nameLocation":"921:1:31","nodeType":"VariableDeclaration","scope":4580,"src":"913:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4566,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:31"},"returnParameters":{"id":4571,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4570,"mutability":"mutable","name":"result","nameLocation":"955:6:31","nodeType":"VariableDeclaration","scope":4580,"src":"947:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4569,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:31"},"scope":4818,"src":"887:427:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4599,"nodeType":"Block","src":"1391:254:31","statements":[{"assignments":[4590],"declarations":[{"constant":false,"id":4590,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:31","nodeType":"VariableDeclaration","scope":4599,"src":"1491:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4589,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4594,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4591,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1511:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4592,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"1515:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:31"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4595,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4590,"src":"1625:9:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4596,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4584,"src":"1637:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4588,"id":4598,"nodeType":"Return","src":"1618:20:31"}]},"id":4600,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:31","nodeType":"FunctionDefinition","parameters":{"id":4585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4582,"mutability":"mutable","name":"a","nameLocation":"1345:1:31","nodeType":"VariableDeclaration","scope":4600,"src":"1337:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4581,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4584,"mutability":"mutable","name":"b","nameLocation":"1356:1:31","nodeType":"VariableDeclaration","scope":4600,"src":"1348:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4583,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:31"},"returnParameters":{"id":4588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4600,"src":"1382:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4586,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:31"},"scope":4818,"src":"1320:325:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4615,"nodeType":"Block","src":"1727:43:31","statements":[{"expression":{"arguments":[{"id":4610,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4602,"src":"1753:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4611,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"1756:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4612,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4604,"src":"1761:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4609,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4644,"src":"1744:8:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":4613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4608,"id":4614,"nodeType":"Return","src":"1737:26:31"}]},"id":4616,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:31","nodeType":"FunctionDefinition","parameters":{"id":4605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4602,"mutability":"mutable","name":"a","nameLocation":"1674:1:31","nodeType":"VariableDeclaration","scope":4616,"src":"1666:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4601,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4604,"mutability":"mutable","name":"b","nameLocation":"1685:1:31","nodeType":"VariableDeclaration","scope":4616,"src":"1677:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4603,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:31"},"returnParameters":{"id":4608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4607,"mutability":"mutable","name":"result","nameLocation":"1719:6:31","nodeType":"VariableDeclaration","scope":4616,"src":"1711:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:31"},"scope":4818,"src":"1651:119:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4643,"nodeType":"Block","src":"1912:774:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4628,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4623,"src":"2004:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:31","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4635,"nodeType":"IfStatement","src":"2000:58:31","trueBody":{"id":4634,"nodeType":"Block","src":"2012:46:31","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4631,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4527,"src":"2033:12:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4633,"nodeType":"RevertStatement","src":"2026:21:31"}]}},{"assignments":[4637],"declarations":[{"constant":false,"id":4637,"mutability":"mutable","name":"product","nameLocation":"2143:7:31","nodeType":"VariableDeclaration","scope":4643,"src":"2135:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4636,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4641,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4638,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"2153:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4639,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4621,"src":"2157:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:31"},{"AST":{"nativeSrc":"2585:95:31","nodeType":"YulBlock","src":"2585:95:31","statements":[{"nativeSrc":"2599:71:31","nodeType":"YulAssignment","src":"2599:71:31","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:31","nodeType":"YulIdentifier","src":"2627:7:31"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:31","nodeType":"YulIdentifier","src":"2620:6:31"},"nativeSrc":"2620:15:31","nodeType":"YulFunctionCall","src":"2620:15:31"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:31","nodeType":"YulIdentifier","src":"2613:6:31"},"nativeSrc":"2613:23:31","nodeType":"YulFunctionCall","src":"2613:23:31"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:31","nodeType":"YulIdentifier","src":"2650:7:31"},{"kind":"number","nativeSrc":"2659:1:31","nodeType":"YulLiteral","src":"2659:1:31","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:31","nodeType":"YulIdentifier","src":"2646:3:31"},"nativeSrc":"2646:15:31","nodeType":"YulFunctionCall","src":"2646:15:31"},{"name":"c","nativeSrc":"2663:1:31","nodeType":"YulIdentifier","src":"2663:1:31"}],"functionName":{"name":"div","nativeSrc":"2642:3:31","nodeType":"YulIdentifier","src":"2642:3:31"},"nativeSrc":"2642:23:31","nodeType":"YulFunctionCall","src":"2642:23:31"},{"kind":"number","nativeSrc":"2667:1:31","nodeType":"YulLiteral","src":"2667:1:31","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:31","nodeType":"YulIdentifier","src":"2638:3:31"},"nativeSrc":"2638:31:31","nodeType":"YulFunctionCall","src":"2638:31:31"}],"functionName":{"name":"mul","nativeSrc":"2609:3:31","nodeType":"YulIdentifier","src":"2609:3:31"},"nativeSrc":"2609:61:31","nodeType":"YulFunctionCall","src":"2609:61:31"},"variableNames":[{"name":"result","nativeSrc":"2599:6:31","nodeType":"YulIdentifier","src":"2599:6:31"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4623,"isOffset":false,"isSlot":false,"src":"2663:1:31","valueSize":1},{"declaration":4637,"isOffset":false,"isSlot":false,"src":"2627:7:31","valueSize":1},{"declaration":4637,"isOffset":false,"isSlot":false,"src":"2650:7:31","valueSize":1},{"declaration":4626,"isOffset":false,"isSlot":false,"src":"2599:6:31","valueSize":1}],"flags":["memory-safe"],"id":4642,"nodeType":"InlineAssembly","src":"2560:120:31"}]},"documentation":{"id":4617,"nodeType":"StructuredDocumentation","src":"1776:41:31","text":"@dev Return (a * b) / c, rounding up."},"id":4644,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:31","nodeType":"FunctionDefinition","parameters":{"id":4624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4619,"mutability":"mutable","name":"a","nameLocation":"1848:1:31","nodeType":"VariableDeclaration","scope":4644,"src":"1840:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4618,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4621,"mutability":"mutable","name":"b","nameLocation":"1859:1:31","nodeType":"VariableDeclaration","scope":4644,"src":"1851:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4620,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4623,"mutability":"mutable","name":"c","nameLocation":"1870:1:31","nodeType":"VariableDeclaration","scope":4644,"src":"1862:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4622,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:31"},"returnParameters":{"id":4627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4626,"mutability":"mutable","name":"result","nameLocation":"1904:6:31","nodeType":"VariableDeclaration","scope":4644,"src":"1896:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4625,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:31"},"scope":4818,"src":"1822:864:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4663,"nodeType":"Block","src":"3159:345:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4654,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4649,"src":"3251:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:31","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4661,"nodeType":"IfStatement","src":"3247:58:31","trueBody":{"id":4660,"nodeType":"Block","src":"3259:46:31","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4657,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4527,"src":"3280:12:31","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4659,"nodeType":"RevertStatement","src":"3273:21:31"}]}},{"AST":{"nativeSrc":"3415:83:31","nodeType":"YulBlock","src":"3415:83:31","statements":[{"nativeSrc":"3429:59:31","nodeType":"YulAssignment","src":"3429:59:31","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:31","nodeType":"YulIdentifier","src":"3457:1:31"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:31","nodeType":"YulIdentifier","src":"3450:6:31"},"nativeSrc":"3450:9:31","nodeType":"YulFunctionCall","src":"3450:9:31"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:31","nodeType":"YulIdentifier","src":"3443:6:31"},"nativeSrc":"3443:17:31","nodeType":"YulFunctionCall","src":"3443:17:31"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:31","nodeType":"YulLiteral","src":"3466:1:31","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:31","nodeType":"YulIdentifier","src":"3477:1:31"},{"kind":"number","nativeSrc":"3480:1:31","nodeType":"YulLiteral","src":"3480:1:31","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:31","nodeType":"YulIdentifier","src":"3473:3:31"},"nativeSrc":"3473:9:31","nodeType":"YulFunctionCall","src":"3473:9:31"},{"name":"b","nativeSrc":"3484:1:31","nodeType":"YulIdentifier","src":"3484:1:31"}],"functionName":{"name":"div","nativeSrc":"3469:3:31","nodeType":"YulIdentifier","src":"3469:3:31"},"nativeSrc":"3469:17:31","nodeType":"YulFunctionCall","src":"3469:17:31"}],"functionName":{"name":"add","nativeSrc":"3462:3:31","nodeType":"YulIdentifier","src":"3462:3:31"},"nativeSrc":"3462:25:31","nodeType":"YulFunctionCall","src":"3462:25:31"}],"functionName":{"name":"mul","nativeSrc":"3439:3:31","nodeType":"YulIdentifier","src":"3439:3:31"},"nativeSrc":"3439:49:31","nodeType":"YulFunctionCall","src":"3439:49:31"},"variableNames":[{"name":"result","nativeSrc":"3429:6:31","nodeType":"YulIdentifier","src":"3429:6:31"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4647,"isOffset":false,"isSlot":false,"src":"3457:1:31","valueSize":1},{"declaration":4647,"isOffset":false,"isSlot":false,"src":"3477:1:31","valueSize":1},{"declaration":4649,"isOffset":false,"isSlot":false,"src":"3484:1:31","valueSize":1},{"declaration":4652,"isOffset":false,"isSlot":false,"src":"3429:6:31","valueSize":1}],"flags":["memory-safe"],"id":4662,"nodeType":"InlineAssembly","src":"3390:108:31"}]},"documentation":{"id":4645,"nodeType":"StructuredDocumentation","src":"2692:383:31","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":4664,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:31","nodeType":"FunctionDefinition","parameters":{"id":4650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4647,"mutability":"mutable","name":"a","nameLocation":"3106:1:31","nodeType":"VariableDeclaration","scope":4664,"src":"3098:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4646,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4649,"mutability":"mutable","name":"b","nameLocation":"3117:1:31","nodeType":"VariableDeclaration","scope":4664,"src":"3109:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4648,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:31"},"returnParameters":{"id":4653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4652,"mutability":"mutable","name":"result","nameLocation":"3151:6:31","nodeType":"VariableDeclaration","scope":4664,"src":"3143:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4651,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:31"},"scope":4818,"src":"3080:424:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4739,"nodeType":"Block","src":"3807:723:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4674,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"3975:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4675,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"3980:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4680,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4028:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4681,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4535,"src":"4033:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4689,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4093:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4690,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"4098:4:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4735,"nodeType":"Block","src":"4209:315:31","statements":[{"assignments":[4706],"declarations":[{"constant":false,"id":4706,"mutability":"mutable","name":"raw","nameLocation":"4231:3:31","nodeType":"VariableDeclaration","scope":4735,"src":"4223:11:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4705,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4712,"initialValue":{"arguments":[{"id":4709,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4252:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4710,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"4255:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4707,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6174,"src":"4237:10:31","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6174_$","typeString":"type(library LogExpMath)"}},"id":4708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:31","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5077,"src":"4237:14:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:31"},{"assignments":[4714],"declarations":[{"constant":false,"id":4714,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:31","nodeType":"VariableDeclaration","scope":4735,"src":"4271:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4713,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4721,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4716,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"4296:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4717,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4543,"src":"4301:22:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4715,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"4290:5:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:31","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:31"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4722,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"4347:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4723,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4714,"src":"4353:8:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4733,"nodeType":"Block","src":"4410:104:31","statements":[{"id":4732,"nodeType":"UncheckedBlock","src":"4428:72:31","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4728,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"4467:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4729,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4714,"src":"4473:8:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4673,"id":4731,"nodeType":"Return","src":"4460:21:31"}]}]},"id":4734,"nodeType":"IfStatement","src":"4343:171:31","trueBody":{"id":4727,"nodeType":"Block","src":"4363:41:31","statements":[{"expression":{"hexValue":"30","id":4725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:31","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4673,"id":4726,"nodeType":"Return","src":"4381:8:31"}]}}]},"id":4736,"nodeType":"IfStatement","src":"4089:435:31","trueBody":{"id":4704,"nodeType":"Block","src":"4104:99:31","statements":[{"assignments":[4693],"declarations":[{"constant":false,"id":4693,"mutability":"mutable","name":"square","nameLocation":"4126:6:31","nodeType":"VariableDeclaration","scope":4704,"src":"4118:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4692,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4698,"initialValue":{"arguments":[{"id":4695,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4143:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4696,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4146:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4694,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4563,"src":"4135:7:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:31"},{"expression":{"arguments":[{"id":4700,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"4177:6:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4701,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4693,"src":"4185:6:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4699,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4563,"src":"4169:7:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4673,"id":4703,"nodeType":"Return","src":"4162:30:31"}]}},"id":4737,"nodeType":"IfStatement","src":"4024:500:31","trueBody":{"id":4688,"nodeType":"Block","src":"4038:45:31","statements":[{"expression":{"arguments":[{"id":4684,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4067:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4685,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4070:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4683,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4563,"src":"4059:7:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4673,"id":4687,"nodeType":"Return","src":"4052:20:31"}]}},"id":4738,"nodeType":"IfStatement","src":"3971:553:31","trueBody":{"id":4679,"nodeType":"Block","src":"3985:33:31","statements":[{"expression":{"id":4677,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"4006:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4673,"id":4678,"nodeType":"Return","src":"3999:8:31"}]}}]},"documentation":{"id":4665,"nodeType":"StructuredDocumentation","src":"3510:221:31","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":4740,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:31","nodeType":"FunctionDefinition","parameters":{"id":4670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4667,"mutability":"mutable","name":"x","nameLocation":"3761:1:31","nodeType":"VariableDeclaration","scope":4740,"src":"3753:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4666,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4669,"mutability":"mutable","name":"y","nameLocation":"3772:1:31","nodeType":"VariableDeclaration","scope":4740,"src":"3764:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4668,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:31"},"returnParameters":{"id":4673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4740,"src":"3798:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4671,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:31"},"scope":4818,"src":"3736:794:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4806,"nodeType":"Block","src":"4829:568:31","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4750,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"4997:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4751,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"5002:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4756,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"5050:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4757,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4535,"src":"5055:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4765,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"5113:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":4766,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"5118:4:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4802,"nodeType":"Block","src":"5225:166:31","statements":[{"assignments":[4782],"declarations":[{"constant":false,"id":4782,"mutability":"mutable","name":"raw","nameLocation":"5247:3:31","nodeType":"VariableDeclaration","scope":4802,"src":"5239:11:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4788,"initialValue":{"arguments":[{"id":4785,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5268:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4786,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4745,"src":"5271:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4783,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6174,"src":"5253:10:31","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$6174_$","typeString":"type(library LogExpMath)"}},"id":4784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:31","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":5077,"src":"5253:14:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:31"},{"assignments":[4790],"declarations":[{"constant":false,"id":4790,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:31","nodeType":"VariableDeclaration","scope":4802,"src":"5287:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4789,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4797,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":4792,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4782,"src":"5312:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4793,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4543,"src":"5317:22:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4791,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"5306:5:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":4795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:31","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:31"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4798,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4782,"src":"5366:3:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4799,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4790,"src":"5372:8:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4749,"id":4801,"nodeType":"Return","src":"5359:21:31"}]},"id":4803,"nodeType":"IfStatement","src":"5109:282:31","trueBody":{"id":4780,"nodeType":"Block","src":"5124:95:31","statements":[{"assignments":[4769],"declarations":[{"constant":false,"id":4769,"mutability":"mutable","name":"square","nameLocation":"5146:6:31","nodeType":"VariableDeclaration","scope":4780,"src":"5138:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4768,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4774,"initialValue":{"arguments":[{"id":4771,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5161:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4772,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5164:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4770,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"5155:5:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:31"},{"expression":{"arguments":[{"id":4776,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"5193:6:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4777,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4769,"src":"5201:6:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4775,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"5187:5:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4749,"id":4779,"nodeType":"Return","src":"5180:28:31"}]}},"id":4804,"nodeType":"IfStatement","src":"5046:345:31","trueBody":{"id":4764,"nodeType":"Block","src":"5060:43:31","statements":[{"expression":{"arguments":[{"id":4760,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5087:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4761,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5090:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4759,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"5081:5:31","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:31","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4749,"id":4763,"nodeType":"Return","src":"5074:18:31"}]}},"id":4805,"nodeType":"IfStatement","src":"4993:398:31","trueBody":{"id":4755,"nodeType":"Block","src":"5007:33:31","statements":[{"expression":{"id":4753,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4743,"src":"5028:1:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4749,"id":4754,"nodeType":"Return","src":"5021:8:31"}]}}]},"documentation":{"id":4741,"nodeType":"StructuredDocumentation","src":"4536:219:31","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":4807,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:31","nodeType":"FunctionDefinition","parameters":{"id":4746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4743,"mutability":"mutable","name":"x","nameLocation":"4783:1:31","nodeType":"VariableDeclaration","scope":4807,"src":"4775:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4742,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4745,"mutability":"mutable","name":"y","nameLocation":"4794:1:31","nodeType":"VariableDeclaration","scope":4807,"src":"4786:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4744,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:31"},"returnParameters":{"id":4749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4807,"src":"4820:7:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4747,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:31"},"scope":4818,"src":"4760:637:31","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4816,"nodeType":"Block","src":"5750:175:31","statements":[{"AST":{"nativeSrc":"5857:62:31","nodeType":"YulBlock","src":"5857:62:31","statements":[{"nativeSrc":"5871:38:31","nodeType":"YulAssignment","src":"5871:38:31","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:31","nodeType":"YulIdentifier","src":"5888:1:31"},{"name":"ONE","nativeSrc":"5891:3:31","nodeType":"YulIdentifier","src":"5891:3:31"}],"functionName":{"name":"lt","nativeSrc":"5885:2:31","nodeType":"YulIdentifier","src":"5885:2:31"},"nativeSrc":"5885:10:31","nodeType":"YulFunctionCall","src":"5885:10:31"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:31","nodeType":"YulIdentifier","src":"5901:3:31"},{"name":"x","nativeSrc":"5906:1:31","nodeType":"YulIdentifier","src":"5906:1:31"}],"functionName":{"name":"sub","nativeSrc":"5897:3:31","nodeType":"YulIdentifier","src":"5897:3:31"},"nativeSrc":"5897:11:31","nodeType":"YulFunctionCall","src":"5897:11:31"}],"functionName":{"name":"mul","nativeSrc":"5881:3:31","nodeType":"YulIdentifier","src":"5881:3:31"},"nativeSrc":"5881:28:31","nodeType":"YulFunctionCall","src":"5881:28:31"},"variableNames":[{"name":"result","nativeSrc":"5871:6:31","nodeType":"YulIdentifier","src":"5871:6:31"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":4530,"isOffset":false,"isSlot":false,"src":"5891:3:31","valueSize":1},{"declaration":4530,"isOffset":false,"isSlot":false,"src":"5901:3:31","valueSize":1},{"declaration":4813,"isOffset":false,"isSlot":false,"src":"5871:6:31","valueSize":1},{"declaration":4810,"isOffset":false,"isSlot":false,"src":"5888:1:31","valueSize":1},{"declaration":4810,"isOffset":false,"isSlot":false,"src":"5906:1:31","valueSize":1}],"flags":["memory-safe"],"id":4815,"nodeType":"InlineAssembly","src":"5832:87:31"}]},"documentation":{"id":4808,"nodeType":"StructuredDocumentation","src":"5403:272:31","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":4817,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:31","nodeType":"FunctionDefinition","parameters":{"id":4811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4810,"mutability":"mutable","name":"x","nameLocation":"5708:1:31","nodeType":"VariableDeclaration","scope":4817,"src":"5700:9:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4809,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:31"},"returnParameters":{"id":4814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4813,"mutability":"mutable","name":"result","nameLocation":"5742:6:31","nodeType":"VariableDeclaration","scope":4817,"src":"5734:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4812,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:31"},"scope":4818,"src":"5680:245:31","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":4819,"src":"239:5688:31","usedErrors":[4527],"usedEvents":[]}],"src":"46:5882:31"},"id":31},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[6174]},"id":6175,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4820,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:32"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":4821,"nodeType":"StructuredDocumentation","src":"79:515:32","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":6174,"linearizedBaseContracts":[6174],"name":"LogExpMath","nameLocation":"603:10:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4822,"nodeType":"StructuredDocumentation","src":"620:79:32","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":4824,"name":"BaseOutOfBounds","nameLocation":"710:15:32","nodeType":"ErrorDefinition","parameters":{"id":4823,"nodeType":"ParameterList","parameters":[],"src":"725:2:32"},"src":"704:24:32"},{"documentation":{"id":4825,"nodeType":"StructuredDocumentation","src":"734:83:32","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":4827,"name":"ExponentOutOfBounds","nameLocation":"828:19:32","nodeType":"ErrorDefinition","parameters":{"id":4826,"nodeType":"ParameterList","parameters":[],"src":"847:2:32"},"src":"822:28:32"},{"documentation":{"id":4828,"nodeType":"StructuredDocumentation","src":"856:96:32","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":4830,"name":"ProductOutOfBounds","nameLocation":"963:18:32","nodeType":"ErrorDefinition","parameters":{"id":4829,"nodeType":"ParameterList","parameters":[],"src":"981:2:32"},"src":"957:27:32"},{"documentation":{"id":4831,"nodeType":"StructuredDocumentation","src":"990:109:32","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":4833,"name":"InvalidExponent","nameLocation":"1110:15:32","nodeType":"ErrorDefinition","parameters":{"id":4832,"nodeType":"ParameterList","parameters":[],"src":"1125:2:32"},"src":"1104:24:32"},{"documentation":{"id":4834,"nodeType":"StructuredDocumentation","src":"1134:119:32","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":4836,"name":"OutOfBounds","nameLocation":"1264:11:32","nodeType":"ErrorDefinition","parameters":{"id":4835,"nodeType":"ParameterList","parameters":[],"src":"1275:2:32"},"src":"1258:20:32"},{"constant":true,"id":4839,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:32","nodeType":"VariableDeclaration","scope":6174,"src":"1539:29:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4837,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":4838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:32","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":4842,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:32","nodeType":"VariableDeclaration","scope":6174,"src":"1729:29:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4840,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":4841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":4845,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:32","nodeType":"VariableDeclaration","scope":6174,"src":"1764:29:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4843,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":4844,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:32","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":4848,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:32","nodeType":"VariableDeclaration","scope":6174,"src":"2310:45:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4846,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":4847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:32","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":4852,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:32","nodeType":"VariableDeclaration","scope":6174,"src":"2361:45:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4849,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":4851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:32","subExpression":{"hexValue":"3431653138","id":4850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:32","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":4857,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:32","nodeType":"VariableDeclaration","scope":6174,"src":"2557:49:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4853,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4854,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"2593:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":4855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4862,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:32","nodeType":"VariableDeclaration","scope":6174,"src":"2612:49:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4858,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":4859,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"2648:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":4860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":4872,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:32","nodeType":"VariableDeclaration","scope":6174,"src":"2668:65:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4863,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":4866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":4864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":4865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:32","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:32","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":4869,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"2726:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4867,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:32","typeDescriptions":{}}},"id":4870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":4875,"mutability":"constant","name":"x0","nameLocation":"2784:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"2768:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4873,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":4874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:32","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":4878,"mutability":"constant","name":"a0","nameLocation":"2840:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"2824:77:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4876,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":4877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:32","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":4881,"mutability":"constant","name":"x1","nameLocation":"2948:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"2932:41:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4879,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":4880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:32","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":4884,"mutability":"constant","name":"a1","nameLocation":"3003:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"2987:49:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4882,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":4883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:32","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":4887,"mutability":"constant","name":"x2","nameLocation":"3112:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3096:43:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4885,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":4886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:32","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":4890,"mutability":"constant","name":"a2","nameLocation":"3169:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3153:55:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4888,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":4889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:32","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":4893,"mutability":"constant","name":"x3","nameLocation":"3241:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3225:43:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4891,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":4892,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:32","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":4896,"mutability":"constant","name":"a3","nameLocation":"3298:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3282:48:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4894,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":4895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:32","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":4899,"mutability":"constant","name":"x4","nameLocation":"3363:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3347:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4897,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":4898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:32","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":4902,"mutability":"constant","name":"a4","nameLocation":"3419:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3403:45:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4900,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":4901,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:32","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":4905,"mutability":"constant","name":"x5","nameLocation":"3481:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3465:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4903,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":4904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:32","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":4908,"mutability":"constant","name":"a5","nameLocation":"3537:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3521:43:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4906,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":4907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:32","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":4911,"mutability":"constant","name":"x6","nameLocation":"3597:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3581:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4909,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":4910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:32","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":4914,"mutability":"constant","name":"a6","nameLocation":"3653:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3637:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4912,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":4913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:32","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":4917,"mutability":"constant","name":"x7","nameLocation":"3712:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3696:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4915,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":4916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:32","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":4920,"mutability":"constant","name":"a7","nameLocation":"3768:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3752:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4918,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":4919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:32","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":4923,"mutability":"constant","name":"x8","nameLocation":"3827:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3811:41:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4921,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":4922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:32","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":4926,"mutability":"constant","name":"a8","nameLocation":"3883:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3867:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4924,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":4925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:32","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":4929,"mutability":"constant","name":"x9","nameLocation":"3942:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3926:41:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4927,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":4928,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:32","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":4932,"mutability":"constant","name":"a9","nameLocation":"3998:2:32","nodeType":"VariableDeclaration","scope":6174,"src":"3982:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4930,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":4931,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:32","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":4935,"mutability":"constant","name":"x10","nameLocation":"4057:3:32","nodeType":"VariableDeclaration","scope":6174,"src":"4041:42:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4933,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":4934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:32","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":4938,"mutability":"constant","name":"a10","nameLocation":"4114:3:32","nodeType":"VariableDeclaration","scope":6174,"src":"4098:43:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4936,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":4937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:32","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":4941,"mutability":"constant","name":"x11","nameLocation":"4175:3:32","nodeType":"VariableDeclaration","scope":6174,"src":"4159:41:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4939,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":4940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:32","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":4944,"mutability":"constant","name":"a11","nameLocation":"4231:3:32","nodeType":"VariableDeclaration","scope":6174,"src":"4215:43:32","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4942,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":4943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:32","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":5076,"nodeType":"Block","src":"4563:2233:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4954,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4949,"src":"4577:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4963,"nodeType":"IfStatement","src":"4573:131:32","trueBody":{"id":4962,"nodeType":"Block","src":"4585:119:32","statements":[{"expression":{"arguments":[{"id":4959,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"4686:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":4958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4957,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:32","typeDescriptions":{}}},"id":4960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4953,"id":4961,"nodeType":"Return","src":"4671:22:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4964,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"4718:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4970,"nodeType":"IfStatement","src":"4714:45:32","trueBody":{"id":4969,"nodeType":"Block","src":"4726:33:32","statements":[{"expression":{"hexValue":"30","id":4967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":4953,"id":4968,"nodeType":"Return","src":"4740:8:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4971,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"5133:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":4972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:32","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":4974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4980,"nodeType":"IfStatement","src":"5129:68:32","trueBody":{"id":4979,"nodeType":"Block","src":"5148:49:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4976,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4824,"src":"5169:15:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4978,"nodeType":"RevertStatement","src":"5162:24:32"}]}},{"assignments":[4982],"declarations":[{"constant":false,"id":4982,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:32","nodeType":"VariableDeclaration","scope":5076,"src":"5206:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4981,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4987,"initialValue":{"arguments":[{"id":4985,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"5231:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4984,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4983,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:32","typeDescriptions":{}}},"id":4986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:32"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4988,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4949,"src":"5591:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":4989,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4872,"src":"5596:19:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4995,"nodeType":"IfStatement","src":"5587:83:32","trueBody":{"id":4994,"nodeType":"Block","src":"5617:53:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4991,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4827,"src":"5638:19:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4993,"nodeType":"RevertStatement","src":"5631:28:32"}]}},{"assignments":[4997],"declarations":[{"constant":false,"id":4997,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:32","nodeType":"VariableDeclaration","scope":5076,"src":"5679:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4996,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5002,"initialValue":{"arguments":[{"id":5000,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4949,"src":"5704:1:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:32","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":4998,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:32","typeDescriptions":{}}},"id":5001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:32"},{"assignments":[5004],"declarations":[{"constant":false,"id":5004,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:32","nodeType":"VariableDeclaration","scope":5076,"src":"5717:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5003,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5005,"nodeType":"VariableDeclarationStatement","src":"5717:19:32"},{"id":5054,"nodeType":"UncheckedBlock","src":"5746:790:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5006,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"5774:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5007,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"5794:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5009,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"5806:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5010,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"5817:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5048,"nodeType":"Block","src":"6418:72:32","statements":[{"expression":{"id":5046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5040,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6436:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5042,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"6455:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5041,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"6451:3:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5044,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"6467:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5047,"nodeType":"ExpressionStatement","src":"6436:39:32"}]},"id":5049,"nodeType":"IfStatement","src":"5770:720:32","trueBody":{"id":5039,"nodeType":"Block","src":"5836:576:32","statements":[{"assignments":[5014],"declarations":[{"constant":false,"id":5014,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:32","nodeType":"VariableDeclaration","scope":5039,"src":"5854:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5013,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5018,"initialValue":{"arguments":[{"id":5016,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4982,"src":"5878:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5015,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6173,"src":"5871:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:32"},{"expression":{"id":5037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5019,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6308:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5020,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5014,"src":"6325:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5021,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"6335:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5023,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5024,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"6345:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5026,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5014,"src":"6358:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":5027,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"6368:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5030,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4997,"src":"6378:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5032,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5033,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"6390:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5036,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5038,"nodeType":"ExpressionStatement","src":"6308:89:32"}]}},{"expression":{"id":5052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5050,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6503:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5051,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"6519:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5053,"nodeType":"ExpressionStatement","src":"6503:22:32"}]},{"condition":{"id":5063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:32","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5055,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4852,"src":"6615:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5056,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6639:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5058,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6655:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5059,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"6671:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5062,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5068,"nodeType":"IfStatement","src":"6609:137:32","trueBody":{"id":5067,"nodeType":"Block","src":"6694:52:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5064,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4830,"src":"6715:18:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5066,"nodeType":"RevertStatement","src":"6708:27:32"}]}},{"expression":{"arguments":[{"arguments":[{"id":5072,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5004,"src":"6775:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5071,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5524,"src":"6771:3:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5070,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:32","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":5069,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:32","typeDescriptions":{}}},"id":5074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4953,"id":5075,"nodeType":"Return","src":"6756:33:32"}]},"documentation":{"id":4945,"nodeType":"StructuredDocumentation","src":"4277:214:32","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":5077,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:32","nodeType":"FunctionDefinition","parameters":{"id":4950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4947,"mutability":"mutable","name":"x","nameLocation":"4517:1:32","nodeType":"VariableDeclaration","scope":5077,"src":"4509:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4946,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4949,"mutability":"mutable","name":"y","nameLocation":"4528:1:32","nodeType":"VariableDeclaration","scope":5077,"src":"4520:9:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4948,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:32"},"returnParameters":{"id":4953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5077,"src":"4554:7:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4951,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:32"},"scope":6174,"src":"4496:2300:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5523,"nodeType":"Block","src":"7064:6082:32","statements":[{"condition":{"id":5093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:32","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5085,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"7080:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5086,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4852,"src":"7085:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5088,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"7109:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":5089,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"7114:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5092,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5098,"nodeType":"IfStatement","src":"7074:112:32","trueBody":{"id":5097,"nodeType":"Block","src":"7137:49:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5094,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4833,"src":"7158:15:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5096,"nodeType":"RevertStatement","src":"7151:24:32"}]}},{"assignments":[5100],"declarations":[{"constant":false,"id":5100,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:32","nodeType":"VariableDeclaration","scope":5523,"src":"7272:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5099,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5102,"initialValue":{"hexValue":"66616c7365","id":5101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:32"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5103,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"7316:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":5104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5117,"nodeType":"IfStatement","src":"7312:417:32","trueBody":{"id":5116,"nodeType":"Block","src":"7323:406:32","statements":[{"id":5111,"nodeType":"UncheckedBlock","src":"7633:49:32","statements":[{"expression":{"id":5109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5106,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"7661:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:32","subExpression":{"id":5107,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"7666:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5110,"nodeType":"ExpressionStatement","src":"7661:6:32"}]},{"expression":{"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5112,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5100,"src":"7695:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5115,"nodeType":"ExpressionStatement","src":"7695:23:32"}]}},{"assignments":[5119],"declarations":[{"constant":false,"id":5119,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:32","nodeType":"VariableDeclaration","scope":5523,"src":"9030:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5118,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5120,"nodeType":"VariableDeclarationStatement","src":"9030:14:32"},{"id":5156,"nodeType":"UncheckedBlock","src":"9054:457:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5121,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9082:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5122,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4875,"src":"9087:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5133,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9171:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5134,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"9176:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5149,"nodeType":"Block","src":"9256:74:32","statements":[{"expression":{"id":5147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5145,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"9274:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":5146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:32","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5148,"nodeType":"ExpressionStatement","src":"9274:11:32"}]},"id":5150,"nodeType":"IfStatement","src":"9167:163:32","trueBody":{"id":5144,"nodeType":"Block","src":"9180:70:32","statements":[{"expression":{"id":5138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5136,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9198:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5137,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"9203:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5139,"nodeType":"ExpressionStatement","src":"9198:7:32"},{"expression":{"id":5142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5140,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"9223:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5141,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4884,"src":"9233:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5143,"nodeType":"ExpressionStatement","src":"9223:12:32"}]}},"id":5151,"nodeType":"IfStatement","src":"9078:252:32","trueBody":{"id":5132,"nodeType":"Block","src":"9091:70:32","statements":[{"expression":{"id":5126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5124,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9109:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5125,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4875,"src":"9114:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5127,"nodeType":"ExpressionStatement","src":"9109:7:32"},{"expression":{"id":5130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5128,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"9134:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5129,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4878,"src":"9144:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5131,"nodeType":"ExpressionStatement","src":"9134:12:32"}]}},{"expression":{"id":5154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5152,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9492:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:32","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5155,"nodeType":"ExpressionStatement","src":"9492:8:32"}]},{"assignments":[5158],"declarations":[{"constant":false,"id":5158,"mutability":"mutable","name":"product","nameLocation":"9730:7:32","nodeType":"VariableDeclaration","scope":5523,"src":"9723:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5157,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5160,"initialValue":{"id":5159,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"9740:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:32"},{"id":5305,"nodeType":"UncheckedBlock","src":"9757:957:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5161,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9785:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5162,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4887,"src":"9790:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5178,"nodeType":"IfStatement","src":"9781:104:32","trueBody":{"id":5177,"nodeType":"Block","src":"9794:91:32","statements":[{"expression":{"id":5166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5164,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9812:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5165,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4887,"src":"9817:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5167,"nodeType":"ExpressionStatement","src":"9812:7:32"},{"expression":{"id":5175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5168,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"9837:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5169,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"9848:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5170,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4890,"src":"9858:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5172,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5173,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"9864:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5176,"nodeType":"ExpressionStatement","src":"9837:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5179,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9902:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5180,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"9907:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5196,"nodeType":"IfStatement","src":"9898:104:32","trueBody":{"id":5195,"nodeType":"Block","src":"9911:91:32","statements":[{"expression":{"id":5184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5182,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"9929:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5183,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"9934:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5185,"nodeType":"ExpressionStatement","src":"9929:7:32"},{"expression":{"id":5193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5186,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"9954:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5187,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"9965:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5188,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4896,"src":"9975:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5190,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5191,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"9981:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5194,"nodeType":"ExpressionStatement","src":"9954:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5197,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10019:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5198,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4899,"src":"10024:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5214,"nodeType":"IfStatement","src":"10015:104:32","trueBody":{"id":5213,"nodeType":"Block","src":"10028:91:32","statements":[{"expression":{"id":5202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5200,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10046:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5201,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4899,"src":"10051:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5203,"nodeType":"ExpressionStatement","src":"10046:7:32"},{"expression":{"id":5211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5204,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10071:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5205,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10082:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5206,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4902,"src":"10092:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5208,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5209,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10098:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5212,"nodeType":"ExpressionStatement","src":"10071:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5215,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10136:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5216,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4905,"src":"10141:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5232,"nodeType":"IfStatement","src":"10132:104:32","trueBody":{"id":5231,"nodeType":"Block","src":"10145:91:32","statements":[{"expression":{"id":5220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5218,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10163:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5219,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4905,"src":"10168:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5221,"nodeType":"ExpressionStatement","src":"10163:7:32"},{"expression":{"id":5229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5222,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10188:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5223,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10199:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5224,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4908,"src":"10209:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5227,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10215:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5230,"nodeType":"ExpressionStatement","src":"10188:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5233,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10253:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5234,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4911,"src":"10258:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5250,"nodeType":"IfStatement","src":"10249:104:32","trueBody":{"id":5249,"nodeType":"Block","src":"10262:91:32","statements":[{"expression":{"id":5238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5236,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10280:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5237,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4911,"src":"10285:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5239,"nodeType":"ExpressionStatement","src":"10280:7:32"},{"expression":{"id":5247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5240,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10305:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5241,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10316:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5242,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"10326:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5244,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5245,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10332:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5248,"nodeType":"ExpressionStatement","src":"10305:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5251,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10370:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5252,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4917,"src":"10375:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5268,"nodeType":"IfStatement","src":"10366:104:32","trueBody":{"id":5267,"nodeType":"Block","src":"10379:91:32","statements":[{"expression":{"id":5256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5254,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10397:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5255,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4917,"src":"10402:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5257,"nodeType":"ExpressionStatement","src":"10397:7:32"},{"expression":{"id":5265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5258,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10422:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5259,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10433:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5260,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4920,"src":"10443:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5262,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5263,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10449:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5266,"nodeType":"ExpressionStatement","src":"10422:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5269,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10487:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5270,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4923,"src":"10492:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5286,"nodeType":"IfStatement","src":"10483:104:32","trueBody":{"id":5285,"nodeType":"Block","src":"10496:91:32","statements":[{"expression":{"id":5274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5272,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10514:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5273,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4923,"src":"10519:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5275,"nodeType":"ExpressionStatement","src":"10514:7:32"},{"expression":{"id":5283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5276,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10539:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5277,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10550:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5278,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4926,"src":"10560:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5280,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5281,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10566:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5284,"nodeType":"ExpressionStatement","src":"10539:33:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5287,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10604:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5288,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4929,"src":"10609:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5304,"nodeType":"IfStatement","src":"10600:104:32","trueBody":{"id":5303,"nodeType":"Block","src":"10613:91:32","statements":[{"expression":{"id":5292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5290,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"10631:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":5291,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4929,"src":"10636:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5293,"nodeType":"ExpressionStatement","src":"10631:7:32"},{"expression":{"id":5301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5294,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10656:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5295,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"10667:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5296,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4932,"src":"10677:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5298,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5299,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"10683:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5302,"nodeType":"ExpressionStatement","src":"10656:33:32"}]}}]},{"assignments":[5307],"declarations":[{"constant":false,"id":5307,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:32","nodeType":"VariableDeclaration","scope":5523,"src":"11018:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5306,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5309,"initialValue":{"id":5308,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11037:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:32"},{"assignments":[5311],"declarations":[{"constant":false,"id":5311,"mutability":"mutable","name":"term","nameLocation":"11115:4:32","nodeType":"VariableDeclaration","scope":5523,"src":"11108:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5310,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5312,"nodeType":"VariableDeclarationStatement","src":"11108:11:32"},{"expression":{"id":5315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5313,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11228:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5314,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11235:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5316,"nodeType":"ExpressionStatement","src":"11228:8:32"},{"id":5522,"nodeType":"UncheckedBlock","src":"11246:1894:32","statements":[{"expression":{"id":5319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5317,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11270:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5318,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11283:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5320,"nodeType":"ExpressionStatement","src":"11270:17:32"},{"expression":{"id":5331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5321,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11536:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5322,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11545:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5323,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11552:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5326,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11557:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5328,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5332,"nodeType":"ExpressionStatement","src":"11536:32:32"},{"expression":{"id":5335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5333,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11582:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5334,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11595:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5336,"nodeType":"ExpressionStatement","src":"11582:17:32"},{"expression":{"id":5347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5337,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11614:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5338,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11623:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5339,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11630:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5341,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5342,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11635:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5344,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:32","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5348,"nodeType":"ExpressionStatement","src":"11614:32:32"},{"expression":{"id":5351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5349,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11660:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5350,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11673:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5352,"nodeType":"ExpressionStatement","src":"11660:17:32"},{"expression":{"id":5363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5353,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11692:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5354,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11701:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5355,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11708:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5357,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5358,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11713:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":5361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:32","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5364,"nodeType":"ExpressionStatement","src":"11692:32:32"},{"expression":{"id":5367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5365,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11738:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5366,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11751:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5368,"nodeType":"ExpressionStatement","src":"11738:17:32"},{"expression":{"id":5379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5369,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11770:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5370,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11779:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5371,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11786:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5373,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5374,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11791:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5376,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:32","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5380,"nodeType":"ExpressionStatement","src":"11770:32:32"},{"expression":{"id":5383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5381,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11816:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5382,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11829:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5384,"nodeType":"ExpressionStatement","src":"11816:17:32"},{"expression":{"id":5395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5385,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11848:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5386,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11857:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5387,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11864:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5389,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5390,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11869:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":5393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:32","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5396,"nodeType":"ExpressionStatement","src":"11848:32:32"},{"expression":{"id":5399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5397,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11894:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5398,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11907:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5400,"nodeType":"ExpressionStatement","src":"11894:17:32"},{"expression":{"id":5411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5401,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11926:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5402,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11935:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5403,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"11942:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5405,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5406,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"11947:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5408,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:32","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5412,"nodeType":"ExpressionStatement","src":"11926:32:32"},{"expression":{"id":5415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5413,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"11972:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5414,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"11985:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5416,"nodeType":"ExpressionStatement","src":"11972:17:32"},{"expression":{"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5417,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12004:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5418,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12013:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5419,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"12020:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5421,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5422,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12025:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5424,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":5425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:32","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5428,"nodeType":"ExpressionStatement","src":"12004:32:32"},{"expression":{"id":5431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5429,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12050:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5430,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12063:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5432,"nodeType":"ExpressionStatement","src":"12050:17:32"},{"expression":{"id":5443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5433,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12082:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5434,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12091:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5435,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"12098:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5437,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5438,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12103:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5440,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:32","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5444,"nodeType":"ExpressionStatement","src":"12082:32:32"},{"expression":{"id":5447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5445,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12128:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5446,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12141:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5448,"nodeType":"ExpressionStatement","src":"12128:17:32"},{"expression":{"id":5459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5449,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12160:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5450,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12169:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5451,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"12176:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5453,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5454,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12181:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5456,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":5457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:32","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5460,"nodeType":"ExpressionStatement","src":"12160:33:32"},{"expression":{"id":5463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5461,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12207:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5462,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12220:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5464,"nodeType":"ExpressionStatement","src":"12207:17:32"},{"expression":{"id":5475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5465,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12239:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5466,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12248:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5467,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"12255:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5469,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5470,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12260:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5472,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:32","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5476,"nodeType":"ExpressionStatement","src":"12239:33:32"},{"expression":{"id":5479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5477,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12286:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5478,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12299:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5480,"nodeType":"ExpressionStatement","src":"12286:17:32"},{"expression":{"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5481,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12318:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5482,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12327:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5483,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5080,"src":"12334:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5485,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5486,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12339:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5488,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":5489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:32","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5492,"nodeType":"ExpressionStatement","src":"12318:33:32"},{"expression":{"id":5495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5493,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12365:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5494,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5311,"src":"12378:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5496,"nodeType":"ExpressionStatement","src":"12365:17:32"},{"assignments":[5498],"declarations":[{"constant":false,"id":5498,"mutability":"mutable","name":"result","nameLocation":"12914:6:32","nodeType":"VariableDeclaration","scope":5522,"src":"12907:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5497,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5511,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5499,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5158,"src":"12926:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5500,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5307,"src":"12936:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5502,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5503,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"12949:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5505,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5506,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"12959:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5508,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":5509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:32","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:32"},{"expression":{"condition":{"id":5512,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5100,"src":"13075:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5519,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5498,"src":"13123:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:32","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5513,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"13095:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5514,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"13104:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5516,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5517,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5498,"src":"13114:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5084,"id":5521,"nodeType":"Return","src":"13068:61:32"}]}]},"documentation":{"id":5078,"nodeType":"StructuredDocumentation","src":"6802:203:32","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":5524,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:32","nodeType":"FunctionDefinition","parameters":{"id":5081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5080,"mutability":"mutable","name":"x","nameLocation":"7030:1:32","nodeType":"VariableDeclaration","scope":5524,"src":"7023:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5079,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:32"},"returnParameters":{"id":5084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5524,"src":"7056:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5082,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:32"},"scope":6174,"src":"7010:6136:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5597,"nodeType":"Block","src":"13315:861:32","statements":[{"assignments":[5535],"declarations":[{"constant":false,"id":5535,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:32","nodeType":"VariableDeclaration","scope":5597,"src":"13545:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5534,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5536,"nodeType":"VariableDeclarationStatement","src":"13545:14:32"},{"id":5561,"nodeType":"UncheckedBlock","src":"13569:214:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5537,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"13597:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5538,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"13617:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5540,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"13625:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5541,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"13632:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5559,"nodeType":"Block","src":"13712:61:32","statements":[{"expression":{"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5551,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5535,"src":"13730:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5553,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"13744:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5552,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"13740:3:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5555,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"13752:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5558,"nodeType":"ExpressionStatement","src":"13730:28:32"}]},"id":5560,"nodeType":"IfStatement","src":"13593:180:32","trueBody":{"id":5550,"nodeType":"Block","src":"13651:55:32","statements":[{"expression":{"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5544,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5535,"src":"13669:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5546,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5529,"src":"13686:4:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5545,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6173,"src":"13679:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5549,"nodeType":"ExpressionStatement","src":"13669:22:32"}]}}]},{"assignments":[5563],"declarations":[{"constant":false,"id":5563,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:32","nodeType":"VariableDeclaration","scope":5597,"src":"13793:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5562,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5564,"nodeType":"VariableDeclarationStatement","src":"13793:13:32"},{"id":5596,"nodeType":"UncheckedBlock","src":"13816:354:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5565,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"13844:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5566,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"13864:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5568,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"13871:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5569,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"13877:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5587,"nodeType":"Block","src":"13955:59:32","statements":[{"expression":{"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5579,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"13973:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5581,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"13986:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5580,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"13982:3:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5583,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"13993:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5586,"nodeType":"ExpressionStatement","src":"13973:26:32"}]},"id":5588,"nodeType":"IfStatement","src":"13840:174:32","trueBody":{"id":5578,"nodeType":"Block","src":"13896:53:32","statements":[{"expression":{"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5572,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"13914:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5574,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"13930:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5573,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6173,"src":"13923:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5577,"nodeType":"ExpressionStatement","src":"13914:20:32"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5589,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"14133:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5590,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"14142:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5592,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5593,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5535,"src":"14152:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5533,"id":5595,"nodeType":"Return","src":"14125:34:32"}]}]},"documentation":{"id":5525,"nodeType":"StructuredDocumentation","src":"13152:89:32","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":5598,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:32","nodeType":"FunctionDefinition","parameters":{"id":5530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5527,"mutability":"mutable","name":"arg","nameLocation":"13266:3:32","nodeType":"VariableDeclaration","scope":5598,"src":"13259:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5526,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":5529,"mutability":"mutable","name":"base","nameLocation":"13278:4:32","nodeType":"VariableDeclaration","scope":5598,"src":"13271:11:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5528,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:32"},"returnParameters":{"id":5533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5598,"src":"13307:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5531,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:32"},"scope":6174,"src":"13246:930:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5635,"nodeType":"Block","src":"14319:353:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5606,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"14416:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":5607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5613,"nodeType":"IfStatement","src":"14412:57:32","trueBody":{"id":5612,"nodeType":"Block","src":"14424:45:32","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5609,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4836,"src":"14445:11:32","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5611,"nodeType":"RevertStatement","src":"14438:20:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5614,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4857,"src":"14482:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5615,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"14502:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5617,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"14507:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5618,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"14511:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5633,"nodeType":"Block","src":"14628:38:32","statements":[{"expression":{"arguments":[{"id":5630,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"14653:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5629,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6018,"src":"14649:3:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5605,"id":5632,"nodeType":"Return","src":"14642:13:32"}]},"id":5634,"nodeType":"IfStatement","src":"14478:188:32","trueBody":{"id":5628,"nodeType":"Block","src":"14530:92:32","statements":[{"id":5627,"nodeType":"UncheckedBlock","src":"14544:68:32","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5622,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5601,"src":"14586:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":5621,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6173,"src":"14579:6:32","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":5623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:32","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5624,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"14591:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5605,"id":5626,"nodeType":"Return","src":"14572:25:32"}]}]}}]},"documentation":{"id":5599,"nodeType":"StructuredDocumentation","src":"14182:79:32","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":5636,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:32","nodeType":"FunctionDefinition","parameters":{"id":5602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5601,"mutability":"mutable","name":"a","nameLocation":"14285:1:32","nodeType":"VariableDeclaration","scope":5636,"src":"14278:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5600,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:32"},"returnParameters":{"id":5605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5604,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5636,"src":"14311:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5603,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:32"},"scope":6174,"src":"14266:406:32","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6017,"nodeType":"Block","src":"14824:5531:32","statements":[{"assignments":[5645],"declarations":[{"constant":false,"id":5645,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:32","nodeType":"VariableDeclaration","scope":6017,"src":"14910:21:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5644,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5647,"initialValue":{"hexValue":"66616c7365","id":5646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:32"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5648,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"14954:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5649,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"14958:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5666,"nodeType":"IfStatement","src":"14950:381:32","trueBody":{"id":5665,"nodeType":"Block","src":"14966:365:32","statements":[{"id":5660,"nodeType":"UncheckedBlock","src":"15216:68:32","statements":[{"expression":{"id":5658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5651,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"15244:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5652,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"15249:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5653,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"15258:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5655,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5656,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"15268:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5659,"nodeType":"ExpressionStatement","src":"15244:25:32"}]},{"expression":{"id":5663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5661,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"15297:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5664,"nodeType":"ExpressionStatement","src":"15297:23:32"}]}},{"assignments":[5668],"declarations":[{"constant":false,"id":5668,"mutability":"mutable","name":"sum","nameLocation":"16663:3:32","nodeType":"VariableDeclaration","scope":6017,"src":"16656:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5667,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5670,"initialValue":{"hexValue":"30","id":5669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:32","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:32"},{"id":5889,"nodeType":"UncheckedBlock","src":"16680:1674:32","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5671,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"16708:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5672,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4878,"src":"16713:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5673,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"16718:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5685,"nodeType":"IfStatement","src":"16704:126:32","trueBody":{"id":5684,"nodeType":"Block","src":"16726:104:32","statements":[{"expression":{"id":5678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5676,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"16744:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5677,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4878,"src":"16749:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5679,"nodeType":"ExpressionStatement","src":"16744:7:32"},{"expression":{"id":5682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5680,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"16806:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5681,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4875,"src":"16813:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5683,"nodeType":"ExpressionStatement","src":"16806:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5686,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"16848:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":5687,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4884,"src":"16853:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5688,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"16858:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5700,"nodeType":"IfStatement","src":"16844:126:32","trueBody":{"id":5699,"nodeType":"Block","src":"16866:104:32","statements":[{"expression":{"id":5693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5691,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"16884:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":5692,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4884,"src":"16889:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5694,"nodeType":"ExpressionStatement","src":"16884:7:32"},{"expression":{"id":5697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5695,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"16946:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5696,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4881,"src":"16953:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5698,"nodeType":"ExpressionStatement","src":"16946:9:32"}]}},{"expression":{"id":5703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5701,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17109:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5702,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:32","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5704,"nodeType":"ExpressionStatement","src":"17109:10:32"},{"expression":{"id":5707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5705,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17133:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":5706,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:32","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5708,"nodeType":"ExpressionStatement","src":"17133:8:32"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5709,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17276:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5710,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4890,"src":"17281:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5726,"nodeType":"IfStatement","src":"17272:94:32","trueBody":{"id":5725,"nodeType":"Block","src":"17285:81:32","statements":[{"expression":{"id":5719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5712,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17303:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5713,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17308:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5714,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17312:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5716,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5717,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4890,"src":"17322:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5720,"nodeType":"ExpressionStatement","src":"17303:21:32"},{"expression":{"id":5723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5721,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17342:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5722,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4887,"src":"17349:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5724,"nodeType":"ExpressionStatement","src":"17342:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5727,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17384:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5728,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4896,"src":"17389:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5744,"nodeType":"IfStatement","src":"17380:94:32","trueBody":{"id":5743,"nodeType":"Block","src":"17393:81:32","statements":[{"expression":{"id":5737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5730,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17411:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5731,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17416:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5732,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17420:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5734,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5735,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4896,"src":"17430:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5738,"nodeType":"ExpressionStatement","src":"17411:21:32"},{"expression":{"id":5741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5739,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17450:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5740,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"17457:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5742,"nodeType":"ExpressionStatement","src":"17450:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5745,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17492:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5746,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4902,"src":"17497:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5762,"nodeType":"IfStatement","src":"17488:94:32","trueBody":{"id":5761,"nodeType":"Block","src":"17501:81:32","statements":[{"expression":{"id":5755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5748,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17519:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5749,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17524:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5750,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17528:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5752,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5753,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4902,"src":"17538:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5756,"nodeType":"ExpressionStatement","src":"17519:21:32"},{"expression":{"id":5759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5757,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17558:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5758,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4899,"src":"17565:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5760,"nodeType":"ExpressionStatement","src":"17558:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5763,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17600:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5764,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4908,"src":"17605:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5780,"nodeType":"IfStatement","src":"17596:94:32","trueBody":{"id":5779,"nodeType":"Block","src":"17609:81:32","statements":[{"expression":{"id":5773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5766,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17627:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5767,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17632:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5768,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17636:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5770,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5771,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4908,"src":"17646:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5774,"nodeType":"ExpressionStatement","src":"17627:21:32"},{"expression":{"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5775,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17666:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5776,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4905,"src":"17673:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5778,"nodeType":"ExpressionStatement","src":"17666:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5781,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17708:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5782,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"17713:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5798,"nodeType":"IfStatement","src":"17704:94:32","trueBody":{"id":5797,"nodeType":"Block","src":"17717:81:32","statements":[{"expression":{"id":5791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5784,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17735:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5785,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17740:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5786,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17744:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5788,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5789,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4914,"src":"17754:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5792,"nodeType":"ExpressionStatement","src":"17735:21:32"},{"expression":{"id":5795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5793,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17774:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5794,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4911,"src":"17781:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5796,"nodeType":"ExpressionStatement","src":"17774:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5799,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17816:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5800,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4920,"src":"17821:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5816,"nodeType":"IfStatement","src":"17812:94:32","trueBody":{"id":5815,"nodeType":"Block","src":"17825:81:32","statements":[{"expression":{"id":5809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5802,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17843:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5803,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17848:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5804,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17852:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5806,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5807,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4920,"src":"17862:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5810,"nodeType":"ExpressionStatement","src":"17843:21:32"},{"expression":{"id":5813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5811,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17882:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5812,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4917,"src":"17889:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5814,"nodeType":"ExpressionStatement","src":"17882:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5817,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17924:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5818,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4926,"src":"17929:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5834,"nodeType":"IfStatement","src":"17920:94:32","trueBody":{"id":5833,"nodeType":"Block","src":"17933:81:32","statements":[{"expression":{"id":5827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5820,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17951:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5821,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"17956:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5822,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"17960:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5825,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4926,"src":"17970:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5828,"nodeType":"ExpressionStatement","src":"17951:21:32"},{"expression":{"id":5831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5829,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"17990:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5830,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4923,"src":"17997:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5832,"nodeType":"ExpressionStatement","src":"17990:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5835,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18032:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5836,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4932,"src":"18037:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5852,"nodeType":"IfStatement","src":"18028:94:32","trueBody":{"id":5851,"nodeType":"Block","src":"18041:81:32","statements":[{"expression":{"id":5845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5838,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18059:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5839,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18064:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5840,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18068:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5842,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5843,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4932,"src":"18078:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5846,"nodeType":"ExpressionStatement","src":"18059:21:32"},{"expression":{"id":5849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5847,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"18098:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5848,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4929,"src":"18105:2:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5850,"nodeType":"ExpressionStatement","src":"18098:9:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5853,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18140:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5854,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4938,"src":"18145:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5870,"nodeType":"IfStatement","src":"18136:97:32","trueBody":{"id":5869,"nodeType":"Block","src":"18150:83:32","statements":[{"expression":{"id":5863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5856,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18168:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5857,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18173:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5858,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18177:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5860,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5861,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4938,"src":"18187:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5864,"nodeType":"ExpressionStatement","src":"18168:22:32"},{"expression":{"id":5867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5865,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"18208:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5866,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4935,"src":"18215:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5868,"nodeType":"ExpressionStatement","src":"18208:10:32"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5871,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18251:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5872,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4944,"src":"18256:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5888,"nodeType":"IfStatement","src":"18247:97:32","trueBody":{"id":5887,"nodeType":"Block","src":"18261:83:32","statements":[{"expression":{"id":5881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5874,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18279:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5875,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18284:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5876,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18288:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5878,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5879,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4944,"src":"18298:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5882,"nodeType":"ExpressionStatement","src":"18279:22:32"},{"expression":{"id":5885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5883,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"18319:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5884,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"18326:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5886,"nodeType":"ExpressionStatement","src":"18319:10:32"}]}}]},{"id":6016,"nodeType":"UncheckedBlock","src":"18856:1493:32","statements":[{"assignments":[5891],"declarations":[{"constant":false,"id":5891,"mutability":"mutable","name":"z","nameLocation":"18887:1:32","nodeType":"VariableDeclaration","scope":6016,"src":"18880:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5890,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5904,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5892,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18893:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5893,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18897:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5895,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5896,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18907:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5899,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5639,"src":"18918:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5900,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18922:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5902,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:32"},{"assignments":[5906],"declarations":[{"constant":false,"id":5906,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:32","nodeType":"VariableDeclaration","scope":6016,"src":"18943:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5905,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5913,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5907,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"18963:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5908,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"18967:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5910,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5911,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"18972:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:32"},{"assignments":[5915],"declarations":[{"constant":false,"id":5915,"mutability":"mutable","name":"num","nameLocation":"19074:3:32","nodeType":"VariableDeclaration","scope":6016,"src":"19067:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5914,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5917,"initialValue":{"id":5916,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"19080:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:32"},{"assignments":[5919],"declarations":[{"constant":false,"id":5919,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:32","nodeType":"VariableDeclaration","scope":6016,"src":"19203:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5918,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5921,"initialValue":{"id":5920,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19222:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:32"},{"expression":{"id":5929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5922,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19304:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5923,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19311:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5924,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5906,"src":"19317:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5926,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5927,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"19330:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5930,"nodeType":"ExpressionStatement","src":"19304:32:32"},{"expression":{"id":5935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5931,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19350:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5932,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19363:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":5933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:32","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5936,"nodeType":"ExpressionStatement","src":"19350:20:32"},{"expression":{"id":5944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5937,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19385:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5938,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19392:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5939,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5906,"src":"19398:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5941,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5942,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"19411:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5945,"nodeType":"ExpressionStatement","src":"19385:32:32"},{"expression":{"id":5950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5946,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19431:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5947,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19444:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":5948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:32","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5951,"nodeType":"ExpressionStatement","src":"19431:20:32"},{"expression":{"id":5959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5952,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19466:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5953,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19473:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5954,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5906,"src":"19479:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5956,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5957,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"19492:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5960,"nodeType":"ExpressionStatement","src":"19466:32:32"},{"expression":{"id":5965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5961,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19512:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5962,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19525:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":5963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:32","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5966,"nodeType":"ExpressionStatement","src":"19512:20:32"},{"expression":{"id":5974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5967,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19547:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5968,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19554:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5969,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5906,"src":"19560:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5971,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5972,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"19573:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5975,"nodeType":"ExpressionStatement","src":"19547:32:32"},{"expression":{"id":5980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5976,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19593:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5977,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19606:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":5978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:32","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5981,"nodeType":"ExpressionStatement","src":"19593:20:32"},{"expression":{"id":5989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5982,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19628:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5983,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19635:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5984,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5906,"src":"19641:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5986,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5987,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4842,"src":"19654:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5990,"nodeType":"ExpressionStatement","src":"19628:32:32"},{"expression":{"id":5995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5991,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19674:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5992,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5915,"src":"19687:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":5993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:32","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5996,"nodeType":"ExpressionStatement","src":"19674:21:32"},{"expression":{"id":5999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5997,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"19866:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":5998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6000,"nodeType":"ExpressionStatement","src":"19866:14:32"},{"assignments":[6002],"declarations":[{"constant":false,"id":6002,"mutability":"mutable","name":"result","nameLocation":"20169:6:32","nodeType":"VariableDeclaration","scope":6016,"src":"20162:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6001,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6009,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6003,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5668,"src":"20179:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6004,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5919,"src":"20185:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6006,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":6007,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:32","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:32"},{"expression":{"condition":{"id":6010,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"20303:16:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":6013,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6002,"src":"20332:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:32","trueExpression":{"id":6012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:32","subExpression":{"id":6011,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6002,"src":"20323:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5643,"id":6015,"nodeType":"Return","src":"20296:42:32"}]}]},"documentation":{"id":5637,"nodeType":"StructuredDocumentation","src":"14678:88:32","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":6018,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:32","nodeType":"FunctionDefinition","parameters":{"id":5640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5639,"mutability":"mutable","name":"a","nameLocation":"14791:1:32","nodeType":"VariableDeclaration","scope":6018,"src":"14784:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5638,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:32"},"returnParameters":{"id":5643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5642,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6018,"src":"14816:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5641,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:32"},"scope":6174,"src":"14771:5584:32","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":6172,"nodeType":"Block","src":"20678:1804:32","statements":[{"id":6171,"nodeType":"UncheckedBlock","src":"20892:1584:32","statements":[{"expression":{"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6026,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6021,"src":"20916:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":6027,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"20921:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6029,"nodeType":"ExpressionStatement","src":"20916:11:32"},{"assignments":[6031],"declarations":[{"constant":false,"id":6031,"mutability":"mutable","name":"z","nameLocation":"21315:1:32","nodeType":"VariableDeclaration","scope":6171,"src":"21308:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6030,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6044,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6032,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6021,"src":"21321:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6033,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21325:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6035,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6036,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21335:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6038,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6039,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6021,"src":"21346:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6040,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21350:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6042,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:32"},{"assignments":[6046],"declarations":[{"constant":false,"id":6046,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:32","nodeType":"VariableDeclaration","scope":6171,"src":"21371:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6045,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6053,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6047,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"21391:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6048,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"21395:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6050,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6051,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21400:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:32"},{"assignments":[6055],"declarations":[{"constant":false,"id":6055,"mutability":"mutable","name":"num","nameLocation":"21502:3:32","nodeType":"VariableDeclaration","scope":6171,"src":"21495:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6054,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6057,"initialValue":{"id":6056,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6031,"src":"21508:1:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:32"},{"assignments":[6059],"declarations":[{"constant":false,"id":6059,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:32","nodeType":"VariableDeclaration","scope":6171,"src":"21631:16:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6058,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":6061,"initialValue":{"id":6060,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21650:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:32"},{"expression":{"id":6069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6062,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21732:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6063,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21739:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6064,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"21745:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6066,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6067,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21758:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6070,"nodeType":"ExpressionStatement","src":"21732:32:32"},{"expression":{"id":6075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6071,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"21778:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6072,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21791:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":6073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:32","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6076,"nodeType":"ExpressionStatement","src":"21778:20:32"},{"expression":{"id":6084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6077,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21813:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6078,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21820:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6079,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"21826:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6081,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6082,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21839:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6085,"nodeType":"ExpressionStatement","src":"21813:32:32"},{"expression":{"id":6090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6086,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"21859:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6087,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21872:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":6088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:32","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6091,"nodeType":"ExpressionStatement","src":"21859:20:32"},{"expression":{"id":6099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6092,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21894:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6093,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21901:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6094,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"21907:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6096,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6097,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"21920:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6100,"nodeType":"ExpressionStatement","src":"21894:32:32"},{"expression":{"id":6105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6101,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"21940:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6102,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21953:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":6103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:32","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6106,"nodeType":"ExpressionStatement","src":"21940:20:32"},{"expression":{"id":6114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6107,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21975:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6108,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"21982:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6109,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"21988:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6111,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6112,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"22001:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6115,"nodeType":"ExpressionStatement","src":"21975:32:32"},{"expression":{"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6116,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"22021:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6117,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22034:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":6118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:32","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6121,"nodeType":"ExpressionStatement","src":"22021:20:32"},{"expression":{"id":6129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6122,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22056:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6123,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22063:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6124,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"22069:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6127,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"22082:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6130,"nodeType":"ExpressionStatement","src":"22056:32:32"},{"expression":{"id":6135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6131,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"22102:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6132,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22115:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":6133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:32","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6136,"nodeType":"ExpressionStatement","src":"22102:21:32"},{"expression":{"id":6144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6137,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22138:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6138,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22145:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6139,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"22151:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6141,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6142,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"22164:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6145,"nodeType":"ExpressionStatement","src":"22138:32:32"},{"expression":{"id":6150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6146,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"22184:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6147,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22197:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":6148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:32","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6151,"nodeType":"ExpressionStatement","src":"22184:21:32"},{"expression":{"id":6159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6152,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22220:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6153,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22227:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6154,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6046,"src":"22233:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":6156,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6157,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4845,"src":"22246:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6160,"nodeType":"ExpressionStatement","src":"22220:32:32"},{"expression":{"id":6165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6161,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"22266:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6162,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6055,"src":"22279:3:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":6163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:32","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":6166,"nodeType":"ExpressionStatement","src":"22266:21:32"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":6169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6167,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6059,"src":"22452:9:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":6168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:32","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6025,"id":6170,"nodeType":"Return","src":"22445:20:32"}]}]},"documentation":{"id":6019,"nodeType":"StructuredDocumentation","src":"20361:256:32","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":6173,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:32","nodeType":"FunctionDefinition","parameters":{"id":6022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6021,"mutability":"mutable","name":"x","nameLocation":"20645:1:32","nodeType":"VariableDeclaration","scope":6173,"src":"20638:8:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6020,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:32"},"returnParameters":{"id":6025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6024,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6173,"src":"20670:6:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6023,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:32","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:32"},"scope":6174,"src":"20622:1860:32","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6175,"src":"595:21889:32","usedErrors":[4824,4827,4830,4833,4836],"usedEvents":[]}],"src":"33:22452:32"},"id":32},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","exportedSymbols":{"BalancerPoolToken":[6587],"ECDSA":[9595],"EIP712":[9822],"ERC165":[9920],"IERC20":[7403],"IERC20Metadata":[7429],"IERC20Permit":[7465],"IRateProvider":[89],"IVault":[849],"Nonces":[7654],"VaultGuard":[7130]},"id":6588,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6176,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":6178,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":7430,"src":"72:99:33","symbolAliases":[{"foreign":{"id":6177,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"81:14:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","id":6180,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":7466,"src":"172:95:33","symbolAliases":[{"foreign":{"id":6179,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7465,"src":"181:12:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":6182,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":9921,"src":"268:80:33","symbolAliases":[{"foreign":{"id":6181,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9920,"src":"277:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","file":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","id":6184,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":9823,"src":"349:79:33","symbolAliases":[{"foreign":{"id":6183,"name":"EIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9822,"src":"358:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","id":6186,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":9596,"src":"429:77:33","symbolAliases":[{"foreign":{"id":6185,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9595,"src":"438:5:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":6188,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":7404,"src":"507:72:33","symbolAliases":[{"foreign":{"id":6187,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"516:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","file":"@openzeppelin/contracts/utils/Nonces.sol","id":6190,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":7655,"src":"580:66:33","symbolAliases":[{"foreign":{"id":6189,"name":"Nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7654,"src":"589:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":6192,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":90,"src":"648:112:33","symbolAliases":[{"foreign":{"id":6191,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":89,"src":"657:13:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6194,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":850,"src":"761:81:33","symbolAliases":[{"foreign":{"id":6193,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"770:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":6196,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6588,"sourceUnit":7131,"src":"844:46:33","symbolAliases":[{"foreign":{"id":6195,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7130,"src":"853:10:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6198,"name":"IERC20","nameLocations":["1299:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"1299:6:33"},"id":6199,"nodeType":"InheritanceSpecifier","src":"1299:6:33"},{"baseName":{"id":6200,"name":"IERC20Metadata","nameLocations":["1307:14:33"],"nodeType":"IdentifierPath","referencedDeclaration":7429,"src":"1307:14:33"},"id":6201,"nodeType":"InheritanceSpecifier","src":"1307:14:33"},{"baseName":{"id":6202,"name":"IERC20Permit","nameLocations":["1323:12:33"],"nodeType":"IdentifierPath","referencedDeclaration":7465,"src":"1323:12:33"},"id":6203,"nodeType":"InheritanceSpecifier","src":"1323:12:33"},{"baseName":{"id":6204,"name":"IRateProvider","nameLocations":["1337:13:33"],"nodeType":"IdentifierPath","referencedDeclaration":89,"src":"1337:13:33"},"id":6205,"nodeType":"InheritanceSpecifier","src":"1337:13:33"},{"baseName":{"id":6206,"name":"EIP712","nameLocations":["1352:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":9822,"src":"1352:6:33"},"id":6207,"nodeType":"InheritanceSpecifier","src":"1352:6:33"},{"baseName":{"id":6208,"name":"Nonces","nameLocations":["1360:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":7654,"src":"1360:6:33"},"id":6209,"nodeType":"InheritanceSpecifier","src":"1360:6:33"},{"baseName":{"id":6210,"name":"ERC165","nameLocations":["1368:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":9920,"src":"1368:6:33"},"id":6211,"nodeType":"InheritanceSpecifier","src":"1368:6:33"},{"baseName":{"id":6212,"name":"VaultGuard","nameLocations":["1376:10:33"],"nodeType":"IdentifierPath","referencedDeclaration":7130,"src":"1376:10:33"},"id":6213,"nodeType":"InheritanceSpecifier","src":"1376:10:33"}],"canonicalName":"BalancerPoolToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":6197,"nodeType":"StructuredDocumentation","src":"892:376:33","text":" @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n with all the data and implementation delegated to the ERC20Multitoken contract.\n @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]."},"fullyImplemented":true,"id":6587,"linearizedBaseContracts":[6587,7130,9920,9932,7654,9822,7325,89,7465,7429,7403],"name":"BalancerPoolToken","nameLocation":"1278:17:33","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"30adf81f","id":6218,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"1417:15:33","nodeType":"VariableDeclaration","scope":6587,"src":"1393:145:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6214,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":6216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1453:84:33","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":6215,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1443:9:33","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1443:95:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"documentation":{"id":6219,"nodeType":"StructuredDocumentation","src":"1545:135:33","text":" @notice Operation failed due to an expired permit signature.\n @param deadline The permit deadline that expired"},"errorSelector":"62791302","id":6223,"name":"ERC2612ExpiredSignature","nameLocation":"1691:23:33","nodeType":"ErrorDefinition","parameters":{"id":6222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6221,"mutability":"mutable","name":"deadline","nameLocation":"1723:8:33","nodeType":"VariableDeclaration","scope":6223,"src":"1715:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6220,"name":"uint256","nodeType":"ElementaryTypeName","src":"1715:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1714:18:33"},"src":"1685:48:33"},{"documentation":{"id":6224,"nodeType":"StructuredDocumentation","src":"1739:237:33","text":" @notice Operation failed due to a non-matching signature.\n @param signer The address corresponding to the signature provider\n @param owner The address of the owner (expected value of the signature provider)"},"errorSelector":"4b800e46","id":6230,"name":"ERC2612InvalidSigner","nameLocation":"1987:20:33","nodeType":"ErrorDefinition","parameters":{"id":6229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6226,"mutability":"mutable","name":"signer","nameLocation":"2016:6:33","nodeType":"VariableDeclaration","scope":6230,"src":"2008:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6225,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6228,"mutability":"mutable","name":"owner","nameLocation":"2032:5:33","nodeType":"VariableDeclaration","scope":6230,"src":"2024:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6227,"name":"address","nodeType":"ElementaryTypeName","src":"2024:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2007:31:33"},"src":"1981:58:33"},{"constant":false,"id":6232,"mutability":"mutable","name":"_bptName","nameLocation":"2094:8:33","nodeType":"VariableDeclaration","scope":6587,"src":"2079:23:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":6231,"name":"string","nodeType":"ElementaryTypeName","src":"2079:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":6234,"mutability":"mutable","name":"_bptSymbol","nameLocation":"2123:10:33","nodeType":"VariableDeclaration","scope":6587,"src":"2108:25:33","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":6233,"name":"string","nodeType":"ElementaryTypeName","src":"2108:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":6259,"nodeType":"Block","src":"2255:67:33","statements":[{"expression":{"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6251,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"2265:8:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6252,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6239,"src":"2276:7:33","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2265:18:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":6254,"nodeType":"ExpressionStatement","src":"2265:18:33"},{"expression":{"id":6257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6255,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6234,"src":"2293:10:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6256,"name":"bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6241,"src":"2306:9:33","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2293:22:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":6258,"nodeType":"ExpressionStatement","src":"2293:22:33"}]},"id":6260,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6244,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6239,"src":"2222:7:33","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"31","id":6245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2231:3:33","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"id":6246,"kind":"baseConstructorSpecifier","modifierName":{"id":6243,"name":"EIP712","nameLocations":["2215:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":9822,"src":"2215:6:33"},"nodeType":"ModifierInvocation","src":"2215:20:33"},{"arguments":[{"id":6248,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"2247:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"id":6249,"kind":"baseConstructorSpecifier","modifierName":{"id":6247,"name":"VaultGuard","nameLocations":["2236:10:33"],"nodeType":"IdentifierPath","referencedDeclaration":7130,"src":"2236:10:33"},"nodeType":"ModifierInvocation","src":"2236:18:33"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6237,"mutability":"mutable","name":"vault_","nameLocation":"2159:6:33","nodeType":"VariableDeclaration","scope":6260,"src":"2152:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":6236,"nodeType":"UserDefinedTypeName","pathNode":{"id":6235,"name":"IVault","nameLocations":["2152:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"2152:6:33"},"referencedDeclaration":849,"src":"2152:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":6239,"mutability":"mutable","name":"bptName","nameLocation":"2181:7:33","nodeType":"VariableDeclaration","scope":6260,"src":"2167:21:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6238,"name":"string","nodeType":"ElementaryTypeName","src":"2167:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6241,"mutability":"mutable","name":"bptSymbol","nameLocation":"2204:9:33","nodeType":"VariableDeclaration","scope":6260,"src":"2190:23:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6240,"name":"string","nodeType":"ElementaryTypeName","src":"2190:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2151:63:33"},"returnParameters":{"id":6250,"nodeType":"ParameterList","parameters":[],"src":"2255:0:33"},"scope":6587,"src":"2140:182:33","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[7416],"body":{"id":6268,"nodeType":"Block","src":"2417:32:33","statements":[{"expression":{"id":6266,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6232,"src":"2434:8:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":6265,"id":6267,"nodeType":"Return","src":"2427:15:33"}]},"documentation":{"id":6261,"nodeType":"StructuredDocumentation","src":"2328:30:33","text":"@inheritdoc IERC20Metadata"},"functionSelector":"06fdde03","id":6269,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2372:4:33","nodeType":"FunctionDefinition","parameters":{"id":6262,"nodeType":"ParameterList","parameters":[],"src":"2376:2:33"},"returnParameters":{"id":6265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6269,"src":"2402:13:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6263,"name":"string","nodeType":"ElementaryTypeName","src":"2402:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2401:15:33"},"scope":6587,"src":"2363:86:33","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7422],"body":{"id":6277,"nodeType":"Block","src":"2546:34:33","statements":[{"expression":{"id":6275,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6234,"src":"2563:10:33","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":6274,"id":6276,"nodeType":"Return","src":"2556:17:33"}]},"documentation":{"id":6270,"nodeType":"StructuredDocumentation","src":"2455:30:33","text":"@inheritdoc IERC20Metadata"},"functionSelector":"95d89b41","id":6278,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2499:6:33","nodeType":"FunctionDefinition","parameters":{"id":6271,"nodeType":"ParameterList","parameters":[],"src":"2505:2:33"},"returnParameters":{"id":6274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6273,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6278,"src":"2531:13:33","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6272,"name":"string","nodeType":"ElementaryTypeName","src":"2531:6:33","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2530:15:33"},"scope":6587,"src":"2490:90:33","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7428],"body":{"id":6286,"nodeType":"Block","src":"2671:65:33","statements":[{"expression":{"hexValue":"3138","id":6284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2727:2:33","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":6283,"id":6285,"nodeType":"Return","src":"2720:9:33"}]},"documentation":{"id":6279,"nodeType":"StructuredDocumentation","src":"2586:30:33","text":"@inheritdoc IERC20Metadata"},"functionSelector":"313ce567","id":6287,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2630:8:33","nodeType":"FunctionDefinition","parameters":{"id":6280,"nodeType":"ParameterList","parameters":[],"src":"2638:2:33"},"returnParameters":{"id":6283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6282,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6287,"src":"2664:5:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6281,"name":"uint8","nodeType":"ElementaryTypeName","src":"2664:5:33","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2663:7:33"},"scope":6587,"src":"2621:115:33","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[7352],"body":{"id":6301,"nodeType":"Block","src":"2822:57:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":6297,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2866:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}],"id":6296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2858:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6295,"name":"address","nodeType":"ElementaryTypeName","src":"2858:7:33","typeDescriptions":{}}},"id":6298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6293,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"2839:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2846:11:33","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1967,"src":"2839:18:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6292,"id":6300,"nodeType":"Return","src":"2832:40:33"}]},"documentation":{"id":6288,"nodeType":"StructuredDocumentation","src":"2742:22:33","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":6302,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2778:11:33","nodeType":"FunctionDefinition","parameters":{"id":6289,"nodeType":"ParameterList","parameters":[],"src":"2789:2:33"},"returnParameters":{"id":6292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6302,"src":"2813:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2813:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2812:9:33"},"scope":6587,"src":"2769:110:33","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6310,"nodeType":"Block","src":"2934:30:33","statements":[{"expression":{"id":6308,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"2951:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"functionReturnParameters":6307,"id":6309,"nodeType":"Return","src":"2944:13:33"}]},"functionSelector":"8d928af8","id":6311,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"2894:8:33","nodeType":"FunctionDefinition","parameters":{"id":6303,"nodeType":"ParameterList","parameters":[],"src":"2902:2:33"},"returnParameters":{"id":6307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6306,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6311,"src":"2926:6:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":6305,"nodeType":"UserDefinedTypeName","pathNode":{"id":6304,"name":"IVault","nameLocations":["2926:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"2926:6:33"},"referencedDeclaration":849,"src":"2926:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"2925:8:33"},"scope":6587,"src":"2885:79:33","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[7360],"body":{"id":6328,"nodeType":"Block","src":"3065:64:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":6323,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3107:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}],"id":6322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3099:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6321,"name":"address","nodeType":"ElementaryTypeName","src":"3099:7:33","typeDescriptions":{}}},"id":6324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3099:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6325,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6314,"src":"3114:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6319,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"3082:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3089:9:33","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":1977,"src":"3082:16:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3082:40:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6318,"id":6327,"nodeType":"Return","src":"3075:47:33"}]},"documentation":{"id":6312,"nodeType":"StructuredDocumentation","src":"2970:22:33","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":6329,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3006:9:33","nodeType":"FunctionDefinition","parameters":{"id":6315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6314,"mutability":"mutable","name":"account","nameLocation":"3024:7:33","nodeType":"VariableDeclaration","scope":6329,"src":"3016:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6313,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3015:17:33"},"returnParameters":{"id":6318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6329,"src":"3056:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6316,"name":"uint256","nodeType":"ElementaryTypeName","src":"3056:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3055:9:33"},"scope":6587,"src":"2997:132:33","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7370],"body":{"id":6350,"nodeType":"Block","src":"3232:180:33","statements":[{"expression":{"arguments":[{"expression":{"id":6342,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3361:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3365:6:33","memberName":"sender","nodeType":"MemberAccess","src":"3361:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6344,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6332,"src":"3373:2:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6345,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6334,"src":"3377:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6339,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"3345:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3352:8:33","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":2266,"src":"3345:15:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":6346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:39:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6347,"nodeType":"ExpressionStatement","src":"3345:39:33"},{"expression":{"hexValue":"74727565","id":6348,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3401:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6338,"id":6349,"nodeType":"Return","src":"3394:11:33"}]},"documentation":{"id":6330,"nodeType":"StructuredDocumentation","src":"3135:22:33","text":"@inheritdoc IERC20"},"functionSelector":"a9059cbb","id":6351,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3171:8:33","nodeType":"FunctionDefinition","parameters":{"id":6335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6332,"mutability":"mutable","name":"to","nameLocation":"3188:2:33","nodeType":"VariableDeclaration","scope":6351,"src":"3180:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6331,"name":"address","nodeType":"ElementaryTypeName","src":"3180:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6334,"mutability":"mutable","name":"amount","nameLocation":"3200:6:33","nodeType":"VariableDeclaration","scope":6351,"src":"3192:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6333,"name":"uint256","nodeType":"ElementaryTypeName","src":"3192:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3179:28:33"},"returnParameters":{"id":6338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6351,"src":"3226:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6336,"name":"bool","nodeType":"ElementaryTypeName","src":"3226:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3225:6:33"},"scope":6587,"src":"3162:250:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7380],"body":{"id":6371,"nodeType":"Block","src":"3528:71:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":6365,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3570:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}],"id":6364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3562:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6363,"name":"address","nodeType":"ElementaryTypeName","src":"3562:7:33","typeDescriptions":{}}},"id":6366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3562:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6367,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6354,"src":"3577:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6368,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6356,"src":"3584:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6361,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"3545:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:9:33","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":1989,"src":"3545:16:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":6369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3545:47:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6360,"id":6370,"nodeType":"Return","src":"3538:54:33"}]},"documentation":{"id":6352,"nodeType":"StructuredDocumentation","src":"3418:22:33","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":6372,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3454:9:33","nodeType":"FunctionDefinition","parameters":{"id":6357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6354,"mutability":"mutable","name":"owner","nameLocation":"3472:5:33","nodeType":"VariableDeclaration","scope":6372,"src":"3464:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6353,"name":"address","nodeType":"ElementaryTypeName","src":"3464:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6356,"mutability":"mutable","name":"spender","nameLocation":"3487:7:33","nodeType":"VariableDeclaration","scope":6372,"src":"3479:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6355,"name":"address","nodeType":"ElementaryTypeName","src":"3479:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3463:32:33"},"returnParameters":{"id":6360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6372,"src":"3519:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6358,"name":"uint256","nodeType":"ElementaryTypeName","src":"3519:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3518:9:33"},"scope":6587,"src":"3445:154:33","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[7390],"body":{"id":6393,"nodeType":"Block","src":"3706:184:33","statements":[{"expression":{"arguments":[{"expression":{"id":6385,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3834:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3838:6:33","memberName":"sender","nodeType":"MemberAccess","src":"3834:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6387,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6375,"src":"3846:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6388,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6377,"src":"3855:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6382,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"3819:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3826:7:33","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":2001,"src":"3819:14:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":6389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3819:43:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6390,"nodeType":"ExpressionStatement","src":"3819:43:33"},{"expression":{"hexValue":"74727565","id":6391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3879:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6381,"id":6392,"nodeType":"Return","src":"3872:11:33"}]},"documentation":{"id":6373,"nodeType":"StructuredDocumentation","src":"3605:22:33","text":"@inheritdoc IERC20"},"functionSelector":"095ea7b3","id":6394,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3641:7:33","nodeType":"FunctionDefinition","parameters":{"id":6378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6375,"mutability":"mutable","name":"spender","nameLocation":"3657:7:33","nodeType":"VariableDeclaration","scope":6394,"src":"3649:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6374,"name":"address","nodeType":"ElementaryTypeName","src":"3649:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6377,"mutability":"mutable","name":"amount","nameLocation":"3674:6:33","nodeType":"VariableDeclaration","scope":6394,"src":"3666:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6376,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3648:33:33"},"returnParameters":{"id":6381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6380,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6394,"src":"3700:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6379,"name":"bool","nodeType":"ElementaryTypeName","src":"3700:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3699:6:33"},"scope":6587,"src":"3632:258:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7402],"body":{"id":6418,"nodeType":"Block","src":"4011:190:33","statements":[{"expression":{"arguments":[{"expression":{"id":6409,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4144:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4148:6:33","memberName":"sender","nodeType":"MemberAccess","src":"4144:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6411,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6397,"src":"4156:4:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6412,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"4162:2:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6413,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6401,"src":"4166:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6406,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"4124:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4131:12:33","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":2280,"src":"4124:19:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,address,uint256) external returns (bool)"}},"id":6414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:49:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6415,"nodeType":"ExpressionStatement","src":"4124:49:33"},{"expression":{"hexValue":"74727565","id":6416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4190:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":6405,"id":6417,"nodeType":"Return","src":"4183:11:33"}]},"documentation":{"id":6395,"nodeType":"StructuredDocumentation","src":"3896:22:33","text":"@inheritdoc IERC20"},"functionSelector":"23b872dd","id":6419,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3932:12:33","nodeType":"FunctionDefinition","parameters":{"id":6402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6397,"mutability":"mutable","name":"from","nameLocation":"3953:4:33","nodeType":"VariableDeclaration","scope":6419,"src":"3945:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6396,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6399,"mutability":"mutable","name":"to","nameLocation":"3967:2:33","nodeType":"VariableDeclaration","scope":6419,"src":"3959:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6398,"name":"address","nodeType":"ElementaryTypeName","src":"3959:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6401,"mutability":"mutable","name":"amount","nameLocation":"3979:6:33","nodeType":"VariableDeclaration","scope":6419,"src":"3971:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6400,"name":"uint256","nodeType":"ElementaryTypeName","src":"3971:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:42:33"},"returnParameters":{"id":6405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6419,"src":"4005:4:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6403,"name":"bool","nodeType":"ElementaryTypeName","src":"4005:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4004:6:33"},"scope":6587,"src":"3923:278:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6437,"nodeType":"Block","src":"4927:48:33","statements":[{"eventCall":{"arguments":[{"id":6432,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6422,"src":"4951:4:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6433,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6424,"src":"4957:2:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6434,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6426,"src":"4961:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6431,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7337,"src":"4942:8:33","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":6435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4942:26:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6436,"nodeType":"EmitStatement","src":"4937:31:33"}]},"documentation":{"id":6420,"nodeType":"StructuredDocumentation","src":"4754:85:33","text":"@dev Emit the Transfer event. This function can only be called by the MultiToken."},"functionSelector":"23de6651","id":6438,"implemented":true,"kind":"function","modifiers":[{"id":6429,"kind":"modifierInvocation","modifierName":{"id":6428,"name":"onlyVault","nameLocations":["4917:9:33"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"4917:9:33"},"nodeType":"ModifierInvocation","src":"4917:9:33"}],"name":"emitTransfer","nameLocation":"4853:12:33","nodeType":"FunctionDefinition","parameters":{"id":6427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6422,"mutability":"mutable","name":"from","nameLocation":"4874:4:33","nodeType":"VariableDeclaration","scope":6438,"src":"4866:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6421,"name":"address","nodeType":"ElementaryTypeName","src":"4866:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6424,"mutability":"mutable","name":"to","nameLocation":"4888:2:33","nodeType":"VariableDeclaration","scope":6438,"src":"4880:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6423,"name":"address","nodeType":"ElementaryTypeName","src":"4880:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6426,"mutability":"mutable","name":"amount","nameLocation":"4900:6:33","nodeType":"VariableDeclaration","scope":6438,"src":"4892:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6425,"name":"uint256","nodeType":"ElementaryTypeName","src":"4892:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4865:42:33"},"returnParameters":{"id":6430,"nodeType":"ParameterList","parameters":[],"src":"4927:0:33"},"scope":6587,"src":"4844:131:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6456,"nodeType":"Block","src":"5160:54:33","statements":[{"eventCall":{"arguments":[{"id":6451,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6441,"src":"5184:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6452,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6443,"src":"5191:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6453,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6445,"src":"5200:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6450,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7346,"src":"5175:8:33","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":6454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5175:32:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6455,"nodeType":"EmitStatement","src":"5170:37:33"}]},"documentation":{"id":6439,"nodeType":"StructuredDocumentation","src":"4981:85:33","text":"@dev Emit the Approval event. This function can only be called by the MultiToken."},"functionSelector":"5687f2b8","id":6457,"implemented":true,"kind":"function","modifiers":[{"id":6448,"kind":"modifierInvocation","modifierName":{"id":6447,"name":"onlyVault","nameLocations":["5150:9:33"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"5150:9:33"},"nodeType":"ModifierInvocation","src":"5150:9:33"}],"name":"emitApproval","nameLocation":"5080:12:33","nodeType":"FunctionDefinition","parameters":{"id":6446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6441,"mutability":"mutable","name":"owner","nameLocation":"5101:5:33","nodeType":"VariableDeclaration","scope":6457,"src":"5093:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6440,"name":"address","nodeType":"ElementaryTypeName","src":"5093:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6443,"mutability":"mutable","name":"spender","nameLocation":"5116:7:33","nodeType":"VariableDeclaration","scope":6457,"src":"5108:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6442,"name":"address","nodeType":"ElementaryTypeName","src":"5108:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6445,"mutability":"mutable","name":"amount","nameLocation":"5133:6:33","nodeType":"VariableDeclaration","scope":6457,"src":"5125:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6444,"name":"uint256","nodeType":"ElementaryTypeName","src":"5125:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5092:48:33"},"returnParameters":{"id":6449,"nodeType":"ParameterList","parameters":[],"src":"5160:0:33"},"scope":6587,"src":"5071:143:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7450],"body":{"id":6534,"nodeType":"Block","src":"5442:545:33","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6474,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5510:5:33","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":6475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5516:9:33","memberName":"timestamp","nodeType":"MemberAccess","src":"5510:15:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6476,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6465,"src":"5528:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5510:26:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6483,"nodeType":"IfStatement","src":"5506:97:33","trueBody":{"id":6482,"nodeType":"Block","src":"5538:65:33","statements":[{"errorCall":{"arguments":[{"id":6479,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6465,"src":"5583:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6478,"name":"ERC2612ExpiredSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6223,"src":"5559:23:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":6480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5559:33:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6481,"nodeType":"RevertStatement","src":"5552:40:33"}]}},{"assignments":[6485],"declarations":[{"constant":false,"id":6485,"mutability":"mutable","name":"structHash","nameLocation":"5621:10:33","nodeType":"VariableDeclaration","scope":6534,"src":"5613:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6484,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5613:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6499,"initialValue":{"arguments":[{"arguments":[{"id":6489,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6218,"src":"5655:15:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6490,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6459,"src":"5672:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6491,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6461,"src":"5679:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6492,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6463,"src":"5688:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":6494,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6459,"src":"5706:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6493,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"5696:9:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":6495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5696:16:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6496,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6465,"src":"5714:8:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6487,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5644:3:33","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5648:6:33","memberName":"encode","nodeType":"MemberAccess","src":"5644:10:33","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:79:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6486,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5634:9:33","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5634:90:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5613:111:33"},{"assignments":[6501],"declarations":[{"constant":false,"id":6501,"mutability":"mutable","name":"hash","nameLocation":"5743:4:33","nodeType":"VariableDeclaration","scope":6534,"src":"5735:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6500,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5735:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":6505,"initialValue":{"arguments":[{"id":6503,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6485,"src":"5767:10:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6502,"name":"_hashTypedDataV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9755,"src":"5750:16:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":6504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5750:28:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5735:43:33"},{"assignments":[6507],"declarations":[{"constant":false,"id":6507,"mutability":"mutable","name":"signer","nameLocation":"5797:6:33","nodeType":"VariableDeclaration","scope":6534,"src":"5789:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6506,"name":"address","nodeType":"ElementaryTypeName","src":"5789:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6515,"initialValue":{"arguments":[{"id":6510,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6501,"src":"5820:4:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6511,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6467,"src":"5826:1:33","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":6512,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6469,"src":"5829:1:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6513,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6471,"src":"5832:1:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":6508,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9595,"src":"5806:5:33","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$9595_$","typeString":"type(library ECDSA)"}},"id":6509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5812:7:33","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":9545,"src":"5806:13:33","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":6514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5806:28:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5789:45:33"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6516,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6507,"src":"5848:6:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6517,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6459,"src":"5858:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5848:15:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6525,"nodeType":"IfStatement","src":"5844:88:33","trueBody":{"id":6524,"nodeType":"Block","src":"5865:67:33","statements":[{"errorCall":{"arguments":[{"id":6520,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6507,"src":"5907:6:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6521,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6459,"src":"5915:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6519,"name":"ERC2612InvalidSigner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6230,"src":"5886:20:33","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":6522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5886:35:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6523,"nodeType":"RevertStatement","src":"5879:42:33"}]}},{"expression":{"arguments":[{"id":6529,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6459,"src":"5957:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6530,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6461,"src":"5964:7:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6531,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6463,"src":"5973:6:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6526,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"5942:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5949:7:33","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":2001,"src":"5942:14:33","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":6532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:38:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6533,"nodeType":"ExpressionStatement","src":"5942:38:33"}]},"functionSelector":"d505accf","id":6535,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5261:6:33","nodeType":"FunctionDefinition","parameters":{"id":6472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6459,"mutability":"mutable","name":"owner","nameLocation":"5285:5:33","nodeType":"VariableDeclaration","scope":6535,"src":"5277:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6458,"name":"address","nodeType":"ElementaryTypeName","src":"5277:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6461,"mutability":"mutable","name":"spender","nameLocation":"5308:7:33","nodeType":"VariableDeclaration","scope":6535,"src":"5300:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6460,"name":"address","nodeType":"ElementaryTypeName","src":"5300:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6463,"mutability":"mutable","name":"amount","nameLocation":"5333:6:33","nodeType":"VariableDeclaration","scope":6535,"src":"5325:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6462,"name":"uint256","nodeType":"ElementaryTypeName","src":"5325:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6465,"mutability":"mutable","name":"deadline","nameLocation":"5357:8:33","nodeType":"VariableDeclaration","scope":6535,"src":"5349:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6464,"name":"uint256","nodeType":"ElementaryTypeName","src":"5349:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6467,"mutability":"mutable","name":"v","nameLocation":"5381:1:33","nodeType":"VariableDeclaration","scope":6535,"src":"5375:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6466,"name":"uint8","nodeType":"ElementaryTypeName","src":"5375:5:33","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":6469,"mutability":"mutable","name":"r","nameLocation":"5400:1:33","nodeType":"VariableDeclaration","scope":6535,"src":"5392:9:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5392:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6471,"mutability":"mutable","name":"s","nameLocation":"5419:1:33","nodeType":"VariableDeclaration","scope":6535,"src":"5411:9:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6470,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5411:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5267:159:33"},"returnParameters":{"id":6473,"nodeType":"ParameterList","parameters":[],"src":"5442:0:33"},"scope":6587,"src":"5252:735:33","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[7458,7613],"body":{"id":6550,"nodeType":"Block","src":"6125:43:33","statements":[{"expression":{"arguments":[{"id":6547,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6537,"src":"6155:5:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6545,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6142:5:33","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BalancerPoolToken_$6587_$","typeString":"type(contract super BalancerPoolToken)"}},"id":6546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6148:6:33","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":7613,"src":"6142:12:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":6548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6142:19:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6544,"id":6549,"nodeType":"Return","src":"6135:26:33"}]},"functionSelector":"7ecebe00","id":6551,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"6034:6:33","nodeType":"FunctionDefinition","overrides":{"id":6541,"nodeType":"OverrideSpecifier","overrides":[{"id":6539,"name":"IERC20Permit","nameLocations":["6085:12:33"],"nodeType":"IdentifierPath","referencedDeclaration":7465,"src":"6085:12:33"},{"id":6540,"name":"Nonces","nameLocations":["6099:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":7654,"src":"6099:6:33"}],"src":"6076:30:33"},"parameters":{"id":6538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6537,"mutability":"mutable","name":"owner","nameLocation":"6049:5:33","nodeType":"VariableDeclaration","scope":6551,"src":"6041:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6536,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6040:15:33"},"returnParameters":{"id":6544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6551,"src":"6116:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6542,"name":"uint256","nodeType":"ElementaryTypeName","src":"6116:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6115:9:33"},"scope":6587,"src":"6025:143:33","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":6560,"nodeType":"Block","src":"6319:38:33","statements":[{"expression":{"arguments":[{"expression":{"id":6556,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6339:3:33","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6343:6:33","memberName":"sender","nodeType":"MemberAccess","src":"6339:10:33","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6555,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"6329:9:33","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":6558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:21:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6559,"nodeType":"ExpressionStatement","src":"6329:21:33"}]},"documentation":{"id":6552,"nodeType":"StructuredDocumentation","src":"6174:105:33","text":"@notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`."},"functionSelector":"627cdcb9","id":6561,"implemented":true,"kind":"function","modifiers":[],"name":"incrementNonce","nameLocation":"6293:14:33","nodeType":"FunctionDefinition","parameters":{"id":6553,"nodeType":"ParameterList","parameters":[],"src":"6307:2:33"},"returnParameters":{"id":6554,"nodeType":"ParameterList","parameters":[],"src":"6319:0:33"},"scope":6587,"src":"6284:73:33","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[7464],"body":{"id":6569,"nodeType":"Block","src":"6516:44:33","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6566,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9718,"src":"6533:18:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":6567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6533:20:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6565,"id":6568,"nodeType":"Return","src":"6526:27:33"}]},"functionSelector":"3644e515","id":6570,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"6457:16:33","nodeType":"FunctionDefinition","parameters":{"id":6562,"nodeType":"ParameterList","parameters":[],"src":"6473:2:33"},"returnParameters":{"id":6565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6564,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6570,"src":"6507:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6563,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6507:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6506:9:33"},"scope":6587,"src":"6448:112:33","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[88],"body":{"id":6585,"nodeType":"Block","src":"6956:60:33","statements":[{"expression":{"arguments":[{"arguments":[{"id":6581,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7003:4:33","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$6587","typeString":"contract BalancerPoolToken"}],"id":6580,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6995:7:33","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6579,"name":"address","nodeType":"ElementaryTypeName","src":"6995:7:33","typeDescriptions":{}}},"id":6582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6995:13:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6576,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6311,"src":"6973:8:33","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$849_$","typeString":"function () view returns (contract IVault)"}},"id":6577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:10:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:10:33","memberName":"getBptRate","nodeType":"MemberAccess","referencedDeclaration":1959,"src":"6973:21:33","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":6583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:36:33","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6575,"id":6584,"nodeType":"Return","src":"6966:43:33"}]},"documentation":{"id":6571,"nodeType":"StructuredDocumentation","src":"6566:328:33","text":" @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n of any given pool, which should be sufficient in nearly all cases.\n @return rate Rate of the pool's BPT"},"functionSelector":"679aefce","id":6586,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"6908:7:33","nodeType":"FunctionDefinition","parameters":{"id":6572,"nodeType":"ParameterList","parameters":[],"src":"6915:2:33"},"returnParameters":{"id":6575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6574,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6586,"src":"6947:7:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6947:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6946:9:33"},"scope":6587,"src":"6899:117:33","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":6588,"src":"1269:5749:33","usedErrors":[1378,6223,6230,7596,7720,7722,9258,9263,9268],"usedEvents":[7305,7337,7346]}],"src":"46:6973:33"},"id":33},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AfterSwapParams":[2539],"BaseHooks":[6830],"HookFlags":[2365],"IHooks":[441],"LiquidityManagement":[2318],"PoolSwapParams":[2510],"RemoveLiquidityKind":[2566],"TokenConfig":[2432]},"id":6831,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6589,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":6591,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6831,"sourceUnit":442,"src":"72:81:34","symbolAliases":[{"foreign":{"id":6590,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":6599,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6831,"sourceUnit":2610,"src":"154:222:34","symbolAliases":[{"foreign":{"id":6592,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"167:16:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6593,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2365,"src":"189:9:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6594,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2318,"src":"204:19:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6595,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2566,"src":"229:19:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6596,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"254:11:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6597,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2510,"src":"271:14:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":6598,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2539,"src":"291:15:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6601,"name":"IHooks","nameLocations":["753:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":441,"src":"753:6:34"},"id":6602,"nodeType":"InheritanceSpecifier","src":"753:6:34"}],"canonicalName":"BaseHooks","contractDependencies":[],"contractKind":"contract","documentation":{"id":6600,"nodeType":"StructuredDocumentation","src":"378:343:34","text":" @notice Base for pool hooks contracts.\n @dev Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks,\n and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used\n in this abstract contract, but should be used in real derived hook contracts."},"fullyImplemented":false,"id":6830,"linearizedBaseContracts":[6830,441],"name":"BaseHooks","nameLocation":"740:9:34","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[268],"body":{"id":6621,"nodeType":"Block","src":"951:126:34","statements":[{"expression":{"hexValue":"66616c7365","id":6619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1065:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6618,"id":6620,"nodeType":"Return","src":"1058:12:34"}]},"documentation":{"id":6603,"nodeType":"StructuredDocumentation","src":"766:22:34","text":"@inheritdoc IHooks"},"functionSelector":"0b89f182","id":6622,"implemented":true,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"802:10:34","nodeType":"FunctionDefinition","parameters":{"id":6615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6605,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"822:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6604,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"839:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6606,"name":"address","nodeType":"ElementaryTypeName","src":"839:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"856:20:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":6609,"nodeType":"UserDefinedTypeName","pathNode":{"id":6608,"name":"TokenConfig","nameLocations":["856:11:34"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"856:11:34"},"referencedDeclaration":2432,"src":"856:11:34","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":6610,"nodeType":"ArrayTypeName","src":"856:13:34","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":6614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"886:28:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":6613,"nodeType":"UserDefinedTypeName","pathNode":{"id":6612,"name":"LiquidityManagement","nameLocations":["886:19:34"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"886:19:34"},"referencedDeclaration":2318,"src":"886:19:34","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"812:108:34"},"returnParameters":{"id":6618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6622,"src":"945:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6616,"name":"bool","nodeType":"ElementaryTypeName","src":"945:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"944:6:34"},"scope":6830,"src":"793:284:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[275],"documentation":{"id":6623,"nodeType":"StructuredDocumentation","src":"1083:22:34","text":"@inheritdoc IHooks"},"functionSelector":"d77153a7","id":6629,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"1119:12:34","nodeType":"FunctionDefinition","parameters":{"id":6624,"nodeType":"ParameterList","parameters":[],"src":"1131:2:34"},"returnParameters":{"id":6628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6629,"src":"1163:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":6626,"nodeType":"UserDefinedTypeName","pathNode":{"id":6625,"name":"HookFlags","nameLocations":["1163:9:34"],"nodeType":"IdentifierPath","referencedDeclaration":2365,"src":"1163:9:34"},"referencedDeclaration":2365,"src":"1163:9:34","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"1162:18:34"},"scope":6830,"src":"1110:71:34","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[286],"body":{"id":6642,"nodeType":"Block","src":"1304:29:34","statements":[{"expression":{"hexValue":"66616c7365","id":6640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1321:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6639,"id":6641,"nodeType":"Return","src":"1314:12:34"}]},"documentation":{"id":6630,"nodeType":"StructuredDocumentation","src":"1187:22:34","text":"@inheritdoc IHooks"},"functionSelector":"1c149e28","id":6643,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"1223:18:34","nodeType":"FunctionDefinition","parameters":{"id":6636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6633,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6643,"src":"1242:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6631,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6632,"nodeType":"ArrayTypeName","src":"1242:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6635,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6643,"src":"1260:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6634,"name":"bytes","nodeType":"ElementaryTypeName","src":"1260:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1241:32:34"},"returnParameters":{"id":6639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6643,"src":"1298:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6637,"name":"bool","nodeType":"ElementaryTypeName","src":"1298:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1297:6:34"},"scope":6830,"src":"1214:119:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[299],"body":{"id":6658,"nodeType":"Block","src":"1464:29:34","statements":[{"expression":{"hexValue":"66616c7365","id":6656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1481:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6655,"id":6657,"nodeType":"Return","src":"1474:12:34"}]},"documentation":{"id":6644,"nodeType":"StructuredDocumentation","src":"1339:22:34","text":"@inheritdoc IHooks"},"functionSelector":"38be241d","id":6659,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"1375:17:34","nodeType":"FunctionDefinition","parameters":{"id":6652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6647,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6659,"src":"1393:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6645,"name":"uint256","nodeType":"ElementaryTypeName","src":"1393:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6646,"nodeType":"ArrayTypeName","src":"1393:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6659,"src":"1411:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6648,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6651,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6659,"src":"1420:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6650,"name":"bytes","nodeType":"ElementaryTypeName","src":"1420:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1392:41:34"},"returnParameters":{"id":6655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6654,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6659,"src":"1458:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6653,"name":"bool","nodeType":"ElementaryTypeName","src":"1458:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1457:6:34"},"scope":6830,"src":"1366:127:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[322],"body":{"id":6684,"nodeType":"Block","src":"1743:29:34","statements":[{"expression":{"hexValue":"66616c7365","id":6682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1760:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6681,"id":6683,"nodeType":"Return","src":"1753:12:34"}]},"documentation":{"id":6660,"nodeType":"StructuredDocumentation","src":"1499:22:34","text":"@inheritdoc IHooks"},"functionSelector":"45421ec7","id":6685,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"1535:20:34","nodeType":"FunctionDefinition","parameters":{"id":6678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6662,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1565:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6661,"name":"address","nodeType":"ElementaryTypeName","src":"1565:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6664,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1582:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6663,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1599:16:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":6666,"nodeType":"UserDefinedTypeName","pathNode":{"id":6665,"name":"AddLiquidityKind","nameLocations":["1599:16:34"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1599:16:34"},"referencedDeclaration":2545,"src":"1599:16:34","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":6670,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1625:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6668,"name":"uint256","nodeType":"ElementaryTypeName","src":"1625:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6669,"nodeType":"ArrayTypeName","src":"1625:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1651:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6671,"name":"uint256","nodeType":"ElementaryTypeName","src":"1651:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1668:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6673,"name":"uint256","nodeType":"ElementaryTypeName","src":"1668:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6674,"nodeType":"ArrayTypeName","src":"1668:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1694:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6676,"name":"bytes","nodeType":"ElementaryTypeName","src":"1694:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1555:157:34"},"returnParameters":{"id":6681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6680,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6685,"src":"1737:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6679,"name":"bool","nodeType":"ElementaryTypeName","src":"1737:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1736:6:34"},"scope":6830,"src":"1526:246:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[351],"body":{"id":6718,"nodeType":"Block","src":"2078:45:34","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":6714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2096:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":6715,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6699,"src":"2103:12:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":6716,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2095:21:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":6713,"id":6717,"nodeType":"Return","src":"2088:28:34"}]},"documentation":{"id":6686,"nodeType":"StructuredDocumentation","src":"1778:22:34","text":"@inheritdoc IHooks"},"functionSelector":"976907cc","id":6719,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"1814:19:34","nodeType":"FunctionDefinition","parameters":{"id":6707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1843:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6687,"name":"address","nodeType":"ElementaryTypeName","src":"1843:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1860:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6689,"name":"address","nodeType":"ElementaryTypeName","src":"1860:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1877:16:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":6692,"nodeType":"UserDefinedTypeName","pathNode":{"id":6691,"name":"AddLiquidityKind","nameLocations":["1877:16:34"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"1877:16:34"},"referencedDeclaration":2545,"src":"1877:16:34","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":6696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1903:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6694,"name":"uint256","nodeType":"ElementaryTypeName","src":"1903:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6695,"nodeType":"ArrayTypeName","src":"1903:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6699,"mutability":"mutable","name":"amountsInRaw","nameLocation":"1946:12:34","nodeType":"VariableDeclaration","scope":6719,"src":"1929:29:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1929:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6698,"nodeType":"ArrayTypeName","src":"1929:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6701,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1968:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6700,"name":"uint256","nodeType":"ElementaryTypeName","src":"1968:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"1985:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6702,"name":"uint256","nodeType":"ElementaryTypeName","src":"1985:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6703,"nodeType":"ArrayTypeName","src":"1985:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"2011:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6705,"name":"bytes","nodeType":"ElementaryTypeName","src":"2011:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1833:196:34"},"returnParameters":{"id":6713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"2054:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6708,"name":"bool","nodeType":"ElementaryTypeName","src":"2054:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6719,"src":"2060:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6710,"name":"uint256","nodeType":"ElementaryTypeName","src":"2060:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6711,"nodeType":"ArrayTypeName","src":"2060:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2053:24:34"},"scope":6830,"src":"1805:318:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[374],"body":{"id":6744,"nodeType":"Block","src":"2379:29:34","statements":[{"expression":{"hexValue":"66616c7365","id":6742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2396:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6741,"id":6743,"nodeType":"Return","src":"2389:12:34"}]},"documentation":{"id":6720,"nodeType":"StructuredDocumentation","src":"2129:22:34","text":"@inheritdoc IHooks"},"functionSelector":"ba5f9f40","id":6745,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"2165:23:34","nodeType":"FunctionDefinition","parameters":{"id":6738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6722,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2198:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6721,"name":"address","nodeType":"ElementaryTypeName","src":"2198:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2215:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6723,"name":"address","nodeType":"ElementaryTypeName","src":"2215:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2232:19:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":6726,"nodeType":"UserDefinedTypeName","pathNode":{"id":6725,"name":"RemoveLiquidityKind","nameLocations":["2232:19:34"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"2232:19:34"},"referencedDeclaration":2566,"src":"2232:19:34","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":6729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2261:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6728,"name":"uint256","nodeType":"ElementaryTypeName","src":"2261:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2278:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6730,"name":"uint256","nodeType":"ElementaryTypeName","src":"2278:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6731,"nodeType":"ArrayTypeName","src":"2278:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2304:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6733,"name":"uint256","nodeType":"ElementaryTypeName","src":"2304:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6734,"nodeType":"ArrayTypeName","src":"2304:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2330:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6736,"name":"bytes","nodeType":"ElementaryTypeName","src":"2330:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2188:160:34"},"returnParameters":{"id":6741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6745,"src":"2373:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6739,"name":"bool","nodeType":"ElementaryTypeName","src":"2373:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2372:6:34"},"scope":6830,"src":"2156:252:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[403],"body":{"id":6778,"nodeType":"Block","src":"2721:46:34","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":6774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2739:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":6775,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6761,"src":"2746:13:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":6776,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2738:22:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":6773,"id":6777,"nodeType":"Return","src":"2731:29:34"}]},"documentation":{"id":6746,"nodeType":"StructuredDocumentation","src":"2414:22:34","text":"@inheritdoc IHooks"},"functionSelector":"2754888d","id":6779,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"2450:22:34","nodeType":"FunctionDefinition","parameters":{"id":6767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6748,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2482:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6747,"name":"address","nodeType":"ElementaryTypeName","src":"2482:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2499:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6749,"name":"address","nodeType":"ElementaryTypeName","src":"2499:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6753,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2516:19:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":6752,"nodeType":"UserDefinedTypeName","pathNode":{"id":6751,"name":"RemoveLiquidityKind","nameLocations":["2516:19:34"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"2516:19:34"},"referencedDeclaration":2566,"src":"2516:19:34","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":6755,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2545:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6754,"name":"uint256","nodeType":"ElementaryTypeName","src":"2545:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2562:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6756,"name":"uint256","nodeType":"ElementaryTypeName","src":"2562:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6757,"nodeType":"ArrayTypeName","src":"2562:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6761,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"2605:13:34","nodeType":"VariableDeclaration","scope":6779,"src":"2588:30:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6759,"name":"uint256","nodeType":"ElementaryTypeName","src":"2588:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6760,"nodeType":"ArrayTypeName","src":"2588:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2628:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6762,"name":"uint256","nodeType":"ElementaryTypeName","src":"2628:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6763,"nodeType":"ArrayTypeName","src":"2628:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6766,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2654:12:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6765,"name":"bytes","nodeType":"ElementaryTypeName","src":"2654:5:34","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2472:200:34"},"returnParameters":{"id":6773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6769,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2697:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6768,"name":"bool","nodeType":"ElementaryTypeName","src":"2697:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6772,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6779,"src":"2703:16:34","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6770,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6771,"nodeType":"ArrayTypeName","src":"2703:9:34","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2696:24:34"},"scope":6830,"src":"2441:326:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[414],"body":{"id":6792,"nodeType":"Block","src":"2886:142:34","statements":[{"expression":{"hexValue":"66616c7365","id":6790,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3016:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":6789,"id":6791,"nodeType":"Return","src":"3009:12:34"}]},"documentation":{"id":6780,"nodeType":"StructuredDocumentation","src":"2773:22:34","text":"@inheritdoc IHooks"},"functionSelector":"5211fa77","id":6793,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"2809:12:34","nodeType":"FunctionDefinition","parameters":{"id":6786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6783,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6793,"src":"2822:23:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":6782,"nodeType":"UserDefinedTypeName","pathNode":{"id":6781,"name":"PoolSwapParams","nameLocations":["2822:14:34"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"2822:14:34"},"referencedDeclaration":2510,"src":"2822:14:34","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":6785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6793,"src":"2847:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6784,"name":"address","nodeType":"ElementaryTypeName","src":"2847:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2821:34:34"},"returnParameters":{"id":6789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6793,"src":"2880:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6787,"name":"bool","nodeType":"ElementaryTypeName","src":"2880:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2879:6:34"},"scope":6830,"src":"2800:228:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[425],"body":{"id":6808,"nodeType":"Block","src":"3147:190:34","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":6804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3321:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":6805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3328:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6806,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3320:10:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":6803,"id":6807,"nodeType":"Return","src":"3313:17:34"}]},"documentation":{"id":6794,"nodeType":"StructuredDocumentation","src":"3034:22:34","text":"@inheritdoc IHooks"},"functionSelector":"18b6eb55","id":6809,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"3070:11:34","nodeType":"FunctionDefinition","parameters":{"id":6798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6809,"src":"3082:24:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2539_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":6796,"nodeType":"UserDefinedTypeName","pathNode":{"id":6795,"name":"AfterSwapParams","nameLocations":["3082:15:34"],"nodeType":"IdentifierPath","referencedDeclaration":2539,"src":"3082:15:34"},"referencedDeclaration":2539,"src":"3082:15:34","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2539_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"3081:26:34"},"returnParameters":{"id":6803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6809,"src":"3132:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6799,"name":"bool","nodeType":"ElementaryTypeName","src":"3132:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6802,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6809,"src":"3138:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6801,"name":"uint256","nodeType":"ElementaryTypeName","src":"3138:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3131:15:34"},"scope":6830,"src":"3061:276:34","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[440],"body":{"id":6828,"nodeType":"Block","src":"3530:34:34","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":6824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3548:5:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":6825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3555:1:34","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6826,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3547:10:34","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":6823,"id":6827,"nodeType":"Return","src":"3540:17:34"}]},"documentation":{"id":6810,"nodeType":"StructuredDocumentation","src":"3343:22:34","text":"@inheritdoc IHooks"},"functionSelector":"a0e8f5ac","id":6829,"implemented":true,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"3379:33:34","nodeType":"FunctionDefinition","parameters":{"id":6818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6829,"src":"3422:23:34","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":6812,"nodeType":"UserDefinedTypeName","pathNode":{"id":6811,"name":"PoolSwapParams","nameLocations":["3422:14:34"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"3422:14:34"},"referencedDeclaration":2510,"src":"3422:14:34","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":6815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6829,"src":"3455:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6814,"name":"address","nodeType":"ElementaryTypeName","src":"3455:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6829,"src":"3472:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6816,"name":"uint256","nodeType":"ElementaryTypeName","src":"3472:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3412:73:34"},"returnParameters":{"id":6823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6829,"src":"3515:4:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6819,"name":"bool","nodeType":"ElementaryTypeName","src":"3515:4:34","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6822,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6829,"src":"3521:7:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6821,"name":"uint256","nodeType":"ElementaryTypeName","src":"3521:7:34","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3514:15:34"},"scope":6830,"src":"3370:194:34","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":6831,"src":"722:2844:34","usedErrors":[],"usedEvents":[]}],"src":"46:3521:34"},"id":34},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","exportedSymbols":{"Authentication":[3400],"CommonAuthentication":[7022],"IVault":[849]},"id":7023,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6832,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6834,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7023,"sourceUnit":850,"src":"72:81:35","symbolAliases":[{"foreign":{"id":6833,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"81:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":6836,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7023,"sourceUnit":3401,"src":"154:103:35","symbolAliases":[{"foreign":{"id":6835,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3400,"src":"163:14:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6838,"name":"Authentication","nameLocations":["390:14:35"],"nodeType":"IdentifierPath","referencedDeclaration":3400,"src":"390:14:35"},"id":6839,"nodeType":"InheritanceSpecifier","src":"390:14:35"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6837,"nodeType":"StructuredDocumentation","src":"259:89:35","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":7022,"linearizedBaseContracts":[7022,3400,69],"name":"CommonAuthentication","nameLocation":"366:20:35","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6840,"nodeType":"StructuredDocumentation","src":"411:36:35","text":"@dev Vault cannot be address(0)."},"errorSelector":"c8e28160","id":6842,"name":"VaultNotSet","nameLocation":"458:11:35","nodeType":"ErrorDefinition","parameters":{"id":6841,"nodeType":"ParameterList","parameters":[],"src":"469:2:35"},"src":"452:20:35"},{"constant":false,"id":6845,"mutability":"immutable","name":"_vault","nameLocation":"503:6:35","nodeType":"VariableDeclaration","scope":7022,"src":"478:31:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":6844,"nodeType":"UserDefinedTypeName","pathNode":{"id":6843,"name":"IVault","nameLocations":["478:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"478:6:35"},"referencedDeclaration":849,"src":"478:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":6864,"nodeType":"Block","src":"667:161:35","statements":[{"assignments":[6851],"declarations":[{"constant":false,"id":6851,"mutability":"mutable","name":"roleAddress","nameLocation":"685:11:35","nodeType":"VariableDeclaration","scope":6864,"src":"677:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6850,"name":"address","nodeType":"ElementaryTypeName","src":"677:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":6857,"initialValue":{"expression":{"arguments":[{"id":6854,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"726:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6852,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6845,"src":"699:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"706:19:35","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":2080,"src":"699:26:35","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2415_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":6855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"699:32:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":6856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"732:14:35","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":2412,"src":"699:47:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"677:69:35"},{"expression":{"arguments":[{"id":6859,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"792:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6860,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6851,"src":"798:11:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6858,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6990,"src":"756:35:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":6861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:54:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6862,"nodeType":"ExpressionStatement","src":"756:54:35"},{"id":6863,"nodeType":"PlaceholderStatement","src":"820:1:35"}]},"documentation":{"id":6846,"nodeType":"StructuredDocumentation","src":"516:92:35","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":6865,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"622:30:35","nodeType":"ModifierDefinition","parameters":{"id":6849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6848,"mutability":"mutable","name":"pool","nameLocation":"661:4:35","nodeType":"VariableDeclaration","scope":6865,"src":"653:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6847,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"652:14:35"},"src":"613:215:35","virtual":false,"visibility":"internal"},{"body":{"id":6894,"nodeType":"Block","src":"929:120:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6878,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"951:5:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}],"id":6877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"943:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6876,"name":"address","nodeType":"ElementaryTypeName","src":"943:7:35","typeDescriptions":{}}},"id":6879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"943:14:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"969:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"961:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6880,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:35","typeDescriptions":{}}},"id":6883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"961:10:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"943:28:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6889,"nodeType":"IfStatement","src":"939:79:35","trueBody":{"id":6888,"nodeType":"Block","src":"973:45:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6885,"name":"VaultNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6842,"src":"994:11:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"994:13:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6887,"nodeType":"RevertStatement","src":"987:20:35"}]}},{"expression":{"id":6892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6890,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6845,"src":"1028:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6891,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6868,"src":"1037:5:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"src":"1028:14:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6893,"nodeType":"ExpressionStatement","src":"1028:14:35"}]},"id":6895,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6873,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6870,"src":"906:21:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6874,"kind":"baseConstructorSpecifier","modifierName":{"id":6872,"name":"Authentication","nameLocations":["891:14:35"],"nodeType":"IdentifierPath","referencedDeclaration":3400,"src":"891:14:35"},"nodeType":"ModifierInvocation","src":"891:37:35"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6868,"mutability":"mutable","name":"vault","nameLocation":"853:5:35","nodeType":"VariableDeclaration","scope":6895,"src":"846:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":6867,"nodeType":"UserDefinedTypeName","pathNode":{"id":6866,"name":"IVault","nameLocations":["846:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"846:6:35"},"referencedDeclaration":849,"src":"846:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":6870,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"868:21:35","nodeType":"VariableDeclaration","scope":6895,"src":"860:29:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6869,"name":"bytes32","nodeType":"ElementaryTypeName","src":"860:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"845:45:35"},"returnParameters":{"id":6875,"nodeType":"ParameterList","parameters":[],"src":"929:0:35"},"scope":7022,"src":"834:215:35","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6903,"nodeType":"Block","src":"1107:30:35","statements":[{"expression":{"id":6901,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6845,"src":"1124:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"functionReturnParameters":6900,"id":6902,"nodeType":"Return","src":"1117:13:35"}]},"id":6904,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"1064:9:35","nodeType":"FunctionDefinition","parameters":{"id":6896,"nodeType":"ParameterList","parameters":[],"src":"1073:2:35"},"returnParameters":{"id":6900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6904,"src":"1099:6:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":6898,"nodeType":"UserDefinedTypeName","pathNode":{"id":6897,"name":"IVault","nameLocations":["1099:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"1099:6:35"},"referencedDeclaration":849,"src":"1099:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1098:8:35"},"scope":7022,"src":"1055:82:35","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[3399],"body":{"id":6926,"nodeType":"Block","src":"1319:88:35","statements":[{"expression":{"arguments":[{"id":6918,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6906,"src":"1370:8:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6919,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6908,"src":"1380:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6922,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1394:4:35","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$7022","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$7022","typeString":"contract CommonAuthentication"}],"id":6921,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6920,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:35","typeDescriptions":{}}},"id":6923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:13:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6914,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6845,"src":"1336:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1343:13:35","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2163,"src":"1336:20:35","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$115_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:22:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"id":6917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1359:10:35","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":114,"src":"1336:33:35","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1336:64:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6913,"id":6925,"nodeType":"Return","src":"1329:71:35"}]},"id":6927,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1237:11:35","nodeType":"FunctionDefinition","overrides":{"id":6910,"nodeType":"OverrideSpecifier","overrides":[],"src":"1295:8:35"},"parameters":{"id":6909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6906,"mutability":"mutable","name":"actionId","nameLocation":"1257:8:35","nodeType":"VariableDeclaration","scope":6927,"src":"1249:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6905,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1249:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6908,"mutability":"mutable","name":"user","nameLocation":"1275:4:35","nodeType":"VariableDeclaration","scope":6927,"src":"1267:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6907,"name":"address","nodeType":"ElementaryTypeName","src":"1267:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1248:32:35"},"returnParameters":{"id":6913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6912,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6927,"src":"1313:4:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6911,"name":"bool","nodeType":"ElementaryTypeName","src":"1313:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1312:6:35"},"scope":7022,"src":"1228:179:35","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6947,"nodeType":"Block","src":"1513:83:35","statements":[{"expression":{"arguments":[{"id":6942,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6929,"src":"1564:8:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6943,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6931,"src":"1574:7:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6944,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6933,"src":"1583:5:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6938,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6845,"src":"1530:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":6939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1537:13:35","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2163,"src":"1530:20:35","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$115_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:22:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"id":6941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1553:10:35","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":114,"src":"1530:33:35","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:59:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6937,"id":6946,"nodeType":"Return","src":"1523:66:35"}]},"id":6948,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1422:11:35","nodeType":"FunctionDefinition","parameters":{"id":6934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6929,"mutability":"mutable","name":"actionId","nameLocation":"1442:8:35","nodeType":"VariableDeclaration","scope":6948,"src":"1434:16:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6928,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1434:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6931,"mutability":"mutable","name":"account","nameLocation":"1460:7:35","nodeType":"VariableDeclaration","scope":6948,"src":"1452:15:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6930,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6933,"mutability":"mutable","name":"where","nameLocation":"1477:5:35","nodeType":"VariableDeclaration","scope":6948,"src":"1469:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6932,"name":"address","nodeType":"ElementaryTypeName","src":"1469:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1433:50:35"},"returnParameters":{"id":6937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6948,"src":"1507:4:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6935,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:35"},"scope":7022,"src":"1413:183:35","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6989,"nodeType":"Block","src":"1803:339:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6956,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"1817:11:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":6959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1840:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6958,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1832:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6957,"name":"address","nodeType":"ElementaryTypeName","src":"1832:7:35","typeDescriptions":{}}},"id":6960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1832:10:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1817:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6979,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:35","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6981,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6953,"src":"2073:11:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2059:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6987,"nodeType":"IfStatement","src":"2055:81:35","trueBody":{"id":6986,"nodeType":"Block","src":"2086:50:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6983,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"2107:16:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:18:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6985,"nodeType":"RevertStatement","src":"2100:25:35"}]}},"id":6988,"nodeType":"IfStatement","src":"1813:323:35","trueBody":{"id":6978,"nodeType":"Block","src":"1844:205:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":6964,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1942:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1946:3:35","memberName":"sig","nodeType":"MemberAccess","src":"1942:7:35","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":6963,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"1930:11:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":6966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1930:20:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":6967,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:35","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6969,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6951,"src":"1964:5:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6962,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[6927,6948],"referencedDeclaration":6948,"src":"1918:11:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":6970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1918:52:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":6971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1974:5:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1918:61:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6977,"nodeType":"IfStatement","src":"1914:125:35","trueBody":{"id":6976,"nodeType":"Block","src":"1981:58:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6973,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"2006:16:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:18:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6975,"nodeType":"RevertStatement","src":"1999:25:35"}]}}]}}]},"documentation":{"id":6949,"nodeType":"StructuredDocumentation","src":"1602:101:35","text":"@dev Ensure the sender is the roleAccount, or default to governance if roleAccount is address(0)."},"id":6990,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1717:35:35","nodeType":"FunctionDefinition","parameters":{"id":6954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6951,"mutability":"mutable","name":"where","nameLocation":"1761:5:35","nodeType":"VariableDeclaration","scope":6990,"src":"1753:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6950,"name":"address","nodeType":"ElementaryTypeName","src":"1753:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6953,"mutability":"mutable","name":"roleAccount","nameLocation":"1776:11:35","nodeType":"VariableDeclaration","scope":6990,"src":"1768:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6952,"name":"address","nodeType":"ElementaryTypeName","src":"1768:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1752:36:35"},"returnParameters":{"id":6955,"nodeType":"ParameterList","parameters":[],"src":"1803:0:35"},"scope":7022,"src":"1708:434:35","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7020,"nodeType":"Block","src":"2341:352:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6998,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2444:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:6:35","memberName":"sender","nodeType":"MemberAccess","src":"2444:10:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7000,"name":"roleAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6995,"src":"2458:11:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2444:25:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7019,"nodeType":"IfStatement","src":"2440:180:35","trueBody":{"id":7018,"nodeType":"Block","src":"2471:149:35","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":7004,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2513:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:3:35","memberName":"sig","nodeType":"MemberAccess","src":"2513:7:35","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":7003,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3389,"src":"2501:11:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":7006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2501:20:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":7007,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2523:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2527:6:35","memberName":"sender","nodeType":"MemberAccess","src":"2523:10:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7009,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6993,"src":"2535:5:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7002,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[6927,6948],"referencedDeclaration":6948,"src":"2489:11:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":7010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2489:52:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":7011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2545:5:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2489:61:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7017,"nodeType":"IfStatement","src":"2485:125:35","trueBody":{"id":7016,"nodeType":"Block","src":"2552:58:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7013,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60,"src":"2577:16:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2577:18:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7015,"nodeType":"RevertStatement","src":"2570:25:35"}]}}]}}]},"documentation":{"id":6991,"nodeType":"StructuredDocumentation","src":"2148:102:35","text":"@dev Ensure the sender is either the role manager, or is authorized by governance (non-exclusive)."},"id":7021,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"2264:26:35","nodeType":"FunctionDefinition","parameters":{"id":6996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6993,"mutability":"mutable","name":"where","nameLocation":"2299:5:35","nodeType":"VariableDeclaration","scope":7021,"src":"2291:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6992,"name":"address","nodeType":"ElementaryTypeName","src":"2291:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6995,"mutability":"mutable","name":"roleAccount","nameLocation":"2314:11:35","nodeType":"VariableDeclaration","scope":7021,"src":"2306:19:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6994,"name":"address","nodeType":"ElementaryTypeName","src":"2306:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2290:36:35"},"returnParameters":{"id":6997,"nodeType":"ParameterList","parameters":[],"src":"2341:0:35"},"scope":7022,"src":"2255:438:35","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7023,"src":"348:2347:35","usedErrors":[60,6842],"usedEvents":[]}],"src":"46:2650:35"},"id":35},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[7022],"IAuthorizer":[115],"IVault":[849],"SingletonAuthentication":[7081]},"id":7082,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7024,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":7026,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7082,"sourceUnit":116,"src":"72:91:36","symbolAliases":[{"foreign":{"id":7025,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":115,"src":"81:11:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7028,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7082,"sourceUnit":850,"src":"164:81:36","symbolAliases":[{"foreign":{"id":7027,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"173:6:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol","file":"./CommonAuthentication.sol","id":7030,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7082,"sourceUnit":7023,"src":"247:66:36","symbolAliases":[{"foreign":{"id":7029,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7022,"src":"256:20:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":7032,"name":"CommonAuthentication","nameLocations":["735:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":7022,"src":"735:20:36"},"id":7033,"nodeType":"InheritanceSpecifier","src":"735:20:36"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":7031,"nodeType":"StructuredDocumentation","src":"315:374:36","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":7081,"linearizedBaseContracts":[7081,7022,3400,69],"name":"SingletonAuthentication","nameLocation":"708:23:36","nodeType":"ContractDefinition","nodes":[{"body":{"id":7055,"nodeType":"Block","src":"932:64:36","statements":[]},"id":7056,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":7039,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7036,"src":"883:5:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":7048,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"922:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$7081","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$7081","typeString":"contract SingletonAuthentication"}],"id":7047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"914:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7046,"name":"address","nodeType":"ElementaryTypeName","src":"914:7:36","typeDescriptions":{}}},"id":7049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"914:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"906:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7044,"name":"uint160","nodeType":"ElementaryTypeName","src":"906:7:36","typeDescriptions":{}}},"id":7050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:22:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"898:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7042,"name":"uint256","nodeType":"ElementaryTypeName","src":"898:7:36","typeDescriptions":{}}},"id":7051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"898:31:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"890:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7040,"name":"bytes32","nodeType":"ElementaryTypeName","src":"890:7:36","typeDescriptions":{}}},"id":7052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:40:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":7053,"kind":"baseConstructorSpecifier","modifierName":{"id":7038,"name":"CommonAuthentication","nameLocations":["862:20:36"],"nodeType":"IdentifierPath","referencedDeclaration":7022,"src":"862:20:36"},"nodeType":"ModifierInvocation","src":"862:69:36"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7036,"mutability":"mutable","name":"vault","nameLocation":"855:5:36","nodeType":"VariableDeclaration","scope":7056,"src":"848:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":7035,"nodeType":"UserDefinedTypeName","pathNode":{"id":7034,"name":"IVault","nameLocations":["848:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"848:6:36"},"referencedDeclaration":849,"src":"848:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"847:14:36"},"returnParameters":{"id":7054,"nodeType":"ParameterList","parameters":[],"src":"932:0:36"},"scope":7081,"src":"836:160:36","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7066,"nodeType":"Block","src":"1176:35:36","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":7063,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6904,"src":"1193:9:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$849_$","typeString":"function () view returns (contract IVault)"}},"id":7064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1193:11:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"functionReturnParameters":7062,"id":7065,"nodeType":"Return","src":"1186:18:36"}]},"documentation":{"id":7057,"nodeType":"StructuredDocumentation","src":"1002:120:36","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":7067,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1136:8:36","nodeType":"FunctionDefinition","parameters":{"id":7058,"nodeType":"ParameterList","parameters":[],"src":"1144:2:36"},"returnParameters":{"id":7062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7067,"src":"1168:6:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":7060,"nodeType":"UserDefinedTypeName","pathNode":{"id":7059,"name":"IVault","nameLocations":["1168:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"1168:6:36"},"referencedDeclaration":849,"src":"1168:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1167:8:36"},"scope":7081,"src":"1127:84:36","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":7079,"nodeType":"Block","src":"1407:50:36","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":7074,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"1424:8:36","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$849_$","typeString":"function () view returns (contract IVault)"}},"id":7075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:10:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":7076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1435:13:36","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":2163,"src":"1424:24:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$115_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":7077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1424:26:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"functionReturnParameters":7073,"id":7078,"nodeType":"Return","src":"1417:33:36"}]},"documentation":{"id":7068,"nodeType":"StructuredDocumentation","src":"1217:126:36","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":7080,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1357:13:36","nodeType":"FunctionDefinition","parameters":{"id":7069,"nodeType":"ParameterList","parameters":[],"src":"1370:2:36"},"returnParameters":{"id":7073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7080,"src":"1394:11:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"},"typeName":{"id":7071,"nodeType":"UserDefinedTypeName","pathNode":{"id":7070,"name":"IAuthorizer","nameLocations":["1394:11:36"],"nodeType":"IdentifierPath","referencedDeclaration":115,"src":"1394:11:36"},"referencedDeclaration":115,"src":"1394:11:36","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$115","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1393:13:36"},"scope":7081,"src":"1348:109:36","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":7082,"src":"690:769:36","usedErrors":[60,6842],"usedEvents":[]}],"src":"46:1414:36"},"id":36},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[849],"IVaultErrors":[1506],"VaultGuard":[7130]},"id":7131,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7083,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":7085,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7131,"sourceUnit":1507,"src":"72:93:37","symbolAliases":[{"foreign":{"id":7084,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"81:12:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":7087,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7131,"sourceUnit":850,"src":"166:81:37","symbolAliases":[{"foreign":{"id":7086,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"175:6:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":7088,"nodeType":"StructuredDocumentation","src":"249:59:37","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":7130,"linearizedBaseContracts":[7130],"name":"VaultGuard","nameLocation":"317:10:37","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7091,"mutability":"immutable","name":"_vault","nameLocation":"360:6:37","nodeType":"VariableDeclaration","scope":7130,"src":"334:32:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":7090,"nodeType":"UserDefinedTypeName","pathNode":{"id":7089,"name":"IVault","nameLocations":["334:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"334:6:37"},"referencedDeclaration":849,"src":"334:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":7101,"nodeType":"Block","src":"399:31:37","statements":[{"expression":{"id":7099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7097,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"409:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7098,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7094,"src":"418:5:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"src":"409:14:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":7100,"nodeType":"ExpressionStatement","src":"409:14:37"}]},"id":7102,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7094,"mutability":"mutable","name":"vault","nameLocation":"392:5:37","nodeType":"VariableDeclaration","scope":7102,"src":"385:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":7093,"nodeType":"UserDefinedTypeName","pathNode":{"id":7092,"name":"IVault","nameLocations":["385:6:37"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"385:6:37"},"referencedDeclaration":849,"src":"385:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:37"},"returnParameters":{"id":7096,"nodeType":"ParameterList","parameters":[],"src":"399:0:37"},"scope":7130,"src":"373:57:37","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":7108,"nodeType":"Block","src":"457:46:37","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":7104,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7129,"src":"467:16:37","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":7105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7106,"nodeType":"ExpressionStatement","src":"467:18:37"},{"id":7107,"nodeType":"PlaceholderStatement","src":"495:1:37"}]},"id":7109,"name":"onlyVault","nameLocation":"445:9:37","nodeType":"ModifierDefinition","parameters":{"id":7103,"nodeType":"ParameterList","parameters":[],"src":"454:2:37"},"src":"436:67:37","virtual":false,"visibility":"internal"},{"body":{"id":7128,"nodeType":"Block","src":"550:124:37","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7112,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:37","memberName":"sender","nodeType":"MemberAccess","src":"564:10:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":7116,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"586:6:37","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}],"id":7115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:37","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7114,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:37","typeDescriptions":{}}},"id":7117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7127,"nodeType":"IfStatement","src":"560:108:37","trueBody":{"id":7126,"nodeType":"Block","src":"595:73:37","statements":[{"errorCall":{"arguments":[{"expression":{"id":7122,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:37","memberName":"sender","nodeType":"MemberAccess","src":"646:10:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7119,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"616:12:37","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1506_$","typeString":"type(contract IVaultErrors)"}},"id":7121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:37","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1378,"src":"616:29:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7125,"nodeType":"RevertStatement","src":"609:48:37"}]}}]},"id":7129,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:37","nodeType":"FunctionDefinition","parameters":{"id":7110,"nodeType":"ParameterList","parameters":[],"src":"534:2:37"},"returnParameters":{"id":7111,"nodeType":"ParameterList","parameters":[],"src":"550:0:37"},"scope":7130,"src":"509:165:37","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":7131,"src":"308:368:37","usedErrors":[],"usedEvents":[]}],"src":"46:631:37"},"id":37},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[7403],"IERC20Metadata":[7429],"IERC4626":[7300]},"id":7301,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7132,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:38"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":7134,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7301,"sourceUnit":7404,"src":"133:49:38","symbolAliases":[{"foreign":{"id":7133,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"141:6:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":7136,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7301,"sourceUnit":7430,"src":"183:76:38","symbolAliases":[{"foreign":{"id":7135,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"191:14:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7138,"name":"IERC20","nameLocations":["421:6:38"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"421:6:38"},"id":7139,"nodeType":"InheritanceSpecifier","src":"421:6:38"},{"baseName":{"id":7140,"name":"IERC20Metadata","nameLocations":["429:14:38"],"nodeType":"IdentifierPath","referencedDeclaration":7429,"src":"429:14:38"},"id":7141,"nodeType":"InheritanceSpecifier","src":"429:14:38"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":7137,"nodeType":"StructuredDocumentation","src":"261:137:38","text":" @dev Interface of the ERC-4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":7300,"linearizedBaseContracts":[7300,7429,7403],"name":"IERC4626","nameLocation":"409:8:38","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":7151,"name":"Deposit","nameLocation":"456:7:38","nodeType":"EventDefinition","parameters":{"id":7150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7143,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"480:6:38","nodeType":"VariableDeclaration","scope":7151,"src":"464:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7142,"name":"address","nodeType":"ElementaryTypeName","src":"464:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7145,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"504:5:38","nodeType":"VariableDeclaration","scope":7151,"src":"488:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7144,"name":"address","nodeType":"ElementaryTypeName","src":"488:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7147,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"519:6:38","nodeType":"VariableDeclaration","scope":7151,"src":"511:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7146,"name":"uint256","nodeType":"ElementaryTypeName","src":"511:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7149,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"535:6:38","nodeType":"VariableDeclaration","scope":7151,"src":"527:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7148,"name":"uint256","nodeType":"ElementaryTypeName","src":"527:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"463:79:38"},"src":"450:93:38"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":7163,"name":"Withdraw","nameLocation":"555:8:38","nodeType":"EventDefinition","parameters":{"id":7162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7153,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"589:6:38","nodeType":"VariableDeclaration","scope":7163,"src":"573:22:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7152,"name":"address","nodeType":"ElementaryTypeName","src":"573:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7155,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"621:8:38","nodeType":"VariableDeclaration","scope":7163,"src":"605:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7154,"name":"address","nodeType":"ElementaryTypeName","src":"605:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7157,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"655:5:38","nodeType":"VariableDeclaration","scope":7163,"src":"639:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7156,"name":"address","nodeType":"ElementaryTypeName","src":"639:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7159,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"678:6:38","nodeType":"VariableDeclaration","scope":7163,"src":"670:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7158,"name":"uint256","nodeType":"ElementaryTypeName","src":"670:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7161,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"702:6:38","nodeType":"VariableDeclaration","scope":7163,"src":"694:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7160,"name":"uint256","nodeType":"ElementaryTypeName","src":"694:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:151:38"},"src":"549:166:38"},{"documentation":{"id":7164,"nodeType":"StructuredDocumentation","src":"721:207:38","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":7169,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"942:5:38","nodeType":"FunctionDefinition","parameters":{"id":7165,"nodeType":"ParameterList","parameters":[],"src":"947:2:38"},"returnParameters":{"id":7168,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7167,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"981:17:38","nodeType":"VariableDeclaration","scope":7169,"src":"973:25:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7166,"name":"address","nodeType":"ElementaryTypeName","src":"973:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"972:27:38"},"scope":7300,"src":"933:67:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7170,"nodeType":"StructuredDocumentation","src":"1006:286:38","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":7175,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1306:11:38","nodeType":"FunctionDefinition","parameters":{"id":7171,"nodeType":"ParameterList","parameters":[],"src":"1317:2:38"},"returnParameters":{"id":7174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7173,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1351:18:38","nodeType":"VariableDeclaration","scope":7175,"src":"1343:26:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7172,"name":"uint256","nodeType":"ElementaryTypeName","src":"1343:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1342:28:38"},"scope":7300,"src":"1297:74:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7176,"nodeType":"StructuredDocumentation","src":"1377:720:38","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":7183,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2111:15:38","nodeType":"FunctionDefinition","parameters":{"id":7179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7178,"mutability":"mutable","name":"assets","nameLocation":"2135:6:38","nodeType":"VariableDeclaration","scope":7183,"src":"2127:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7177,"name":"uint256","nodeType":"ElementaryTypeName","src":"2127:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2126:16:38"},"returnParameters":{"id":7182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7181,"mutability":"mutable","name":"shares","nameLocation":"2174:6:38","nodeType":"VariableDeclaration","scope":7183,"src":"2166:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2166:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2165:16:38"},"scope":7300,"src":"2102:80:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7184,"nodeType":"StructuredDocumentation","src":"2188:720:38","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":7191,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2922:15:38","nodeType":"FunctionDefinition","parameters":{"id":7187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7186,"mutability":"mutable","name":"shares","nameLocation":"2946:6:38","nodeType":"VariableDeclaration","scope":7191,"src":"2938:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7185,"name":"uint256","nodeType":"ElementaryTypeName","src":"2938:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2937:16:38"},"returnParameters":{"id":7190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7189,"mutability":"mutable","name":"assets","nameLocation":"2985:6:38","nodeType":"VariableDeclaration","scope":7191,"src":"2977:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7188,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:16:38"},"scope":7300,"src":"2913:80:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7192,"nodeType":"StructuredDocumentation","src":"2999:386:38","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":7199,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3399:10:38","nodeType":"FunctionDefinition","parameters":{"id":7195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7194,"mutability":"mutable","name":"receiver","nameLocation":"3418:8:38","nodeType":"VariableDeclaration","scope":7199,"src":"3410:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7193,"name":"address","nodeType":"ElementaryTypeName","src":"3410:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3409:18:38"},"returnParameters":{"id":7198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7197,"mutability":"mutable","name":"maxAssets","nameLocation":"3459:9:38","nodeType":"VariableDeclaration","scope":7199,"src":"3451:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7196,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:19:38"},"scope":7300,"src":"3390:80:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7200,"nodeType":"StructuredDocumentation","src":"3476:1012:38","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":7207,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4502:14:38","nodeType":"FunctionDefinition","parameters":{"id":7203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7202,"mutability":"mutable","name":"assets","nameLocation":"4525:6:38","nodeType":"VariableDeclaration","scope":7207,"src":"4517:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7201,"name":"uint256","nodeType":"ElementaryTypeName","src":"4517:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4516:16:38"},"returnParameters":{"id":7206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7205,"mutability":"mutable","name":"shares","nameLocation":"4564:6:38","nodeType":"VariableDeclaration","scope":7207,"src":"4556:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7204,"name":"uint256","nodeType":"ElementaryTypeName","src":"4556:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4555:16:38"},"scope":7300,"src":"4493:79:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7208,"nodeType":"StructuredDocumentation","src":"4578:651:38","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":7217,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5243:7:38","nodeType":"FunctionDefinition","parameters":{"id":7213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7210,"mutability":"mutable","name":"assets","nameLocation":"5259:6:38","nodeType":"VariableDeclaration","scope":7217,"src":"5251:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7209,"name":"uint256","nodeType":"ElementaryTypeName","src":"5251:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7212,"mutability":"mutable","name":"receiver","nameLocation":"5275:8:38","nodeType":"VariableDeclaration","scope":7217,"src":"5267:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7211,"name":"address","nodeType":"ElementaryTypeName","src":"5267:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5250:34:38"},"returnParameters":{"id":7216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7215,"mutability":"mutable","name":"shares","nameLocation":"5311:6:38","nodeType":"VariableDeclaration","scope":7217,"src":"5303:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7214,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5302:16:38"},"scope":7300,"src":"5234:85:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7218,"nodeType":"StructuredDocumentation","src":"5325:341:38","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":7225,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5680:7:38","nodeType":"FunctionDefinition","parameters":{"id":7221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7220,"mutability":"mutable","name":"receiver","nameLocation":"5696:8:38","nodeType":"VariableDeclaration","scope":7225,"src":"5688:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7219,"name":"address","nodeType":"ElementaryTypeName","src":"5688:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5687:18:38"},"returnParameters":{"id":7224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7223,"mutability":"mutable","name":"maxShares","nameLocation":"5737:9:38","nodeType":"VariableDeclaration","scope":7225,"src":"5729:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7222,"name":"uint256","nodeType":"ElementaryTypeName","src":"5729:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5728:19:38"},"scope":7300,"src":"5671:77:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7226,"nodeType":"StructuredDocumentation","src":"5754:984:38","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":7233,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6752:11:38","nodeType":"FunctionDefinition","parameters":{"id":7229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7228,"mutability":"mutable","name":"shares","nameLocation":"6772:6:38","nodeType":"VariableDeclaration","scope":7233,"src":"6764:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7227,"name":"uint256","nodeType":"ElementaryTypeName","src":"6764:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6763:16:38"},"returnParameters":{"id":7232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7231,"mutability":"mutable","name":"assets","nameLocation":"6811:6:38","nodeType":"VariableDeclaration","scope":7233,"src":"6803:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7230,"name":"uint256","nodeType":"ElementaryTypeName","src":"6803:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6802:16:38"},"scope":7300,"src":"6743:76:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7234,"nodeType":"StructuredDocumentation","src":"6825:642:38","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":7243,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7481:4:38","nodeType":"FunctionDefinition","parameters":{"id":7239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7236,"mutability":"mutable","name":"shares","nameLocation":"7494:6:38","nodeType":"VariableDeclaration","scope":7243,"src":"7486:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7235,"name":"uint256","nodeType":"ElementaryTypeName","src":"7486:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7238,"mutability":"mutable","name":"receiver","nameLocation":"7510:8:38","nodeType":"VariableDeclaration","scope":7243,"src":"7502:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7237,"name":"address","nodeType":"ElementaryTypeName","src":"7502:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7485:34:38"},"returnParameters":{"id":7242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7241,"mutability":"mutable","name":"assets","nameLocation":"7546:6:38","nodeType":"VariableDeclaration","scope":7243,"src":"7538:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7240,"name":"uint256","nodeType":"ElementaryTypeName","src":"7538:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7537:16:38"},"scope":7300,"src":"7472:82:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7244,"nodeType":"StructuredDocumentation","src":"7560:293:38","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":7251,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7867:11:38","nodeType":"FunctionDefinition","parameters":{"id":7247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7246,"mutability":"mutable","name":"owner","nameLocation":"7887:5:38","nodeType":"VariableDeclaration","scope":7251,"src":"7879:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7245,"name":"address","nodeType":"ElementaryTypeName","src":"7879:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7878:15:38"},"returnParameters":{"id":7250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7249,"mutability":"mutable","name":"maxAssets","nameLocation":"7925:9:38","nodeType":"VariableDeclaration","scope":7251,"src":"7917:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7248,"name":"uint256","nodeType":"ElementaryTypeName","src":"7917:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7916:19:38"},"scope":7300,"src":"7858:78:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7252,"nodeType":"StructuredDocumentation","src":"7942:1034:38","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":7259,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8990:15:38","nodeType":"FunctionDefinition","parameters":{"id":7255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7254,"mutability":"mutable","name":"assets","nameLocation":"9014:6:38","nodeType":"VariableDeclaration","scope":7259,"src":"9006:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7253,"name":"uint256","nodeType":"ElementaryTypeName","src":"9006:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9005:16:38"},"returnParameters":{"id":7258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7257,"mutability":"mutable","name":"shares","nameLocation":"9053:6:38","nodeType":"VariableDeclaration","scope":7259,"src":"9045:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7256,"name":"uint256","nodeType":"ElementaryTypeName","src":"9045:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9044:16:38"},"scope":7300,"src":"8981:80:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7260,"nodeType":"StructuredDocumentation","src":"9067:670:38","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":7271,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9751:8:38","nodeType":"FunctionDefinition","parameters":{"id":7267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7262,"mutability":"mutable","name":"assets","nameLocation":"9768:6:38","nodeType":"VariableDeclaration","scope":7271,"src":"9760:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7261,"name":"uint256","nodeType":"ElementaryTypeName","src":"9760:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7264,"mutability":"mutable","name":"receiver","nameLocation":"9784:8:38","nodeType":"VariableDeclaration","scope":7271,"src":"9776:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7263,"name":"address","nodeType":"ElementaryTypeName","src":"9776:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7266,"mutability":"mutable","name":"owner","nameLocation":"9802:5:38","nodeType":"VariableDeclaration","scope":7271,"src":"9794:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7265,"name":"address","nodeType":"ElementaryTypeName","src":"9794:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9759:49:38"},"returnParameters":{"id":7270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7269,"mutability":"mutable","name":"shares","nameLocation":"9835:6:38","nodeType":"VariableDeclaration","scope":7271,"src":"9827:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7268,"name":"uint256","nodeType":"ElementaryTypeName","src":"9827:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9826:16:38"},"scope":7300,"src":"9742:101:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7272,"nodeType":"StructuredDocumentation","src":"9849:381:38","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":7279,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10244:9:38","nodeType":"FunctionDefinition","parameters":{"id":7275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7274,"mutability":"mutable","name":"owner","nameLocation":"10262:5:38","nodeType":"VariableDeclaration","scope":7279,"src":"10254:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7273,"name":"address","nodeType":"ElementaryTypeName","src":"10254:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10253:15:38"},"returnParameters":{"id":7278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7277,"mutability":"mutable","name":"maxShares","nameLocation":"10300:9:38","nodeType":"VariableDeclaration","scope":7279,"src":"10292:17:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7276,"name":"uint256","nodeType":"ElementaryTypeName","src":"10292:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10291:19:38"},"scope":7300,"src":"10235:76:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7280,"nodeType":"StructuredDocumentation","src":"10317:1010:38","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":7287,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11341:13:38","nodeType":"FunctionDefinition","parameters":{"id":7283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7282,"mutability":"mutable","name":"shares","nameLocation":"11363:6:38","nodeType":"VariableDeclaration","scope":7287,"src":"11355:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7281,"name":"uint256","nodeType":"ElementaryTypeName","src":"11355:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11354:16:38"},"returnParameters":{"id":7286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7285,"mutability":"mutable","name":"assets","nameLocation":"11402:6:38","nodeType":"VariableDeclaration","scope":7287,"src":"11394:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7284,"name":"uint256","nodeType":"ElementaryTypeName","src":"11394:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11393:16:38"},"scope":7300,"src":"11332:78:38","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7288,"nodeType":"StructuredDocumentation","src":"11416:661:38","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":7299,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12091:6:38","nodeType":"FunctionDefinition","parameters":{"id":7295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7290,"mutability":"mutable","name":"shares","nameLocation":"12106:6:38","nodeType":"VariableDeclaration","scope":7299,"src":"12098:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7289,"name":"uint256","nodeType":"ElementaryTypeName","src":"12098:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7292,"mutability":"mutable","name":"receiver","nameLocation":"12122:8:38","nodeType":"VariableDeclaration","scope":7299,"src":"12114:16:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7291,"name":"address","nodeType":"ElementaryTypeName","src":"12114:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7294,"mutability":"mutable","name":"owner","nameLocation":"12140:5:38","nodeType":"VariableDeclaration","scope":7299,"src":"12132:13:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7293,"name":"address","nodeType":"ElementaryTypeName","src":"12132:7:38","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12097:49:38"},"returnParameters":{"id":7298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7297,"mutability":"mutable","name":"assets","nameLocation":"12173:6:38","nodeType":"VariableDeclaration","scope":7299,"src":"12165:14:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7296,"name":"uint256","nodeType":"ElementaryTypeName","src":"12165:7:38","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12164:16:38"},"scope":7300,"src":"12082:99:38","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7301,"src":"399:11784:38","usedErrors":[],"usedEvents":[7151,7163,7337,7346]}],"src":"107:12077:38"},"id":38},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","exportedSymbols":{"IERC5267":[7325]},"id":7326,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7302,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:39"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC5267","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":7325,"linearizedBaseContracts":[7325],"name":"IERC5267","nameLocation":"143:8:39","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":7303,"nodeType":"StructuredDocumentation","src":"158:84:39","text":" @dev MAY be emitted to signal that the domain could have changed."},"eventSelector":"0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31","id":7305,"name":"EIP712DomainChanged","nameLocation":"253:19:39","nodeType":"EventDefinition","parameters":{"id":7304,"nodeType":"ParameterList","parameters":[],"src":"272:2:39"},"src":"247:28:39"},{"documentation":{"id":7306,"nodeType":"StructuredDocumentation","src":"281:140:39","text":" @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n signature."},"functionSelector":"84b0196e","id":7324,"implemented":false,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"435:12:39","nodeType":"FunctionDefinition","parameters":{"id":7307,"nodeType":"ParameterList","parameters":[],"src":"447:2:39"},"returnParameters":{"id":7323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7309,"mutability":"mutable","name":"fields","nameLocation":"517:6:39","nodeType":"VariableDeclaration","scope":7324,"src":"510:13:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":7308,"name":"bytes1","nodeType":"ElementaryTypeName","src":"510:6:39","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":7311,"mutability":"mutable","name":"name","nameLocation":"551:4:39","nodeType":"VariableDeclaration","scope":7324,"src":"537:18:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7310,"name":"string","nodeType":"ElementaryTypeName","src":"537:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7313,"mutability":"mutable","name":"version","nameLocation":"583:7:39","nodeType":"VariableDeclaration","scope":7324,"src":"569:21:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7312,"name":"string","nodeType":"ElementaryTypeName","src":"569:6:39","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7315,"mutability":"mutable","name":"chainId","nameLocation":"612:7:39","nodeType":"VariableDeclaration","scope":7324,"src":"604:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7314,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7317,"mutability":"mutable","name":"verifyingContract","nameLocation":"641:17:39","nodeType":"VariableDeclaration","scope":7324,"src":"633:25:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7316,"name":"address","nodeType":"ElementaryTypeName","src":"633:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7319,"mutability":"mutable","name":"salt","nameLocation":"680:4:39","nodeType":"VariableDeclaration","scope":7324,"src":"672:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7318,"name":"bytes32","nodeType":"ElementaryTypeName","src":"672:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7322,"mutability":"mutable","name":"extensions","nameLocation":"715:10:39","nodeType":"VariableDeclaration","scope":7324,"src":"698:27:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":7320,"name":"uint256","nodeType":"ElementaryTypeName","src":"698:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":7321,"nodeType":"ArrayTypeName","src":"698:9:39","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"496:239:39"},"scope":7325,"src":"426:310:39","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7326,"src":"133:605:39","usedErrors":[],"usedEvents":[7305]}],"src":"107:632:39"},"id":39},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[7403]},"id":7404,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7327,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:40"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":7328,"nodeType":"StructuredDocumentation","src":"132:71:40","text":" @dev Interface of the ERC-20 standard as defined in the ERC."},"fullyImplemented":false,"id":7403,"linearizedBaseContracts":[7403],"name":"IERC20","nameLocation":"214:6:40","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":7329,"nodeType":"StructuredDocumentation","src":"227:158:40","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":7337,"name":"Transfer","nameLocation":"396:8:40","nodeType":"EventDefinition","parameters":{"id":7336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7331,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"421:4:40","nodeType":"VariableDeclaration","scope":7337,"src":"405:20:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7330,"name":"address","nodeType":"ElementaryTypeName","src":"405:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7333,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"443:2:40","nodeType":"VariableDeclaration","scope":7337,"src":"427:18:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7332,"name":"address","nodeType":"ElementaryTypeName","src":"427:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7335,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"455:5:40","nodeType":"VariableDeclaration","scope":7337,"src":"447:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7334,"name":"uint256","nodeType":"ElementaryTypeName","src":"447:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"404:57:40"},"src":"390:72:40"},{"anonymous":false,"documentation":{"id":7338,"nodeType":"StructuredDocumentation","src":"468:148:40","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":7346,"name":"Approval","nameLocation":"627:8:40","nodeType":"EventDefinition","parameters":{"id":7345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7340,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"652:5:40","nodeType":"VariableDeclaration","scope":7346,"src":"636:21:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7339,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7342,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"675:7:40","nodeType":"VariableDeclaration","scope":7346,"src":"659:23:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7341,"name":"address","nodeType":"ElementaryTypeName","src":"659:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7344,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"692:5:40","nodeType":"VariableDeclaration","scope":7346,"src":"684:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7343,"name":"uint256","nodeType":"ElementaryTypeName","src":"684:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"635:63:40"},"src":"621:78:40"},{"documentation":{"id":7347,"nodeType":"StructuredDocumentation","src":"705:65:40","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":7352,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"784:11:40","nodeType":"FunctionDefinition","parameters":{"id":7348,"nodeType":"ParameterList","parameters":[],"src":"795:2:40"},"returnParameters":{"id":7351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7352,"src":"821:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7349,"name":"uint256","nodeType":"ElementaryTypeName","src":"821:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"820:9:40"},"scope":7403,"src":"775:55:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7353,"nodeType":"StructuredDocumentation","src":"836:71:40","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":7360,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"921:9:40","nodeType":"FunctionDefinition","parameters":{"id":7356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7355,"mutability":"mutable","name":"account","nameLocation":"939:7:40","nodeType":"VariableDeclaration","scope":7360,"src":"931:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7354,"name":"address","nodeType":"ElementaryTypeName","src":"931:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"930:17:40"},"returnParameters":{"id":7359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7360,"src":"971:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7357,"name":"uint256","nodeType":"ElementaryTypeName","src":"971:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"970:9:40"},"scope":7403,"src":"912:68:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7361,"nodeType":"StructuredDocumentation","src":"986:213:40","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":7370,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1213:8:40","nodeType":"FunctionDefinition","parameters":{"id":7366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7363,"mutability":"mutable","name":"to","nameLocation":"1230:2:40","nodeType":"VariableDeclaration","scope":7370,"src":"1222:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7362,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7365,"mutability":"mutable","name":"value","nameLocation":"1242:5:40","nodeType":"VariableDeclaration","scope":7370,"src":"1234:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1221:27:40"},"returnParameters":{"id":7369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7370,"src":"1267:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7367,"name":"bool","nodeType":"ElementaryTypeName","src":"1267:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1266:6:40"},"scope":7403,"src":"1204:69:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7371,"nodeType":"StructuredDocumentation","src":"1279:264:40","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":7380,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1557:9:40","nodeType":"FunctionDefinition","parameters":{"id":7376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7373,"mutability":"mutable","name":"owner","nameLocation":"1575:5:40","nodeType":"VariableDeclaration","scope":7380,"src":"1567:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7372,"name":"address","nodeType":"ElementaryTypeName","src":"1567:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7375,"mutability":"mutable","name":"spender","nameLocation":"1590:7:40","nodeType":"VariableDeclaration","scope":7380,"src":"1582:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7374,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1566:32:40"},"returnParameters":{"id":7379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7380,"src":"1622:7:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7377,"name":"uint256","nodeType":"ElementaryTypeName","src":"1622:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1621:9:40"},"scope":7403,"src":"1548:83:40","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7381,"nodeType":"StructuredDocumentation","src":"1637:667:40","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":7390,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2318:7:40","nodeType":"FunctionDefinition","parameters":{"id":7386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7383,"mutability":"mutable","name":"spender","nameLocation":"2334:7:40","nodeType":"VariableDeclaration","scope":7390,"src":"2326:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7382,"name":"address","nodeType":"ElementaryTypeName","src":"2326:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7385,"mutability":"mutable","name":"value","nameLocation":"2351:5:40","nodeType":"VariableDeclaration","scope":7390,"src":"2343:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2325:32:40"},"returnParameters":{"id":7389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7388,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7390,"src":"2376:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7387,"name":"bool","nodeType":"ElementaryTypeName","src":"2376:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2375:6:40"},"scope":7403,"src":"2309:73:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7391,"nodeType":"StructuredDocumentation","src":"2388:297:40","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":7402,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2699:12:40","nodeType":"FunctionDefinition","parameters":{"id":7398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7393,"mutability":"mutable","name":"from","nameLocation":"2720:4:40","nodeType":"VariableDeclaration","scope":7402,"src":"2712:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7392,"name":"address","nodeType":"ElementaryTypeName","src":"2712:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7395,"mutability":"mutable","name":"to","nameLocation":"2734:2:40","nodeType":"VariableDeclaration","scope":7402,"src":"2726:10:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7394,"name":"address","nodeType":"ElementaryTypeName","src":"2726:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7397,"mutability":"mutable","name":"value","nameLocation":"2746:5:40","nodeType":"VariableDeclaration","scope":7402,"src":"2738:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7396,"name":"uint256","nodeType":"ElementaryTypeName","src":"2738:7:40","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2711:41:40"},"returnParameters":{"id":7401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7402,"src":"2771:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7399,"name":"bool","nodeType":"ElementaryTypeName","src":"2771:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2770:6:40"},"scope":7403,"src":"2690:87:40","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":7404,"src":"204:2575:40","usedErrors":[],"usedEvents":[7337,7346]}],"src":"106:2674:40"},"id":40},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[7403],"IERC20Metadata":[7429]},"id":7430,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7405,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:41"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":7407,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7430,"sourceUnit":7404,"src":"151:37:41","symbolAliases":[{"foreign":{"id":7406,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"159:6:41","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7409,"name":"IERC20","nameLocations":["306:6:41"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"306:6:41"},"id":7410,"nodeType":"InheritanceSpecifier","src":"306:6:41"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":7408,"nodeType":"StructuredDocumentation","src":"190:87:41","text":" @dev Interface for the optional metadata functions from the ERC-20 standard."},"fullyImplemented":false,"id":7429,"linearizedBaseContracts":[7429,7403],"name":"IERC20Metadata","nameLocation":"288:14:41","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7411,"nodeType":"StructuredDocumentation","src":"319:54:41","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":7416,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"387:4:41","nodeType":"FunctionDefinition","parameters":{"id":7412,"nodeType":"ParameterList","parameters":[],"src":"391:2:41"},"returnParameters":{"id":7415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7416,"src":"417:13:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7413,"name":"string","nodeType":"ElementaryTypeName","src":"417:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"416:15:41"},"scope":7429,"src":"378:54:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7417,"nodeType":"StructuredDocumentation","src":"438:56:41","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":7422,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"508:6:41","nodeType":"FunctionDefinition","parameters":{"id":7418,"nodeType":"ParameterList","parameters":[],"src":"514:2:41"},"returnParameters":{"id":7421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7422,"src":"540:13:41","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7419,"name":"string","nodeType":"ElementaryTypeName","src":"540:6:41","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"539:15:41"},"scope":7429,"src":"499:56:41","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7423,"nodeType":"StructuredDocumentation","src":"561:65:41","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":7428,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"640:8:41","nodeType":"FunctionDefinition","parameters":{"id":7424,"nodeType":"ParameterList","parameters":[],"src":"648:2:41"},"returnParameters":{"id":7427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7428,"src":"674:5:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7425,"name":"uint8","nodeType":"ElementaryTypeName","src":"674:5:41","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"673:7:41"},"scope":7429,"src":"631:50:41","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7430,"src":"278:405:41","usedErrors":[],"usedEvents":[7337,7346]}],"src":"125:559:41"},"id":41},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[7465]},"id":7466,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7431,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:42"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":7432,"nodeType":"StructuredDocumentation","src":"149:1965:42","text":" @dev Interface of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":7465,"linearizedBaseContracts":[7465],"name":"IERC20Permit","nameLocation":"2125:12:42","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7433,"nodeType":"StructuredDocumentation","src":"2144:850:42","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":7450,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3008:6:42","nodeType":"FunctionDefinition","parameters":{"id":7448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7435,"mutability":"mutable","name":"owner","nameLocation":"3032:5:42","nodeType":"VariableDeclaration","scope":7450,"src":"3024:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7434,"name":"address","nodeType":"ElementaryTypeName","src":"3024:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7437,"mutability":"mutable","name":"spender","nameLocation":"3055:7:42","nodeType":"VariableDeclaration","scope":7450,"src":"3047:15:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7436,"name":"address","nodeType":"ElementaryTypeName","src":"3047:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7439,"mutability":"mutable","name":"value","nameLocation":"3080:5:42","nodeType":"VariableDeclaration","scope":7450,"src":"3072:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7438,"name":"uint256","nodeType":"ElementaryTypeName","src":"3072:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7441,"mutability":"mutable","name":"deadline","nameLocation":"3103:8:42","nodeType":"VariableDeclaration","scope":7450,"src":"3095:16:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3095:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7443,"mutability":"mutable","name":"v","nameLocation":"3127:1:42","nodeType":"VariableDeclaration","scope":7450,"src":"3121:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7442,"name":"uint8","nodeType":"ElementaryTypeName","src":"3121:5:42","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7445,"mutability":"mutable","name":"r","nameLocation":"3146:1:42","nodeType":"VariableDeclaration","scope":7450,"src":"3138:9:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7444,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3138:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7447,"mutability":"mutable","name":"s","nameLocation":"3165:1:42","nodeType":"VariableDeclaration","scope":7450,"src":"3157:9:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7446,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3157:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3014:158:42"},"returnParameters":{"id":7449,"nodeType":"ParameterList","parameters":[],"src":"3181:0:42"},"scope":7465,"src":"2999:183:42","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":7451,"nodeType":"StructuredDocumentation","src":"3188:294:42","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":7458,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3496:6:42","nodeType":"FunctionDefinition","parameters":{"id":7454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7453,"mutability":"mutable","name":"owner","nameLocation":"3511:5:42","nodeType":"VariableDeclaration","scope":7458,"src":"3503:13:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7452,"name":"address","nodeType":"ElementaryTypeName","src":"3503:7:42","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3502:15:42"},"returnParameters":{"id":7457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7458,"src":"3541:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7455,"name":"uint256","nodeType":"ElementaryTypeName","src":"3541:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3540:9:42"},"scope":7465,"src":"3487:63:42","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":7459,"nodeType":"StructuredDocumentation","src":"3556:128:42","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":7464,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3751:16:42","nodeType":"FunctionDefinition","parameters":{"id":7460,"nodeType":"ParameterList","parameters":[],"src":"3767:2:42"},"returnParameters":{"id":7463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7462,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7464,"src":"3793:7:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7461,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3793:7:42","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3792:9:42"},"scope":7465,"src":"3742:60:42","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":7466,"src":"2115:1689:42","usedErrors":[],"usedEvents":[]}],"src":"123:3682:42"},"id":42},"@openzeppelin/contracts/utils/Create2.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Create2.sol","exportedSymbols":{"Create2":[7564],"Errors":[7586]},"id":7565,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7467,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:43"},{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","file":"./Errors.sol","id":7469,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7565,"sourceUnit":7587,"src":"127:36:43","symbolAliases":[{"foreign":{"id":7468,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7586,"src":"135:6:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Create2","contractDependencies":[],"contractKind":"library","documentation":{"id":7470,"nodeType":"StructuredDocumentation","src":"165:367:43","text":" @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n `CREATE2` can be used to compute in advance the address where a smart\n contract will be deployed, which allows for interesting new mechanisms known\n as 'counterfactual interactions'.\n See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n information."},"fullyImplemented":true,"id":7564,"linearizedBaseContracts":[7564],"name":"Create2","nameLocation":"541:7:43","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7471,"nodeType":"StructuredDocumentation","src":"555:50:43","text":" @dev There's no code to deploy."},"errorSelector":"4ca249dc","id":7473,"name":"Create2EmptyBytecode","nameLocation":"616:20:43","nodeType":"ErrorDefinition","parameters":{"id":7472,"nodeType":"ParameterList","parameters":[],"src":"636:2:43"},"src":"610:29:43"},{"body":{"id":7528,"nodeType":"Block","src":"1311:746:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7487,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1333:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}],"id":7486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1325:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7485,"name":"address","nodeType":"ElementaryTypeName","src":"1325:7:43","typeDescriptions":{}}},"id":7488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1325:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1339:7:43","memberName":"balance","nodeType":"MemberAccess","src":"1325:21:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7490,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7476,"src":"1349:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1325:30:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7504,"nodeType":"IfStatement","src":"1321:125:43","trueBody":{"id":7503,"nodeType":"Block","src":"1357:89:43","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":7497,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1413:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}],"id":7496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1405:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7495,"name":"address","nodeType":"ElementaryTypeName","src":"1405:7:43","typeDescriptions":{}}},"id":7498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1405:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1419:7:43","memberName":"balance","nodeType":"MemberAccess","src":"1405:21:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7500,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7476,"src":"1428:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7492,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7586,"src":"1378:6:43","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$7586_$","typeString":"type(library Errors)"}},"id":7494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1385:19:43","memberName":"InsufficientBalance","nodeType":"MemberAccess","referencedDeclaration":7574,"src":"1378:26:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":7501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1378:57:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7502,"nodeType":"RevertStatement","src":"1371:64:43"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7505,"name":"bytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7480,"src":"1459:8:43","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1468:6:43","memberName":"length","nodeType":"MemberAccess","src":"1459:15:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1478:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1459:20:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7513,"nodeType":"IfStatement","src":"1455:80:43","trueBody":{"id":7512,"nodeType":"Block","src":"1481:54:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7509,"name":"Create2EmptyBytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7473,"src":"1502:20:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1502:22:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7511,"nodeType":"RevertStatement","src":"1495:29:43"}]}},{"AST":{"nativeSrc":"1569:392:43","nodeType":"YulBlock","src":"1569:392:43","statements":[{"nativeSrc":"1583:67:43","nodeType":"YulAssignment","src":"1583:67:43","value":{"arguments":[{"name":"amount","nativeSrc":"1599:6:43","nodeType":"YulIdentifier","src":"1599:6:43"},{"arguments":[{"name":"bytecode","nativeSrc":"1611:8:43","nodeType":"YulIdentifier","src":"1611:8:43"},{"kind":"number","nativeSrc":"1621:4:43","nodeType":"YulLiteral","src":"1621:4:43","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1607:3:43","nodeType":"YulIdentifier","src":"1607:3:43"},"nativeSrc":"1607:19:43","nodeType":"YulFunctionCall","src":"1607:19:43"},{"arguments":[{"name":"bytecode","nativeSrc":"1634:8:43","nodeType":"YulIdentifier","src":"1634:8:43"}],"functionName":{"name":"mload","nativeSrc":"1628:5:43","nodeType":"YulIdentifier","src":"1628:5:43"},"nativeSrc":"1628:15:43","nodeType":"YulFunctionCall","src":"1628:15:43"},{"name":"salt","nativeSrc":"1645:4:43","nodeType":"YulIdentifier","src":"1645:4:43"}],"functionName":{"name":"create2","nativeSrc":"1591:7:43","nodeType":"YulIdentifier","src":"1591:7:43"},"nativeSrc":"1591:59:43","nodeType":"YulFunctionCall","src":"1591:59:43"},"variableNames":[{"name":"addr","nativeSrc":"1583:4:43","nodeType":"YulIdentifier","src":"1583:4:43"}]},{"body":{"nativeSrc":"1800:151:43","nodeType":"YulBlock","src":"1800:151:43","statements":[{"nativeSrc":"1818:20:43","nodeType":"YulVariableDeclaration","src":"1818:20:43","value":{"arguments":[{"kind":"number","nativeSrc":"1833:4:43","nodeType":"YulLiteral","src":"1833:4:43","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"1827:5:43","nodeType":"YulIdentifier","src":"1827:5:43"},"nativeSrc":"1827:11:43","nodeType":"YulFunctionCall","src":"1827:11:43"},"variables":[{"name":"p","nativeSrc":"1822:1:43","nodeType":"YulTypedName","src":"1822:1:43","type":""}]},{"expression":{"arguments":[{"name":"p","nativeSrc":"1870:1:43","nodeType":"YulIdentifier","src":"1870:1:43"},{"kind":"number","nativeSrc":"1873:1:43","nodeType":"YulLiteral","src":"1873:1:43","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1876:14:43","nodeType":"YulIdentifier","src":"1876:14:43"},"nativeSrc":"1876:16:43","nodeType":"YulFunctionCall","src":"1876:16:43"}],"functionName":{"name":"returndatacopy","nativeSrc":"1855:14:43","nodeType":"YulIdentifier","src":"1855:14:43"},"nativeSrc":"1855:38:43","nodeType":"YulFunctionCall","src":"1855:38:43"},"nativeSrc":"1855:38:43","nodeType":"YulExpressionStatement","src":"1855:38:43"},{"expression":{"arguments":[{"name":"p","nativeSrc":"1917:1:43","nodeType":"YulIdentifier","src":"1917:1:43"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1920:14:43","nodeType":"YulIdentifier","src":"1920:14:43"},"nativeSrc":"1920:16:43","nodeType":"YulFunctionCall","src":"1920:16:43"}],"functionName":{"name":"revert","nativeSrc":"1910:6:43","nodeType":"YulIdentifier","src":"1910:6:43"},"nativeSrc":"1910:27:43","nodeType":"YulFunctionCall","src":"1910:27:43"},"nativeSrc":"1910:27:43","nodeType":"YulExpressionStatement","src":"1910:27:43"}]},"condition":{"arguments":[{"arguments":[{"name":"addr","nativeSrc":"1762:4:43","nodeType":"YulIdentifier","src":"1762:4:43"}],"functionName":{"name":"iszero","nativeSrc":"1755:6:43","nodeType":"YulIdentifier","src":"1755:6:43"},"nativeSrc":"1755:12:43","nodeType":"YulFunctionCall","src":"1755:12:43"},{"arguments":[{"arguments":[{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1780:14:43","nodeType":"YulIdentifier","src":"1780:14:43"},"nativeSrc":"1780:16:43","nodeType":"YulFunctionCall","src":"1780:16:43"}],"functionName":{"name":"iszero","nativeSrc":"1773:6:43","nodeType":"YulIdentifier","src":"1773:6:43"},"nativeSrc":"1773:24:43","nodeType":"YulFunctionCall","src":"1773:24:43"}],"functionName":{"name":"not","nativeSrc":"1769:3:43","nodeType":"YulIdentifier","src":"1769:3:43"},"nativeSrc":"1769:29:43","nodeType":"YulFunctionCall","src":"1769:29:43"}],"functionName":{"name":"and","nativeSrc":"1751:3:43","nodeType":"YulIdentifier","src":"1751:3:43"},"nativeSrc":"1751:48:43","nodeType":"YulFunctionCall","src":"1751:48:43"},"nativeSrc":"1748:203:43","nodeType":"YulIf","src":"1748:203:43"}]},"evmVersion":"cancun","externalReferences":[{"declaration":7483,"isOffset":false,"isSlot":false,"src":"1583:4:43","valueSize":1},{"declaration":7483,"isOffset":false,"isSlot":false,"src":"1762:4:43","valueSize":1},{"declaration":7476,"isOffset":false,"isSlot":false,"src":"1599:6:43","valueSize":1},{"declaration":7480,"isOffset":false,"isSlot":false,"src":"1611:8:43","valueSize":1},{"declaration":7480,"isOffset":false,"isSlot":false,"src":"1634:8:43","valueSize":1},{"declaration":7478,"isOffset":false,"isSlot":false,"src":"1645:4:43","valueSize":1}],"flags":["memory-safe"],"id":7514,"nodeType":"InlineAssembly","src":"1544:417:43"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":7520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7515,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7483,"src":"1974:4:43","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":7518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1990:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7517,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1982:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7516,"name":"address","nodeType":"ElementaryTypeName","src":"1982:7:43","typeDescriptions":{}}},"id":7519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1982:10:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1974:18:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7527,"nodeType":"IfStatement","src":"1970:81:43","trueBody":{"id":7526,"nodeType":"Block","src":"1994:57:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7521,"name":"Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7586,"src":"2015:6:43","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Errors_$7586_$","typeString":"type(library Errors)"}},"id":7523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2022:16:43","memberName":"FailedDeployment","nodeType":"MemberAccess","referencedDeclaration":7580,"src":"2015:23:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2015:25:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7525,"nodeType":"RevertStatement","src":"2008:32:43"}]}}]},"documentation":{"id":7474,"nodeType":"StructuredDocumentation","src":"645:560:43","text":" @dev Deploys a contract using `CREATE2`. The address where the contract\n will be deployed can be known in advance via {computeAddress}.\n The bytecode for a contract can be obtained from Solidity with\n `type(contractName).creationCode`.\n Requirements:\n - `bytecode` must not be empty.\n - `salt` must have not been used for `bytecode` already.\n - the factory must have a balance of at least `amount`.\n - if `amount` is non-zero, `bytecode` must have a `payable` constructor."},"id":7529,"implemented":true,"kind":"function","modifiers":[],"name":"deploy","nameLocation":"1219:6:43","nodeType":"FunctionDefinition","parameters":{"id":7481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7476,"mutability":"mutable","name":"amount","nameLocation":"1234:6:43","nodeType":"VariableDeclaration","scope":7529,"src":"1226:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7475,"name":"uint256","nodeType":"ElementaryTypeName","src":"1226:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7478,"mutability":"mutable","name":"salt","nameLocation":"1250:4:43","nodeType":"VariableDeclaration","scope":7529,"src":"1242:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7477,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1242:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7480,"mutability":"mutable","name":"bytecode","nameLocation":"1269:8:43","nodeType":"VariableDeclaration","scope":7529,"src":"1256:21:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7479,"name":"bytes","nodeType":"ElementaryTypeName","src":"1256:5:43","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1225:53:43"},"returnParameters":{"id":7484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7483,"mutability":"mutable","name":"addr","nameLocation":"1305:4:43","nodeType":"VariableDeclaration","scope":7529,"src":"1297:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7482,"name":"address","nodeType":"ElementaryTypeName","src":"1297:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1296:14:43"},"scope":7564,"src":"1210:847:43","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7548,"nodeType":"Block","src":"2353:73:43","statements":[{"expression":{"arguments":[{"id":7540,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7532,"src":"2385:4:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":7541,"name":"bytecodeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"2391:12:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":7544,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2413:4:43","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$7564","typeString":"library Create2"}],"id":7543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2405:7:43","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7542,"name":"address","nodeType":"ElementaryTypeName","src":"2405:7:43","typeDescriptions":{}}},"id":7545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2405:13:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7539,"name":"computeAddress","nodeType":"Identifier","overloadedDeclarations":[7549,7563],"referencedDeclaration":7563,"src":"2370:14:43","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":7546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2370:49:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7538,"id":7547,"nodeType":"Return","src":"2363:56:43"}]},"documentation":{"id":7530,"nodeType":"StructuredDocumentation","src":"2063:193:43","text":" @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n `bytecodeHash` or `salt` will result in a new destination address."},"id":7549,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2270:14:43","nodeType":"FunctionDefinition","parameters":{"id":7535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7532,"mutability":"mutable","name":"salt","nameLocation":"2293:4:43","nodeType":"VariableDeclaration","scope":7549,"src":"2285:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7531,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2285:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7534,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2307:12:43","nodeType":"VariableDeclaration","scope":7549,"src":"2299:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7533,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2299:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2284:36:43"},"returnParameters":{"id":7538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7537,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7549,"src":"2344:7:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7536,"name":"address","nodeType":"ElementaryTypeName","src":"2344:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2343:9:43"},"scope":7564,"src":"2261:165:43","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7562,"nodeType":"Block","src":"2784:1679:43","statements":[{"AST":{"nativeSrc":"2819:1638:43","nodeType":"YulBlock","src":"2819:1638:43","statements":[{"nativeSrc":"2833:22:43","nodeType":"YulVariableDeclaration","src":"2833:22:43","value":{"arguments":[{"kind":"number","nativeSrc":"2850:4:43","nodeType":"YulLiteral","src":"2850:4:43","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"2844:5:43","nodeType":"YulIdentifier","src":"2844:5:43"},"nativeSrc":"2844:11:43","nodeType":"YulFunctionCall","src":"2844:11:43"},"variables":[{"name":"ptr","nativeSrc":"2837:3:43","nodeType":"YulTypedName","src":"2837:3:43","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4057:3:43","nodeType":"YulIdentifier","src":"4057:3:43"},{"kind":"number","nativeSrc":"4062:4:43","nodeType":"YulLiteral","src":"4062:4:43","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"4053:3:43","nodeType":"YulIdentifier","src":"4053:3:43"},"nativeSrc":"4053:14:43","nodeType":"YulFunctionCall","src":"4053:14:43"},{"name":"bytecodeHash","nativeSrc":"4069:12:43","nodeType":"YulIdentifier","src":"4069:12:43"}],"functionName":{"name":"mstore","nativeSrc":"4046:6:43","nodeType":"YulIdentifier","src":"4046:6:43"},"nativeSrc":"4046:36:43","nodeType":"YulFunctionCall","src":"4046:36:43"},"nativeSrc":"4046:36:43","nodeType":"YulExpressionStatement","src":"4046:36:43"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4106:3:43","nodeType":"YulIdentifier","src":"4106:3:43"},{"kind":"number","nativeSrc":"4111:4:43","nodeType":"YulLiteral","src":"4111:4:43","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4102:3:43","nodeType":"YulIdentifier","src":"4102:3:43"},"nativeSrc":"4102:14:43","nodeType":"YulFunctionCall","src":"4102:14:43"},{"name":"salt","nativeSrc":"4118:4:43","nodeType":"YulIdentifier","src":"4118:4:43"}],"functionName":{"name":"mstore","nativeSrc":"4095:6:43","nodeType":"YulIdentifier","src":"4095:6:43"},"nativeSrc":"4095:28:43","nodeType":"YulFunctionCall","src":"4095:28:43"},"nativeSrc":"4095:28:43","nodeType":"YulExpressionStatement","src":"4095:28:43"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"4143:3:43","nodeType":"YulIdentifier","src":"4143:3:43"},{"name":"deployer","nativeSrc":"4148:8:43","nodeType":"YulIdentifier","src":"4148:8:43"}],"functionName":{"name":"mstore","nativeSrc":"4136:6:43","nodeType":"YulIdentifier","src":"4136:6:43"},"nativeSrc":"4136:21:43","nodeType":"YulFunctionCall","src":"4136:21:43"},"nativeSrc":"4136:21:43","nodeType":"YulExpressionStatement","src":"4136:21:43"},{"nativeSrc":"4219:27:43","nodeType":"YulVariableDeclaration","src":"4219:27:43","value":{"arguments":[{"name":"ptr","nativeSrc":"4236:3:43","nodeType":"YulIdentifier","src":"4236:3:43"},{"kind":"number","nativeSrc":"4241:4:43","nodeType":"YulLiteral","src":"4241:4:43","type":"","value":"0x0b"}],"functionName":{"name":"add","nativeSrc":"4232:3:43","nodeType":"YulIdentifier","src":"4232:3:43"},"nativeSrc":"4232:14:43","nodeType":"YulFunctionCall","src":"4232:14:43"},"variables":[{"name":"start","nativeSrc":"4223:5:43","nodeType":"YulTypedName","src":"4223:5:43","type":""}]},{"expression":{"arguments":[{"name":"start","nativeSrc":"4345:5:43","nodeType":"YulIdentifier","src":"4345:5:43"},{"kind":"number","nativeSrc":"4352:4:43","nodeType":"YulLiteral","src":"4352:4:43","type":"","value":"0xff"}],"functionName":{"name":"mstore8","nativeSrc":"4337:7:43","nodeType":"YulIdentifier","src":"4337:7:43"},"nativeSrc":"4337:20:43","nodeType":"YulFunctionCall","src":"4337:20:43"},"nativeSrc":"4337:20:43","nodeType":"YulExpressionStatement","src":"4337:20:43"},{"nativeSrc":"4370:77:43","nodeType":"YulAssignment","src":"4370:77:43","value":{"arguments":[{"arguments":[{"name":"start","nativeSrc":"4392:5:43","nodeType":"YulIdentifier","src":"4392:5:43"},{"kind":"number","nativeSrc":"4399:2:43","nodeType":"YulLiteral","src":"4399:2:43","type":"","value":"85"}],"functionName":{"name":"keccak256","nativeSrc":"4382:9:43","nodeType":"YulIdentifier","src":"4382:9:43"},"nativeSrc":"4382:20:43","nodeType":"YulFunctionCall","src":"4382:20:43"},{"kind":"number","nativeSrc":"4404:42:43","nodeType":"YulLiteral","src":"4404:42:43","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nativeSrc":"4378:3:43","nodeType":"YulIdentifier","src":"4378:3:43"},"nativeSrc":"4378:69:43","nodeType":"YulFunctionCall","src":"4378:69:43"},"variableNames":[{"name":"addr","nativeSrc":"4370:4:43","nodeType":"YulIdentifier","src":"4370:4:43"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7559,"isOffset":false,"isSlot":false,"src":"4370:4:43","valueSize":1},{"declaration":7554,"isOffset":false,"isSlot":false,"src":"4069:12:43","valueSize":1},{"declaration":7556,"isOffset":false,"isSlot":false,"src":"4148:8:43","valueSize":1},{"declaration":7552,"isOffset":false,"isSlot":false,"src":"4118:4:43","valueSize":1}],"flags":["memory-safe"],"id":7561,"nodeType":"InlineAssembly","src":"2794:1663:43"}]},"documentation":{"id":7550,"nodeType":"StructuredDocumentation","src":"2432:232:43","text":" @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}."},"id":7563,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2678:14:43","nodeType":"FunctionDefinition","parameters":{"id":7557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7552,"mutability":"mutable","name":"salt","nameLocation":"2701:4:43","nodeType":"VariableDeclaration","scope":7563,"src":"2693:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7551,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2693:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7554,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2715:12:43","nodeType":"VariableDeclaration","scope":7563,"src":"2707:20:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7553,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2707:7:43","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7556,"mutability":"mutable","name":"deployer","nameLocation":"2737:8:43","nodeType":"VariableDeclaration","scope":7563,"src":"2729:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7555,"name":"address","nodeType":"ElementaryTypeName","src":"2729:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2692:54:43"},"returnParameters":{"id":7560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7559,"mutability":"mutable","name":"addr","nameLocation":"2778:4:43","nodeType":"VariableDeclaration","scope":7563,"src":"2770:12:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7558,"name":"address","nodeType":"ElementaryTypeName","src":"2770:7:43","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2769:14:43"},"scope":7564,"src":"2669:1794:43","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":7565,"src":"533:3932:43","usedErrors":[7473],"usedEvents":[]}],"src":"101:4365:43"},"id":43},"@openzeppelin/contracts/utils/Errors.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Errors.sol","exportedSymbols":{"Errors":[7586]},"id":7587,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7566,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"100:24:44"},{"abstract":false,"baseContracts":[],"canonicalName":"Errors","contractDependencies":[],"contractKind":"library","documentation":{"id":7567,"nodeType":"StructuredDocumentation","src":"126:284:44","text":" @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"},"fullyImplemented":true,"id":7586,"linearizedBaseContracts":[7586],"name":"Errors","nameLocation":"419:6:44","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7568,"nodeType":"StructuredDocumentation","src":"432:94:44","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cf479181","id":7574,"name":"InsufficientBalance","nameLocation":"537:19:44","nodeType":"ErrorDefinition","parameters":{"id":7573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7570,"mutability":"mutable","name":"balance","nameLocation":"565:7:44","nodeType":"VariableDeclaration","scope":7574,"src":"557:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7569,"name":"uint256","nodeType":"ElementaryTypeName","src":"557:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7572,"mutability":"mutable","name":"needed","nameLocation":"582:6:44","nodeType":"VariableDeclaration","scope":7574,"src":"574:14:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7571,"name":"uint256","nodeType":"ElementaryTypeName","src":"574:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"556:33:44"},"src":"531:59:44"},{"documentation":{"id":7575,"nodeType":"StructuredDocumentation","src":"596:89:44","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"d6bda275","id":7577,"name":"FailedCall","nameLocation":"696:10:44","nodeType":"ErrorDefinition","parameters":{"id":7576,"nodeType":"ParameterList","parameters":[],"src":"706:2:44"},"src":"690:19:44"},{"documentation":{"id":7578,"nodeType":"StructuredDocumentation","src":"715:46:44","text":" @dev The deployment failed."},"errorSelector":"b06ebf3d","id":7580,"name":"FailedDeployment","nameLocation":"772:16:44","nodeType":"ErrorDefinition","parameters":{"id":7579,"nodeType":"ParameterList","parameters":[],"src":"788:2:44"},"src":"766:25:44"},{"documentation":{"id":7581,"nodeType":"StructuredDocumentation","src":"797:58:44","text":" @dev A necessary precompile is missing."},"errorSelector":"42b01bce","id":7585,"name":"MissingPrecompile","nameLocation":"866:17:44","nodeType":"ErrorDefinition","parameters":{"id":7584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7585,"src":"884:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7582,"name":"address","nodeType":"ElementaryTypeName","src":"884:7:44","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"883:9:44"},"src":"860:33:44"}],"scope":7587,"src":"411:484:44","usedErrors":[7574,7577,7580,7585],"usedEvents":[]}],"src":"100:796:44"},"id":44},"@openzeppelin/contracts/utils/Nonces.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","exportedSymbols":{"Nonces":[7654]},"id":7655,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7588,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:45"},{"abstract":true,"baseContracts":[],"canonicalName":"Nonces","contractDependencies":[],"contractKind":"contract","documentation":{"id":7589,"nodeType":"StructuredDocumentation","src":"125:83:45","text":" @dev Provides tracking nonces for addresses. Nonces will only increment."},"fullyImplemented":true,"id":7654,"linearizedBaseContracts":[7654],"name":"Nonces","nameLocation":"227:6:45","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7590,"nodeType":"StructuredDocumentation","src":"240:90:45","text":" @dev The nonce used for an `account` is not the expected current nonce."},"errorSelector":"752d88c0","id":7596,"name":"InvalidAccountNonce","nameLocation":"341:19:45","nodeType":"ErrorDefinition","parameters":{"id":7595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7592,"mutability":"mutable","name":"account","nameLocation":"369:7:45","nodeType":"VariableDeclaration","scope":7596,"src":"361:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7591,"name":"address","nodeType":"ElementaryTypeName","src":"361:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7594,"mutability":"mutable","name":"currentNonce","nameLocation":"386:12:45","nodeType":"VariableDeclaration","scope":7596,"src":"378:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7593,"name":"uint256","nodeType":"ElementaryTypeName","src":"378:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"360:39:45"},"src":"335:65:45"},{"constant":false,"id":7600,"mutability":"mutable","name":"_nonces","nameLocation":"450:7:45","nodeType":"VariableDeclaration","scope":7654,"src":"406:51:45","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":7599,"keyName":"account","keyNameLocation":"422:7:45","keyType":{"id":7597,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"406:35:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":7598,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":7612,"nodeType":"Block","src":"607:38:45","statements":[{"expression":{"baseExpression":{"id":7608,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7600,"src":"624:7:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7610,"indexExpression":{"id":7609,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7603,"src":"632:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"624:14:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7607,"id":7611,"nodeType":"Return","src":"617:21:45"}]},"documentation":{"id":7601,"nodeType":"StructuredDocumentation","src":"464:69:45","text":" @dev Returns the next unused nonce for an address."},"functionSelector":"7ecebe00","id":7613,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"547:6:45","nodeType":"FunctionDefinition","parameters":{"id":7604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7603,"mutability":"mutable","name":"owner","nameLocation":"562:5:45","nodeType":"VariableDeclaration","scope":7613,"src":"554:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7602,"name":"address","nodeType":"ElementaryTypeName","src":"554:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"553:15:45"},"returnParameters":{"id":7607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7613,"src":"598:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7605,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"597:9:45"},"scope":7654,"src":"538:107:45","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":7627,"nodeType":"Block","src":"828:326:45","statements":[{"id":7626,"nodeType":"UncheckedBlock","src":"1031:117:45","statements":[{"expression":{"id":7624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1121:16:45","subExpression":{"baseExpression":{"id":7621,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7600,"src":"1121:7:45","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":7623,"indexExpression":{"id":7622,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7616,"src":"1129:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1121:14:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7620,"id":7625,"nodeType":"Return","src":"1114:23:45"}]}]},"documentation":{"id":7614,"nodeType":"StructuredDocumentation","src":"651:103:45","text":" @dev Consumes a nonce.\n Returns the current value and increments nonce."},"id":7628,"implemented":true,"kind":"function","modifiers":[],"name":"_useNonce","nameLocation":"768:9:45","nodeType":"FunctionDefinition","parameters":{"id":7617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7616,"mutability":"mutable","name":"owner","nameLocation":"786:5:45","nodeType":"VariableDeclaration","scope":7628,"src":"778:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7615,"name":"address","nodeType":"ElementaryTypeName","src":"778:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"777:15:45"},"returnParameters":{"id":7620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7619,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7628,"src":"819:7:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7618,"name":"uint256","nodeType":"ElementaryTypeName","src":"819:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"818:9:45"},"scope":7654,"src":"759:395:45","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":7652,"nodeType":"Block","src":"1338:149:45","statements":[{"assignments":[7637],"declarations":[{"constant":false,"id":7637,"mutability":"mutable","name":"current","nameLocation":"1356:7:45","nodeType":"VariableDeclaration","scope":7652,"src":"1348:15:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7636,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7641,"initialValue":{"arguments":[{"id":7639,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7631,"src":"1376:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7638,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7628,"src":"1366:9:45","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":7640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1366:16:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1348:34:45"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7642,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7633,"src":"1396:5:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7643,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"1405:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1396:16:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7651,"nodeType":"IfStatement","src":"1392:89:45","trueBody":{"id":7650,"nodeType":"Block","src":"1414:67:45","statements":[{"errorCall":{"arguments":[{"id":7646,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7631,"src":"1455:5:45","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7647,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7637,"src":"1462:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7645,"name":"InvalidAccountNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7596,"src":"1435:19:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":7648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1435:35:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7649,"nodeType":"RevertStatement","src":"1428:42:45"}]}}]},"documentation":{"id":7629,"nodeType":"StructuredDocumentation","src":"1160:100:45","text":" @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`."},"id":7653,"implemented":true,"kind":"function","modifiers":[],"name":"_useCheckedNonce","nameLocation":"1274:16:45","nodeType":"FunctionDefinition","parameters":{"id":7634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7631,"mutability":"mutable","name":"owner","nameLocation":"1299:5:45","nodeType":"VariableDeclaration","scope":7653,"src":"1291:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7630,"name":"address","nodeType":"ElementaryTypeName","src":"1291:7:45","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7633,"mutability":"mutable","name":"nonce","nameLocation":"1314:5:45","nodeType":"VariableDeclaration","scope":7653,"src":"1306:13:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7632,"name":"uint256","nodeType":"ElementaryTypeName","src":"1306:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1290:30:45"},"returnParameters":{"id":7635,"nodeType":"ParameterList","parameters":[],"src":"1338:0:45"},"scope":7654,"src":"1265:222:45","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":7655,"src":"209:1280:45","usedErrors":[7596],"usedEvents":[]}],"src":"99:1391:45"},"id":45},"@openzeppelin/contracts/utils/Panic.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","exportedSymbols":{"Panic":[7706]},"id":7707,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7656,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:46"},{"abstract":false,"baseContracts":[],"canonicalName":"Panic","contractDependencies":[],"contractKind":"library","documentation":{"id":7657,"nodeType":"StructuredDocumentation","src":"125:489:46","text":" @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n using Panic for uint256;\n // Use any of the declared internal constants\n function foo() { Panic.GENERIC.panic(); }\n // Alternatively\n function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"},"fullyImplemented":true,"id":7706,"linearizedBaseContracts":[7706],"name":"Panic","nameLocation":"665:5:46","nodeType":"ContractDefinition","nodes":[{"constant":true,"documentation":{"id":7658,"nodeType":"StructuredDocumentation","src":"677:36:46","text":"@dev generic / unspecified error"},"id":7661,"mutability":"constant","name":"GENERIC","nameLocation":"744:7:46","nodeType":"VariableDeclaration","scope":7706,"src":"718:40:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7659,"name":"uint256","nodeType":"ElementaryTypeName","src":"718:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783030","id":7660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"754:4:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"internal"},{"constant":true,"documentation":{"id":7662,"nodeType":"StructuredDocumentation","src":"764:37:46","text":"@dev used by the assert() builtin"},"id":7665,"mutability":"constant","name":"ASSERT","nameLocation":"832:6:46","nodeType":"VariableDeclaration","scope":7706,"src":"806:39:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7663,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783031","id":7664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"841:4:46","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"0x01"},"visibility":"internal"},{"constant":true,"documentation":{"id":7666,"nodeType":"StructuredDocumentation","src":"851:41:46","text":"@dev arithmetic underflow or overflow"},"id":7669,"mutability":"constant","name":"UNDER_OVERFLOW","nameLocation":"923:14:46","nodeType":"VariableDeclaration","scope":7706,"src":"897:47:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7667,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783131","id":7668,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"940:4:46","typeDescriptions":{"typeIdentifier":"t_rational_17_by_1","typeString":"int_const 17"},"value":"0x11"},"visibility":"internal"},{"constant":true,"documentation":{"id":7670,"nodeType":"StructuredDocumentation","src":"950:35:46","text":"@dev division or modulo by zero"},"id":7673,"mutability":"constant","name":"DIVISION_BY_ZERO","nameLocation":"1016:16:46","nodeType":"VariableDeclaration","scope":7706,"src":"990:49:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7671,"name":"uint256","nodeType":"ElementaryTypeName","src":"990:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783132","id":7672,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1035:4:46","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"0x12"},"visibility":"internal"},{"constant":true,"documentation":{"id":7674,"nodeType":"StructuredDocumentation","src":"1045:30:46","text":"@dev enum conversion error"},"id":7677,"mutability":"constant","name":"ENUM_CONVERSION_ERROR","nameLocation":"1106:21:46","nodeType":"VariableDeclaration","scope":7706,"src":"1080:54:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7675,"name":"uint256","nodeType":"ElementaryTypeName","src":"1080:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783231","id":7676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1130:4:46","typeDescriptions":{"typeIdentifier":"t_rational_33_by_1","typeString":"int_const 33"},"value":"0x21"},"visibility":"internal"},{"constant":true,"documentation":{"id":7678,"nodeType":"StructuredDocumentation","src":"1140:36:46","text":"@dev invalid encoding in storage"},"id":7681,"mutability":"constant","name":"STORAGE_ENCODING_ERROR","nameLocation":"1207:22:46","nodeType":"VariableDeclaration","scope":7706,"src":"1181:55:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7679,"name":"uint256","nodeType":"ElementaryTypeName","src":"1181:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783232","id":7680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1232:4:46","typeDescriptions":{"typeIdentifier":"t_rational_34_by_1","typeString":"int_const 34"},"value":"0x22"},"visibility":"internal"},{"constant":true,"documentation":{"id":7682,"nodeType":"StructuredDocumentation","src":"1242:24:46","text":"@dev empty array pop"},"id":7685,"mutability":"constant","name":"EMPTY_ARRAY_POP","nameLocation":"1297:15:46","nodeType":"VariableDeclaration","scope":7706,"src":"1271:48:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7683,"name":"uint256","nodeType":"ElementaryTypeName","src":"1271:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783331","id":7684,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1315:4:46","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"0x31"},"visibility":"internal"},{"constant":true,"documentation":{"id":7686,"nodeType":"StructuredDocumentation","src":"1325:35:46","text":"@dev array out of bounds access"},"id":7689,"mutability":"constant","name":"ARRAY_OUT_OF_BOUNDS","nameLocation":"1391:19:46","nodeType":"VariableDeclaration","scope":7706,"src":"1365:52:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7687,"name":"uint256","nodeType":"ElementaryTypeName","src":"1365:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783332","id":7688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1413:4:46","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"0x32"},"visibility":"internal"},{"constant":true,"documentation":{"id":7690,"nodeType":"StructuredDocumentation","src":"1423:65:46","text":"@dev resource error (too large allocation or too large array)"},"id":7693,"mutability":"constant","name":"RESOURCE_ERROR","nameLocation":"1519:14:46","nodeType":"VariableDeclaration","scope":7706,"src":"1493:47:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7691,"name":"uint256","nodeType":"ElementaryTypeName","src":"1493:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783431","id":7692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1536:4:46","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"0x41"},"visibility":"internal"},{"constant":true,"documentation":{"id":7694,"nodeType":"StructuredDocumentation","src":"1546:42:46","text":"@dev calling invalid internal function"},"id":7697,"mutability":"constant","name":"INVALID_INTERNAL_FUNCTION","nameLocation":"1619:25:46","nodeType":"VariableDeclaration","scope":7706,"src":"1593:58:46","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7695,"name":"uint256","nodeType":"ElementaryTypeName","src":"1593:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30783531","id":7696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1647:4:46","typeDescriptions":{"typeIdentifier":"t_rational_81_by_1","typeString":"int_const 81"},"value":"0x51"},"visibility":"internal"},{"body":{"id":7704,"nodeType":"Block","src":"1819:151:46","statements":[{"AST":{"nativeSrc":"1854:110:46","nodeType":"YulBlock","src":"1854:110:46","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1875:4:46","nodeType":"YulLiteral","src":"1875:4:46","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1881:10:46","nodeType":"YulLiteral","src":"1881:10:46","type":"","value":"0x4e487b71"}],"functionName":{"name":"mstore","nativeSrc":"1868:6:46","nodeType":"YulIdentifier","src":"1868:6:46"},"nativeSrc":"1868:24:46","nodeType":"YulFunctionCall","src":"1868:24:46"},"nativeSrc":"1868:24:46","nodeType":"YulExpressionStatement","src":"1868:24:46"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1912:4:46","nodeType":"YulLiteral","src":"1912:4:46","type":"","value":"0x20"},{"name":"code","nativeSrc":"1918:4:46","nodeType":"YulIdentifier","src":"1918:4:46"}],"functionName":{"name":"mstore","nativeSrc":"1905:6:46","nodeType":"YulIdentifier","src":"1905:6:46"},"nativeSrc":"1905:18:46","nodeType":"YulFunctionCall","src":"1905:18:46"},"nativeSrc":"1905:18:46","nodeType":"YulExpressionStatement","src":"1905:18:46"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1943:4:46","nodeType":"YulLiteral","src":"1943:4:46","type":"","value":"0x1c"},{"kind":"number","nativeSrc":"1949:4:46","nodeType":"YulLiteral","src":"1949:4:46","type":"","value":"0x24"}],"functionName":{"name":"revert","nativeSrc":"1936:6:46","nodeType":"YulIdentifier","src":"1936:6:46"},"nativeSrc":"1936:18:46","nodeType":"YulFunctionCall","src":"1936:18:46"},"nativeSrc":"1936:18:46","nodeType":"YulExpressionStatement","src":"1936:18:46"}]},"evmVersion":"cancun","externalReferences":[{"declaration":7700,"isOffset":false,"isSlot":false,"src":"1918:4:46","valueSize":1}],"flags":["memory-safe"],"id":7703,"nodeType":"InlineAssembly","src":"1829:135:46"}]},"documentation":{"id":7698,"nodeType":"StructuredDocumentation","src":"1658:113:46","text":"@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."},"id":7705,"implemented":true,"kind":"function","modifiers":[],"name":"panic","nameLocation":"1785:5:46","nodeType":"FunctionDefinition","parameters":{"id":7701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7700,"mutability":"mutable","name":"code","nameLocation":"1799:4:46","nodeType":"VariableDeclaration","scope":7705,"src":"1791:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1791:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1790:14:46"},"returnParameters":{"id":7702,"nodeType":"ParameterList","parameters":[],"src":"1819:0:46"},"scope":7706,"src":"1776:194:46","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":7707,"src":"657:1315:46","usedErrors":[],"usedEvents":[]}],"src":"99:1874:46"},"id":46},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","exportedSymbols":{"ShortString":[7712],"ShortStrings":[7923],"StorageSlot":[8047]},"id":7924,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7708,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:47"},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":7710,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7924,"sourceUnit":8048,"src":"132:46:47","symbolAliases":[{"foreign":{"id":7709,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8047,"src":"140:11:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"ShortString","id":7712,"name":"ShortString","nameLocation":"353:11:47","nodeType":"UserDefinedValueTypeDefinition","src":"348:28:47","underlyingType":{"id":7711,"name":"bytes32","nodeType":"ElementaryTypeName","src":"368:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"ShortStrings","contractDependencies":[],"contractKind":"library","documentation":{"id":7713,"nodeType":"StructuredDocumentation","src":"378:876:47","text":" @dev This library provides functions to convert short memory strings\n into a `ShortString` type that can be used as an immutable variable.\n Strings of arbitrary length can be optimized using this library if\n they are short enough (up to 31 bytes) by packing them with their\n length (1 byte) in a single EVM word (32 bytes). Additionally, a\n fallback mechanism can be used for every other case.\n Usage example:\n ```solidity\n contract Named {\n using ShortStrings for *;\n ShortString private immutable _name;\n string private _nameFallback;\n constructor(string memory contractName) {\n _name = contractName.toShortStringWithFallback(_nameFallback);\n }\n function name() external view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n }\n ```"},"fullyImplemented":true,"id":7923,"linearizedBaseContracts":[7923],"name":"ShortStrings","nameLocation":"1263:12:47","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":7716,"mutability":"constant","name":"FALLBACK_SENTINEL","nameLocation":"1370:17:47","nodeType":"VariableDeclaration","scope":7923,"src":"1345:111:47","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1345:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030304646","id":7715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1390:66:47","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0x00000000000000000000000000000000000000000000000000000000000000FF"},"visibility":"private"},{"errorSelector":"305a27a9","id":7720,"name":"StringTooLong","nameLocation":"1469:13:47","nodeType":"ErrorDefinition","parameters":{"id":7719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7718,"mutability":"mutable","name":"str","nameLocation":"1490:3:47","nodeType":"VariableDeclaration","scope":7720,"src":"1483:10:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7717,"name":"string","nodeType":"ElementaryTypeName","src":"1483:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1482:12:47"},"src":"1463:32:47"},{"errorSelector":"b3512b0c","id":7722,"name":"InvalidShortString","nameLocation":"1506:18:47","nodeType":"ErrorDefinition","parameters":{"id":7721,"nodeType":"ParameterList","parameters":[],"src":"1524:2:47"},"src":"1500:27:47"},{"body":{"id":7765,"nodeType":"Block","src":"1786:208:47","statements":[{"assignments":[7732],"declarations":[{"constant":false,"id":7732,"mutability":"mutable","name":"bstr","nameLocation":"1809:4:47","nodeType":"VariableDeclaration","scope":7765,"src":"1796:17:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7731,"name":"bytes","nodeType":"ElementaryTypeName","src":"1796:5:47","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7737,"initialValue":{"arguments":[{"id":7735,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7725,"src":"1822:3:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1816:5:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7733,"name":"bytes","nodeType":"ElementaryTypeName","src":"1816:5:47","typeDescriptions":{}}},"id":7736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1816:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1796:30:47"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7738,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7732,"src":"1840:4:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1845:6:47","memberName":"length","nodeType":"MemberAccess","src":"1840:11:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":7740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1854:2:47","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"1840:16:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7747,"nodeType":"IfStatement","src":"1836:72:47","trueBody":{"id":7746,"nodeType":"Block","src":"1858:50:47","statements":[{"errorCall":{"arguments":[{"id":7743,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7725,"src":"1893:3:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7742,"name":"StringTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7720,"src":"1879:13:47","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":7744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:18:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7745,"nodeType":"RevertStatement","src":"1872:25:47"}]}},{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":7756,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7732,"src":"1965:4:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1957:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7754,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1957:7:47","typeDescriptions":{}}},"id":7757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:13:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1949:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7752,"name":"uint256","nodeType":"ElementaryTypeName","src":"1949:7:47","typeDescriptions":{}}},"id":7758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1949:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"expression":{"id":7759,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7732,"src":"1974:4:47","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1979:6:47","memberName":"length","nodeType":"MemberAccess","src":"1974:11:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1949:36:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7751,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1941:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7750,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1941:7:47","typeDescriptions":{}}},"id":7762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1941:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7748,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"1924:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"type(ShortString)"}},"id":7749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1936:4:47","memberName":"wrap","nodeType":"MemberAccess","src":"1924:16:47","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":7763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1924:63:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"functionReturnParameters":7730,"id":7764,"nodeType":"Return","src":"1917:70:47"}]},"documentation":{"id":7723,"nodeType":"StructuredDocumentation","src":"1533:170:47","text":" @dev Encode a string of at most 31 chars into a `ShortString`.\n This will trigger a `StringTooLong` error is the input string is too long."},"id":7766,"implemented":true,"kind":"function","modifiers":[],"name":"toShortString","nameLocation":"1717:13:47","nodeType":"FunctionDefinition","parameters":{"id":7726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7725,"mutability":"mutable","name":"str","nameLocation":"1745:3:47","nodeType":"VariableDeclaration","scope":7766,"src":"1731:17:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7724,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1730:19:47"},"returnParameters":{"id":7730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7766,"src":"1773:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7728,"nodeType":"UserDefinedTypeName","pathNode":{"id":7727,"name":"ShortString","nameLocations":["1773:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"1773:11:47"},"referencedDeclaration":7712,"src":"1773:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"}],"src":"1772:13:47"},"scope":7923,"src":"1708:286:47","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7791,"nodeType":"Block","src":"2152:304:47","statements":[{"assignments":[7776],"declarations":[{"constant":false,"id":7776,"mutability":"mutable","name":"len","nameLocation":"2170:3:47","nodeType":"VariableDeclaration","scope":7791,"src":"2162:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7775,"name":"uint256","nodeType":"ElementaryTypeName","src":"2162:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7780,"initialValue":{"arguments":[{"id":7778,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7770,"src":"2187:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"id":7777,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7824,"src":"2176:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":7779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2176:16:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2162:30:47"},{"assignments":[7782],"declarations":[{"constant":false,"id":7782,"mutability":"mutable","name":"str","nameLocation":"2294:3:47","nodeType":"VariableDeclaration","scope":7791,"src":"2280:17:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7781,"name":"string","nodeType":"ElementaryTypeName","src":"2280:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":7787,"initialValue":{"arguments":[{"hexValue":"3332","id":7785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:2:47","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"id":7784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2300:10:47","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":7783,"name":"string","nodeType":"ElementaryTypeName","src":"2304:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":7786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:14:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2280:34:47"},{"AST":{"nativeSrc":"2349:81:47","nodeType":"YulBlock","src":"2349:81:47","statements":[{"expression":{"arguments":[{"name":"str","nativeSrc":"2370:3:47","nodeType":"YulIdentifier","src":"2370:3:47"},{"name":"len","nativeSrc":"2375:3:47","nodeType":"YulIdentifier","src":"2375:3:47"}],"functionName":{"name":"mstore","nativeSrc":"2363:6:47","nodeType":"YulIdentifier","src":"2363:6:47"},"nativeSrc":"2363:16:47","nodeType":"YulFunctionCall","src":"2363:16:47"},"nativeSrc":"2363:16:47","nodeType":"YulExpressionStatement","src":"2363:16:47"},{"expression":{"arguments":[{"arguments":[{"name":"str","nativeSrc":"2403:3:47","nodeType":"YulIdentifier","src":"2403:3:47"},{"kind":"number","nativeSrc":"2408:4:47","nodeType":"YulLiteral","src":"2408:4:47","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2399:3:47","nodeType":"YulIdentifier","src":"2399:3:47"},"nativeSrc":"2399:14:47","nodeType":"YulFunctionCall","src":"2399:14:47"},{"name":"sstr","nativeSrc":"2415:4:47","nodeType":"YulIdentifier","src":"2415:4:47"}],"functionName":{"name":"mstore","nativeSrc":"2392:6:47","nodeType":"YulIdentifier","src":"2392:6:47"},"nativeSrc":"2392:28:47","nodeType":"YulFunctionCall","src":"2392:28:47"},"nativeSrc":"2392:28:47","nodeType":"YulExpressionStatement","src":"2392:28:47"}]},"evmVersion":"cancun","externalReferences":[{"declaration":7776,"isOffset":false,"isSlot":false,"src":"2375:3:47","valueSize":1},{"declaration":7770,"isOffset":false,"isSlot":false,"src":"2415:4:47","valueSize":1},{"declaration":7782,"isOffset":false,"isSlot":false,"src":"2370:3:47","valueSize":1},{"declaration":7782,"isOffset":false,"isSlot":false,"src":"2403:3:47","valueSize":1}],"flags":["memory-safe"],"id":7788,"nodeType":"InlineAssembly","src":"2324:106:47"},{"expression":{"id":7789,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7782,"src":"2446:3:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":7774,"id":7790,"nodeType":"Return","src":"2439:10:47"}]},"documentation":{"id":7767,"nodeType":"StructuredDocumentation","src":"2000:73:47","text":" @dev Decode a `ShortString` back to a \"normal\" string."},"id":7792,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"2087:8:47","nodeType":"FunctionDefinition","parameters":{"id":7771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7770,"mutability":"mutable","name":"sstr","nameLocation":"2108:4:47","nodeType":"VariableDeclaration","scope":7792,"src":"2096:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7769,"nodeType":"UserDefinedTypeName","pathNode":{"id":7768,"name":"ShortString","nameLocations":["2096:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"2096:11:47"},"referencedDeclaration":7712,"src":"2096:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"}],"src":"2095:18:47"},"returnParameters":{"id":7774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7773,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7792,"src":"2137:13:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7772,"name":"string","nodeType":"ElementaryTypeName","src":"2137:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2136:15:47"},"scope":7923,"src":"2078:378:47","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7823,"nodeType":"Block","src":"2598:175:47","statements":[{"assignments":[7802],"declarations":[{"constant":false,"id":7802,"mutability":"mutable","name":"result","nameLocation":"2616:6:47","nodeType":"VariableDeclaration","scope":7823,"src":"2608:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7801,"name":"uint256","nodeType":"ElementaryTypeName","src":"2608:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7812,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":7807,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7796,"src":"2652:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"expression":{"id":7805,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"2633:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"type(ShortString)"}},"id":7806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2645:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"2633:18:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2633:24:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2625:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7803,"name":"uint256","nodeType":"ElementaryTypeName","src":"2625:7:47","typeDescriptions":{}}},"id":7809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2625:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646","id":7810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2661:4:47","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xFF"},"src":"2625:40:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2608:57:47"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7813,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7802,"src":"2679:6:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":7814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2688:2:47","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"2679:11:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7820,"nodeType":"IfStatement","src":"2675:69:47","trueBody":{"id":7819,"nodeType":"Block","src":"2692:52:47","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7816,"name":"InvalidShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7722,"src":"2713:18:47","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2713:20:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7818,"nodeType":"RevertStatement","src":"2706:27:47"}]}},{"expression":{"id":7821,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7802,"src":"2760:6:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7800,"id":7822,"nodeType":"Return","src":"2753:13:47"}]},"documentation":{"id":7793,"nodeType":"StructuredDocumentation","src":"2462:61:47","text":" @dev Return the length of a `ShortString`."},"id":7824,"implemented":true,"kind":"function","modifiers":[],"name":"byteLength","nameLocation":"2537:10:47","nodeType":"FunctionDefinition","parameters":{"id":7797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7796,"mutability":"mutable","name":"sstr","nameLocation":"2560:4:47","nodeType":"VariableDeclaration","scope":7824,"src":"2548:16:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7795,"nodeType":"UserDefinedTypeName","pathNode":{"id":7794,"name":"ShortString","nameLocations":["2548:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"2548:11:47"},"referencedDeclaration":7712,"src":"2548:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"}],"src":"2547:18:47"},"returnParameters":{"id":7800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7799,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7824,"src":"2589:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7798,"name":"uint256","nodeType":"ElementaryTypeName","src":"2589:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2588:9:47"},"scope":7923,"src":"2528:245:47","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7863,"nodeType":"Block","src":"2996:231:47","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7837,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7827,"src":"3016:5:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3010:5:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7835,"name":"bytes","nodeType":"ElementaryTypeName","src":"3010:5:47","typeDescriptions":{}}},"id":7838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3010:12:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3023:6:47","memberName":"length","nodeType":"MemberAccess","src":"3010:19:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":7840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3032:2:47","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3010:24:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7861,"nodeType":"Block","src":"3094:127:47","statements":[{"expression":{"id":7854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":7850,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7829,"src":"3134:5:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"expression":{"id":7847,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8047,"src":"3108:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$8047_$","typeString":"type(library StorageSlot)"}},"id":7849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3120:13:47","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":8024,"src":"3108:25:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_storage_ptr_$returns$_t_struct$_StringSlot_$7944_storage_ptr_$","typeString":"function (string storage pointer) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":7851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3108:32:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7944_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":7852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3141:5:47","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":7943,"src":"3108:38:47","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7827,"src":"3149:5:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3108:46:47","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":7855,"nodeType":"ExpressionStatement","src":"3108:46:47"},{"expression":{"arguments":[{"id":7858,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7716,"src":"3192:17:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":7856,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"3175:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"type(ShortString)"}},"id":7857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3187:4:47","memberName":"wrap","nodeType":"MemberAccess","src":"3175:16:47","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":7859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3175:35:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"functionReturnParameters":7834,"id":7860,"nodeType":"Return","src":"3168:42:47"}]},"id":7862,"nodeType":"IfStatement","src":"3006:215:47","trueBody":{"id":7846,"nodeType":"Block","src":"3036:52:47","statements":[{"expression":{"arguments":[{"id":7843,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7827,"src":"3071:5:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7842,"name":"toShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7766,"src":"3057:13:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"function (string memory) pure returns (ShortString)"}},"id":7844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3057:20:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"functionReturnParameters":7834,"id":7845,"nodeType":"Return","src":"3050:27:47"}]}}]},"documentation":{"id":7825,"nodeType":"StructuredDocumentation","src":"2779:103:47","text":" @dev Encode a string into a `ShortString`, or write it to storage if it is too long."},"id":7864,"implemented":true,"kind":"function","modifiers":[],"name":"toShortStringWithFallback","nameLocation":"2896:25:47","nodeType":"FunctionDefinition","parameters":{"id":7830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7827,"mutability":"mutable","name":"value","nameLocation":"2936:5:47","nodeType":"VariableDeclaration","scope":7864,"src":"2922:19:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7826,"name":"string","nodeType":"ElementaryTypeName","src":"2922:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":7829,"mutability":"mutable","name":"store","nameLocation":"2958:5:47","nodeType":"VariableDeclaration","scope":7864,"src":"2943:20:47","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7828,"name":"string","nodeType":"ElementaryTypeName","src":"2943:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2921:43:47"},"returnParameters":{"id":7834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7833,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7864,"src":"2983:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7832,"nodeType":"UserDefinedTypeName","pathNode":{"id":7831,"name":"ShortString","nameLocations":["2983:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"2983:11:47"},"referencedDeclaration":7712,"src":"2983:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"}],"src":"2982:13:47"},"scope":7923,"src":"2887:340:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7890,"nodeType":"Block","src":"3467:158:47","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7877,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"3500:5:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"expression":{"id":7875,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"3481:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"type(ShortString)"}},"id":7876,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3493:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"3481:18:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3481:25:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7879,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7716,"src":"3510:17:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3481:46:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7888,"nodeType":"Block","src":"3582:37:47","statements":[{"expression":{"id":7886,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7870,"src":"3603:5:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}},"functionReturnParameters":7874,"id":7887,"nodeType":"Return","src":"3596:12:47"}]},"id":7889,"nodeType":"IfStatement","src":"3477:142:47","trueBody":{"id":7885,"nodeType":"Block","src":"3529:47:47","statements":[{"expression":{"arguments":[{"id":7882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7868,"src":"3559:5:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"id":7881,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7792,"src":"3550:8:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_string_memory_ptr_$","typeString":"function (ShortString) pure returns (string memory)"}},"id":7883,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3550:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":7874,"id":7884,"nodeType":"Return","src":"3543:22:47"}]}}]},"documentation":{"id":7865,"nodeType":"StructuredDocumentation","src":"3233:120:47","text":" @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}."},"id":7891,"implemented":true,"kind":"function","modifiers":[],"name":"toStringWithFallback","nameLocation":"3367:20:47","nodeType":"FunctionDefinition","parameters":{"id":7871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7868,"mutability":"mutable","name":"value","nameLocation":"3400:5:47","nodeType":"VariableDeclaration","scope":7891,"src":"3388:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7867,"nodeType":"UserDefinedTypeName","pathNode":{"id":7866,"name":"ShortString","nameLocations":["3388:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"3388:11:47"},"referencedDeclaration":7712,"src":"3388:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":7870,"mutability":"mutable","name":"store","nameLocation":"3422:5:47","nodeType":"VariableDeclaration","scope":7891,"src":"3407:20:47","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7869,"name":"string","nodeType":"ElementaryTypeName","src":"3407:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3387:41:47"},"returnParameters":{"id":7874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7891,"src":"3452:13:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7872,"name":"string","nodeType":"ElementaryTypeName","src":"3452:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3451:15:47"},"scope":7923,"src":"3358:267:47","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7921,"nodeType":"Block","src":"4105:174:47","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7904,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7895,"src":"4138:5:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"expression":{"id":7902,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"4119:11:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"type(ShortString)"}},"id":7903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4131:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4119:18:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":7905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4119:25:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":7906,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7716,"src":"4148:17:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4119:46:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7919,"nodeType":"Block","src":"4222:51:47","statements":[{"expression":{"expression":{"arguments":[{"id":7915,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7897,"src":"4249:5:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"id":7914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4243:5:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":7913,"name":"bytes","nodeType":"ElementaryTypeName","src":"4243:5:47","typeDescriptions":{}}},"id":7916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4243:12:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes storage pointer"}},"id":7917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4256:6:47","memberName":"length","nodeType":"MemberAccess","src":"4243:19:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7901,"id":7918,"nodeType":"Return","src":"4236:26:47"}]},"id":7920,"nodeType":"IfStatement","src":"4115:158:47","trueBody":{"id":7912,"nodeType":"Block","src":"4167:49:47","statements":[{"expression":{"arguments":[{"id":7909,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7895,"src":"4199:5:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}],"id":7908,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7824,"src":"4188:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7712_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":7910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4188:17:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7901,"id":7911,"nodeType":"Return","src":"4181:24:47"}]}}]},"documentation":{"id":7892,"nodeType":"StructuredDocumentation","src":"3631:364:47","text":" @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n {setWithFallback}.\n WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n actual characters as the UTF-8 encoding of a single character can span over multiple bytes."},"id":7922,"implemented":true,"kind":"function","modifiers":[],"name":"byteLengthWithFallback","nameLocation":"4009:22:47","nodeType":"FunctionDefinition","parameters":{"id":7898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7895,"mutability":"mutable","name":"value","nameLocation":"4044:5:47","nodeType":"VariableDeclaration","scope":7922,"src":"4032:17:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":7894,"nodeType":"UserDefinedTypeName","pathNode":{"id":7893,"name":"ShortString","nameLocations":["4032:11:47"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"4032:11:47"},"referencedDeclaration":7712,"src":"4032:11:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":7897,"mutability":"mutable","name":"store","nameLocation":"4066:5:47","nodeType":"VariableDeclaration","scope":7922,"src":"4051:20:47","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7896,"name":"string","nodeType":"ElementaryTypeName","src":"4051:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4031:41:47"},"returnParameters":{"id":7901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7922,"src":"4096:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7899,"name":"uint256","nodeType":"ElementaryTypeName","src":"4096:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4095:9:47"},"scope":7923,"src":"4000:279:47","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":7924,"src":"1255:3026:47","usedErrors":[7720,7722],"usedEvents":[]}],"src":"106:4176:47"},"id":47},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[8047]},"id":8048,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7925,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:48"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":7926,"nodeType":"StructuredDocumentation","src":"219:1187:48","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":8047,"linearizedBaseContracts":[8047],"name":"StorageSlot","nameLocation":"1415:11:48","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":7929,"members":[{"constant":false,"id":7928,"mutability":"mutable","name":"value","nameLocation":"1470:5:48","nodeType":"VariableDeclaration","scope":7929,"src":"1462:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7927,"name":"address","nodeType":"ElementaryTypeName","src":"1462:7:48","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1440:11:48","nodeType":"StructDefinition","scope":8047,"src":"1433:49:48","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":7932,"members":[{"constant":false,"id":7931,"mutability":"mutable","name":"value","nameLocation":"1522:5:48","nodeType":"VariableDeclaration","scope":7932,"src":"1517:10:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7930,"name":"bool","nodeType":"ElementaryTypeName","src":"1517:4:48","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1495:11:48","nodeType":"StructDefinition","scope":8047,"src":"1488:46:48","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":7935,"members":[{"constant":false,"id":7934,"mutability":"mutable","name":"value","nameLocation":"1577:5:48","nodeType":"VariableDeclaration","scope":7935,"src":"1569:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7933,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1569:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1547:11:48","nodeType":"StructDefinition","scope":8047,"src":"1540:49:48","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":7938,"members":[{"constant":false,"id":7937,"mutability":"mutable","name":"value","nameLocation":"1632:5:48","nodeType":"VariableDeclaration","scope":7938,"src":"1624:13:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7936,"name":"uint256","nodeType":"ElementaryTypeName","src":"1624:7:48","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1602:11:48","nodeType":"StructDefinition","scope":8047,"src":"1595:49:48","visibility":"public"},{"canonicalName":"StorageSlot.Int256Slot","id":7941,"members":[{"constant":false,"id":7940,"mutability":"mutable","name":"value","nameLocation":"1685:5:48","nodeType":"VariableDeclaration","scope":7941,"src":"1678:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7939,"name":"int256","nodeType":"ElementaryTypeName","src":"1678:6:48","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"1657:10:48","nodeType":"StructDefinition","scope":8047,"src":"1650:47:48","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":7944,"members":[{"constant":false,"id":7943,"mutability":"mutable","name":"value","nameLocation":"1738:5:48","nodeType":"VariableDeclaration","scope":7944,"src":"1731:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":7942,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1710:10:48","nodeType":"StructDefinition","scope":8047,"src":"1703:47:48","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":7947,"members":[{"constant":false,"id":7946,"mutability":"mutable","name":"value","nameLocation":"1789:5:48","nodeType":"VariableDeclaration","scope":7947,"src":"1783:11:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":7945,"name":"bytes","nodeType":"ElementaryTypeName","src":"1783:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1763:9:48","nodeType":"StructDefinition","scope":8047,"src":"1756:45:48","visibility":"public"},{"body":{"id":7957,"nodeType":"Block","src":"1983:79:48","statements":[{"AST":{"nativeSrc":"2018:38:48","nodeType":"YulBlock","src":"2018:38:48","statements":[{"nativeSrc":"2032:14:48","nodeType":"YulAssignment","src":"2032:14:48","value":{"name":"slot","nativeSrc":"2042:4:48","nodeType":"YulIdentifier","src":"2042:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"2032:6:48","nodeType":"YulIdentifier","src":"2032:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7954,"isOffset":false,"isSlot":true,"src":"2032:6:48","suffix":"slot","valueSize":1},{"declaration":7950,"isOffset":false,"isSlot":false,"src":"2042:4:48","valueSize":1}],"flags":["memory-safe"],"id":7956,"nodeType":"InlineAssembly","src":"1993:63:48"}]},"documentation":{"id":7948,"nodeType":"StructuredDocumentation","src":"1807:87:48","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":7958,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1908:14:48","nodeType":"FunctionDefinition","parameters":{"id":7951,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7950,"mutability":"mutable","name":"slot","nameLocation":"1931:4:48","nodeType":"VariableDeclaration","scope":7958,"src":"1923:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7949,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1923:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1922:14:48"},"returnParameters":{"id":7955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7954,"mutability":"mutable","name":"r","nameLocation":"1980:1:48","nodeType":"VariableDeclaration","scope":7958,"src":"1960:21:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$7929_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":7953,"nodeType":"UserDefinedTypeName","pathNode":{"id":7952,"name":"AddressSlot","nameLocations":["1960:11:48"],"nodeType":"IdentifierPath","referencedDeclaration":7929,"src":"1960:11:48"},"referencedDeclaration":7929,"src":"1960:11:48","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$7929_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1959:23:48"},"scope":8047,"src":"1899:163:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7968,"nodeType":"Block","src":"2243:79:48","statements":[{"AST":{"nativeSrc":"2278:38:48","nodeType":"YulBlock","src":"2278:38:48","statements":[{"nativeSrc":"2292:14:48","nodeType":"YulAssignment","src":"2292:14:48","value":{"name":"slot","nativeSrc":"2302:4:48","nodeType":"YulIdentifier","src":"2302:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"2292:6:48","nodeType":"YulIdentifier","src":"2292:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7965,"isOffset":false,"isSlot":true,"src":"2292:6:48","suffix":"slot","valueSize":1},{"declaration":7961,"isOffset":false,"isSlot":false,"src":"2302:4:48","valueSize":1}],"flags":["memory-safe"],"id":7967,"nodeType":"InlineAssembly","src":"2253:63:48"}]},"documentation":{"id":7959,"nodeType":"StructuredDocumentation","src":"2068:86:48","text":" @dev Returns a `BooleanSlot` with member `value` located at `slot`."},"id":7969,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"2168:14:48","nodeType":"FunctionDefinition","parameters":{"id":7962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7961,"mutability":"mutable","name":"slot","nameLocation":"2191:4:48","nodeType":"VariableDeclaration","scope":7969,"src":"2183:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7960,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2182:14:48"},"returnParameters":{"id":7966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7965,"mutability":"mutable","name":"r","nameLocation":"2240:1:48","nodeType":"VariableDeclaration","scope":7969,"src":"2220:21:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$7932_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":7964,"nodeType":"UserDefinedTypeName","pathNode":{"id":7963,"name":"BooleanSlot","nameLocations":["2220:11:48"],"nodeType":"IdentifierPath","referencedDeclaration":7932,"src":"2220:11:48"},"referencedDeclaration":7932,"src":"2220:11:48","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$7932_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2219:23:48"},"scope":8047,"src":"2159:163:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7979,"nodeType":"Block","src":"2503:79:48","statements":[{"AST":{"nativeSrc":"2538:38:48","nodeType":"YulBlock","src":"2538:38:48","statements":[{"nativeSrc":"2552:14:48","nodeType":"YulAssignment","src":"2552:14:48","value":{"name":"slot","nativeSrc":"2562:4:48","nodeType":"YulIdentifier","src":"2562:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"2552:6:48","nodeType":"YulIdentifier","src":"2552:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7976,"isOffset":false,"isSlot":true,"src":"2552:6:48","suffix":"slot","valueSize":1},{"declaration":7972,"isOffset":false,"isSlot":false,"src":"2562:4:48","valueSize":1}],"flags":["memory-safe"],"id":7978,"nodeType":"InlineAssembly","src":"2513:63:48"}]},"documentation":{"id":7970,"nodeType":"StructuredDocumentation","src":"2328:86:48","text":" @dev Returns a `Bytes32Slot` with member `value` located at `slot`."},"id":7980,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2428:14:48","nodeType":"FunctionDefinition","parameters":{"id":7973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7972,"mutability":"mutable","name":"slot","nameLocation":"2451:4:48","nodeType":"VariableDeclaration","scope":7980,"src":"2443:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7971,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2443:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2442:14:48"},"returnParameters":{"id":7977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7976,"mutability":"mutable","name":"r","nameLocation":"2500:1:48","nodeType":"VariableDeclaration","scope":7980,"src":"2480:21:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$7935_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":7975,"nodeType":"UserDefinedTypeName","pathNode":{"id":7974,"name":"Bytes32Slot","nameLocations":["2480:11:48"],"nodeType":"IdentifierPath","referencedDeclaration":7935,"src":"2480:11:48"},"referencedDeclaration":7935,"src":"2480:11:48","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$7935_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2479:23:48"},"scope":8047,"src":"2419:163:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7990,"nodeType":"Block","src":"2763:79:48","statements":[{"AST":{"nativeSrc":"2798:38:48","nodeType":"YulBlock","src":"2798:38:48","statements":[{"nativeSrc":"2812:14:48","nodeType":"YulAssignment","src":"2812:14:48","value":{"name":"slot","nativeSrc":"2822:4:48","nodeType":"YulIdentifier","src":"2822:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"2812:6:48","nodeType":"YulIdentifier","src":"2812:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7987,"isOffset":false,"isSlot":true,"src":"2812:6:48","suffix":"slot","valueSize":1},{"declaration":7983,"isOffset":false,"isSlot":false,"src":"2822:4:48","valueSize":1}],"flags":["memory-safe"],"id":7989,"nodeType":"InlineAssembly","src":"2773:63:48"}]},"documentation":{"id":7981,"nodeType":"StructuredDocumentation","src":"2588:86:48","text":" @dev Returns a `Uint256Slot` with member `value` located at `slot`."},"id":7991,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2688:14:48","nodeType":"FunctionDefinition","parameters":{"id":7984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7983,"mutability":"mutable","name":"slot","nameLocation":"2711:4:48","nodeType":"VariableDeclaration","scope":7991,"src":"2703:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2703:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2702:14:48"},"returnParameters":{"id":7988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7987,"mutability":"mutable","name":"r","nameLocation":"2760:1:48","nodeType":"VariableDeclaration","scope":7991,"src":"2740:21:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$7938_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":7986,"nodeType":"UserDefinedTypeName","pathNode":{"id":7985,"name":"Uint256Slot","nameLocations":["2740:11:48"],"nodeType":"IdentifierPath","referencedDeclaration":7938,"src":"2740:11:48"},"referencedDeclaration":7938,"src":"2740:11:48","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$7938_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2739:23:48"},"scope":8047,"src":"2679:163:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8001,"nodeType":"Block","src":"3020:79:48","statements":[{"AST":{"nativeSrc":"3055:38:48","nodeType":"YulBlock","src":"3055:38:48","statements":[{"nativeSrc":"3069:14:48","nodeType":"YulAssignment","src":"3069:14:48","value":{"name":"slot","nativeSrc":"3079:4:48","nodeType":"YulIdentifier","src":"3079:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"3069:6:48","nodeType":"YulIdentifier","src":"3069:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7998,"isOffset":false,"isSlot":true,"src":"3069:6:48","suffix":"slot","valueSize":1},{"declaration":7994,"isOffset":false,"isSlot":false,"src":"3079:4:48","valueSize":1}],"flags":["memory-safe"],"id":8000,"nodeType":"InlineAssembly","src":"3030:63:48"}]},"documentation":{"id":7992,"nodeType":"StructuredDocumentation","src":"2848:85:48","text":" @dev Returns a `Int256Slot` with member `value` located at `slot`."},"id":8002,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"2947:13:48","nodeType":"FunctionDefinition","parameters":{"id":7995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7994,"mutability":"mutable","name":"slot","nameLocation":"2969:4:48","nodeType":"VariableDeclaration","scope":8002,"src":"2961:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7993,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2961:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2960:14:48"},"returnParameters":{"id":7999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7998,"mutability":"mutable","name":"r","nameLocation":"3017:1:48","nodeType":"VariableDeclaration","scope":8002,"src":"2998:20:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7941_storage_ptr","typeString":"struct StorageSlot.Int256Slot"},"typeName":{"id":7997,"nodeType":"UserDefinedTypeName","pathNode":{"id":7996,"name":"Int256Slot","nameLocations":["2998:10:48"],"nodeType":"IdentifierPath","referencedDeclaration":7941,"src":"2998:10:48"},"referencedDeclaration":7941,"src":"2998:10:48","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$7941_storage_ptr","typeString":"struct StorageSlot.Int256Slot"}},"visibility":"internal"}],"src":"2997:22:48"},"scope":8047,"src":"2938:161:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8012,"nodeType":"Block","src":"3277:79:48","statements":[{"AST":{"nativeSrc":"3312:38:48","nodeType":"YulBlock","src":"3312:38:48","statements":[{"nativeSrc":"3326:14:48","nodeType":"YulAssignment","src":"3326:14:48","value":{"name":"slot","nativeSrc":"3336:4:48","nodeType":"YulIdentifier","src":"3336:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"3326:6:48","nodeType":"YulIdentifier","src":"3326:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8009,"isOffset":false,"isSlot":true,"src":"3326:6:48","suffix":"slot","valueSize":1},{"declaration":8005,"isOffset":false,"isSlot":false,"src":"3336:4:48","valueSize":1}],"flags":["memory-safe"],"id":8011,"nodeType":"InlineAssembly","src":"3287:63:48"}]},"documentation":{"id":8003,"nodeType":"StructuredDocumentation","src":"3105:85:48","text":" @dev Returns a `StringSlot` with member `value` located at `slot`."},"id":8013,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3204:13:48","nodeType":"FunctionDefinition","parameters":{"id":8006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8005,"mutability":"mutable","name":"slot","nameLocation":"3226:4:48","nodeType":"VariableDeclaration","scope":8013,"src":"3218:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8004,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3218:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3217:14:48"},"returnParameters":{"id":8010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8009,"mutability":"mutable","name":"r","nameLocation":"3274:1:48","nodeType":"VariableDeclaration","scope":8013,"src":"3255:20:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7944_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":8008,"nodeType":"UserDefinedTypeName","pathNode":{"id":8007,"name":"StringSlot","nameLocations":["3255:10:48"],"nodeType":"IdentifierPath","referencedDeclaration":7944,"src":"3255:10:48"},"referencedDeclaration":7944,"src":"3255:10:48","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7944_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3254:22:48"},"scope":8047,"src":"3195:161:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8023,"nodeType":"Block","src":"3558:85:48","statements":[{"AST":{"nativeSrc":"3593:44:48","nodeType":"YulBlock","src":"3593:44:48","statements":[{"nativeSrc":"3607:20:48","nodeType":"YulAssignment","src":"3607:20:48","value":{"name":"store.slot","nativeSrc":"3617:10:48","nodeType":"YulIdentifier","src":"3617:10:48"},"variableNames":[{"name":"r.slot","nativeSrc":"3607:6:48","nodeType":"YulIdentifier","src":"3607:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8020,"isOffset":false,"isSlot":true,"src":"3607:6:48","suffix":"slot","valueSize":1},{"declaration":8016,"isOffset":false,"isSlot":true,"src":"3617:10:48","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":8022,"nodeType":"InlineAssembly","src":"3568:69:48"}]},"documentation":{"id":8014,"nodeType":"StructuredDocumentation","src":"3362:101:48","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":8024,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3477:13:48","nodeType":"FunctionDefinition","parameters":{"id":8017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8016,"mutability":"mutable","name":"store","nameLocation":"3506:5:48","nodeType":"VariableDeclaration","scope":8024,"src":"3491:20:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":8015,"name":"string","nodeType":"ElementaryTypeName","src":"3491:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3490:22:48"},"returnParameters":{"id":8021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8020,"mutability":"mutable","name":"r","nameLocation":"3555:1:48","nodeType":"VariableDeclaration","scope":8024,"src":"3536:20:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7944_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":8019,"nodeType":"UserDefinedTypeName","pathNode":{"id":8018,"name":"StringSlot","nameLocations":["3536:10:48"],"nodeType":"IdentifierPath","referencedDeclaration":7944,"src":"3536:10:48"},"referencedDeclaration":7944,"src":"3536:10:48","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$7944_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3535:22:48"},"scope":8047,"src":"3468:175:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8034,"nodeType":"Block","src":"3818:79:48","statements":[{"AST":{"nativeSrc":"3853:38:48","nodeType":"YulBlock","src":"3853:38:48","statements":[{"nativeSrc":"3867:14:48","nodeType":"YulAssignment","src":"3867:14:48","value":{"name":"slot","nativeSrc":"3877:4:48","nodeType":"YulIdentifier","src":"3877:4:48"},"variableNames":[{"name":"r.slot","nativeSrc":"3867:6:48","nodeType":"YulIdentifier","src":"3867:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8031,"isOffset":false,"isSlot":true,"src":"3867:6:48","suffix":"slot","valueSize":1},{"declaration":8027,"isOffset":false,"isSlot":false,"src":"3877:4:48","valueSize":1}],"flags":["memory-safe"],"id":8033,"nodeType":"InlineAssembly","src":"3828:63:48"}]},"documentation":{"id":8025,"nodeType":"StructuredDocumentation","src":"3649:84:48","text":" @dev Returns a `BytesSlot` with member `value` located at `slot`."},"id":8035,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3747:12:48","nodeType":"FunctionDefinition","parameters":{"id":8028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8027,"mutability":"mutable","name":"slot","nameLocation":"3768:4:48","nodeType":"VariableDeclaration","scope":8035,"src":"3760:12:48","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":8026,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3760:7:48","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3759:14:48"},"returnParameters":{"id":8032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8031,"mutability":"mutable","name":"r","nameLocation":"3815:1:48","nodeType":"VariableDeclaration","scope":8035,"src":"3797:19:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7947_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":8030,"nodeType":"UserDefinedTypeName","pathNode":{"id":8029,"name":"BytesSlot","nameLocations":["3797:9:48"],"nodeType":"IdentifierPath","referencedDeclaration":7947,"src":"3797:9:48"},"referencedDeclaration":7947,"src":"3797:9:48","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7947_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3796:21:48"},"scope":8047,"src":"3738:159:48","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8045,"nodeType":"Block","src":"4094:85:48","statements":[{"AST":{"nativeSrc":"4129:44:48","nodeType":"YulBlock","src":"4129:44:48","statements":[{"nativeSrc":"4143:20:48","nodeType":"YulAssignment","src":"4143:20:48","value":{"name":"store.slot","nativeSrc":"4153:10:48","nodeType":"YulIdentifier","src":"4153:10:48"},"variableNames":[{"name":"r.slot","nativeSrc":"4143:6:48","nodeType":"YulIdentifier","src":"4143:6:48"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8042,"isOffset":false,"isSlot":true,"src":"4143:6:48","suffix":"slot","valueSize":1},{"declaration":8038,"isOffset":false,"isSlot":true,"src":"4153:10:48","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":8044,"nodeType":"InlineAssembly","src":"4104:69:48"}]},"documentation":{"id":8036,"nodeType":"StructuredDocumentation","src":"3903:99:48","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":8046,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"4016:12:48","nodeType":"FunctionDefinition","parameters":{"id":8039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8038,"mutability":"mutable","name":"store","nameLocation":"4043:5:48","nodeType":"VariableDeclaration","scope":8046,"src":"4029:19:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":8037,"name":"bytes","nodeType":"ElementaryTypeName","src":"4029:5:48","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4028:21:48"},"returnParameters":{"id":8043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8042,"mutability":"mutable","name":"r","nameLocation":"4091:1:48","nodeType":"VariableDeclaration","scope":8046,"src":"4073:19:48","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7947_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":8041,"nodeType":"UserDefinedTypeName","pathNode":{"id":8040,"name":"BytesSlot","nameLocations":["4073:9:48"],"nodeType":"IdentifierPath","referencedDeclaration":7947,"src":"4073:9:48"},"referencedDeclaration":7947,"src":"4073:9:48","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$7947_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"4072:21:48"},"scope":8047,"src":"4007:172:48","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8048,"src":"1407:2774:48","usedErrors":[],"usedEvents":[]}],"src":"193:3989:48"},"id":48},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Math":[11538],"SafeCast":[13303],"SignedMath":[13447],"Strings":[9247]},"id":9248,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8049,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:49"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":8051,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9248,"sourceUnit":11539,"src":"127:37:49","symbolAliases":[{"foreign":{"id":8050,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"135:4:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./math/SafeCast.sol","id":8053,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9248,"sourceUnit":13304,"src":"165:45:49","symbolAliases":[{"foreign":{"id":8052,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"173:8:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"./math/SignedMath.sol","id":8055,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9248,"sourceUnit":13448,"src":"211:49:49","symbolAliases":[{"foreign":{"id":8054,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13447,"src":"219:10:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":8056,"nodeType":"StructuredDocumentation","src":"262:34:49","text":" @dev String operations."},"fullyImplemented":true,"id":9247,"linearizedBaseContracts":[9247],"name":"Strings","nameLocation":"305:7:49","nodeType":"ContractDefinition","nodes":[{"global":false,"id":8058,"libraryName":{"id":8057,"name":"SafeCast","nameLocations":["325:8:49"],"nodeType":"IdentifierPath","referencedDeclaration":13303,"src":"325:8:49"},"nodeType":"UsingForDirective","src":"319:21:49"},{"constant":true,"id":8061,"mutability":"constant","name":"HEX_DIGITS","nameLocation":"371:10:49","nodeType":"VariableDeclaration","scope":9247,"src":"346:56:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":8059,"name":"bytes16","nodeType":"ElementaryTypeName","src":"346:7:49","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":8060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"384:18:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":8064,"mutability":"constant","name":"ADDRESS_LENGTH","nameLocation":"431:14:49","nodeType":"VariableDeclaration","scope":9247,"src":"408:42:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8062,"name":"uint8","nodeType":"ElementaryTypeName","src":"408:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":8063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"448:2:49","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"documentation":{"id":8065,"nodeType":"StructuredDocumentation","src":"457:81:49","text":" @dev The `value` string doesn't fit in the specified `length`."},"errorSelector":"e22e27eb","id":8071,"name":"StringsInsufficientHexLength","nameLocation":"549:28:49","nodeType":"ErrorDefinition","parameters":{"id":8070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8067,"mutability":"mutable","name":"value","nameLocation":"586:5:49","nodeType":"VariableDeclaration","scope":8071,"src":"578:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8066,"name":"uint256","nodeType":"ElementaryTypeName","src":"578:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8069,"mutability":"mutable","name":"length","nameLocation":"601:6:49","nodeType":"VariableDeclaration","scope":8071,"src":"593:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8068,"name":"uint256","nodeType":"ElementaryTypeName","src":"593:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"577:31:49"},"src":"543:66:49"},{"documentation":{"id":8072,"nodeType":"StructuredDocumentation","src":"615:108:49","text":" @dev The string being parsed contains characters that are not in scope of the given base."},"errorSelector":"94e2737e","id":8074,"name":"StringsInvalidChar","nameLocation":"734:18:49","nodeType":"ErrorDefinition","parameters":{"id":8073,"nodeType":"ParameterList","parameters":[],"src":"752:2:49"},"src":"728:27:49"},{"documentation":{"id":8075,"nodeType":"StructuredDocumentation","src":"761:84:49","text":" @dev The string being parsed is not a properly formatted address."},"errorSelector":"1d15ae44","id":8077,"name":"StringsInvalidAddressFormat","nameLocation":"856:27:49","nodeType":"ErrorDefinition","parameters":{"id":8076,"nodeType":"ParameterList","parameters":[],"src":"883:2:49"},"src":"850:36:49"},{"body":{"id":8124,"nodeType":"Block","src":"1058:561:49","statements":[{"id":8123,"nodeType":"UncheckedBlock","src":"1068:545:49","statements":[{"assignments":[8086],"declarations":[{"constant":false,"id":8086,"mutability":"mutable","name":"length","nameLocation":"1100:6:49","nodeType":"VariableDeclaration","scope":8123,"src":"1092:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1092:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8093,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8089,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"1120:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8087,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"1109:4:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":8088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1114:5:49","memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":11310,"src":"1109:10:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1109:17:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1129:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1109:21:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1092:38:49"},{"assignments":[8095],"declarations":[{"constant":false,"id":8095,"mutability":"mutable","name":"buffer","nameLocation":"1158:6:49","nodeType":"VariableDeclaration","scope":8123,"src":"1144:20:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8094,"name":"string","nodeType":"ElementaryTypeName","src":"1144:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":8100,"initialValue":{"arguments":[{"id":8098,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8086,"src":"1178:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1167:10:49","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":8096,"name":"string","nodeType":"ElementaryTypeName","src":"1171:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":8099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1167:18:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"1144:41:49"},{"assignments":[8102],"declarations":[{"constant":false,"id":8102,"mutability":"mutable","name":"ptr","nameLocation":"1207:3:49","nodeType":"VariableDeclaration","scope":8123,"src":"1199:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8101,"name":"uint256","nodeType":"ElementaryTypeName","src":"1199:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8103,"nodeType":"VariableDeclarationStatement","src":"1199:11:49"},{"AST":{"nativeSrc":"1249:67:49","nodeType":"YulBlock","src":"1249:67:49","statements":[{"nativeSrc":"1267:35:49","nodeType":"YulAssignment","src":"1267:35:49","value":{"arguments":[{"name":"buffer","nativeSrc":"1278:6:49","nodeType":"YulIdentifier","src":"1278:6:49"},{"arguments":[{"kind":"number","nativeSrc":"1290:2:49","nodeType":"YulLiteral","src":"1290:2:49","type":"","value":"32"},{"name":"length","nativeSrc":"1294:6:49","nodeType":"YulIdentifier","src":"1294:6:49"}],"functionName":{"name":"add","nativeSrc":"1286:3:49","nodeType":"YulIdentifier","src":"1286:3:49"},"nativeSrc":"1286:15:49","nodeType":"YulFunctionCall","src":"1286:15:49"}],"functionName":{"name":"add","nativeSrc":"1274:3:49","nodeType":"YulIdentifier","src":"1274:3:49"},"nativeSrc":"1274:28:49","nodeType":"YulFunctionCall","src":"1274:28:49"},"variableNames":[{"name":"ptr","nativeSrc":"1267:3:49","nodeType":"YulIdentifier","src":"1267:3:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8095,"isOffset":false,"isSlot":false,"src":"1278:6:49","valueSize":1},{"declaration":8086,"isOffset":false,"isSlot":false,"src":"1294:6:49","valueSize":1},{"declaration":8102,"isOffset":false,"isSlot":false,"src":"1267:3:49","valueSize":1}],"flags":["memory-safe"],"id":8104,"nodeType":"InlineAssembly","src":"1224:92:49"},{"body":{"id":8119,"nodeType":"Block","src":"1342:234:49","statements":[{"expression":{"id":8107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"1360:5:49","subExpression":{"id":8106,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8102,"src":"1360:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8108,"nodeType":"ExpressionStatement","src":"1360:5:49"},{"AST":{"nativeSrc":"1408:86:49","nodeType":"YulBlock","src":"1408:86:49","statements":[{"expression":{"arguments":[{"name":"ptr","nativeSrc":"1438:3:49","nodeType":"YulIdentifier","src":"1438:3:49"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1452:5:49","nodeType":"YulIdentifier","src":"1452:5:49"},{"kind":"number","nativeSrc":"1459:2:49","nodeType":"YulLiteral","src":"1459:2:49","type":"","value":"10"}],"functionName":{"name":"mod","nativeSrc":"1448:3:49","nodeType":"YulIdentifier","src":"1448:3:49"},"nativeSrc":"1448:14:49","nodeType":"YulFunctionCall","src":"1448:14:49"},{"name":"HEX_DIGITS","nativeSrc":"1464:10:49","nodeType":"YulIdentifier","src":"1464:10:49"}],"functionName":{"name":"byte","nativeSrc":"1443:4:49","nodeType":"YulIdentifier","src":"1443:4:49"},"nativeSrc":"1443:32:49","nodeType":"YulFunctionCall","src":"1443:32:49"}],"functionName":{"name":"mstore8","nativeSrc":"1430:7:49","nodeType":"YulIdentifier","src":"1430:7:49"},"nativeSrc":"1430:46:49","nodeType":"YulFunctionCall","src":"1430:46:49"},"nativeSrc":"1430:46:49","nodeType":"YulExpressionStatement","src":"1430:46:49"}]},"evmVersion":"cancun","externalReferences":[{"declaration":8061,"isOffset":false,"isSlot":false,"src":"1464:10:49","valueSize":1},{"declaration":8102,"isOffset":false,"isSlot":false,"src":"1438:3:49","valueSize":1},{"declaration":8080,"isOffset":false,"isSlot":false,"src":"1452:5:49","valueSize":1}],"flags":["memory-safe"],"id":8109,"nodeType":"InlineAssembly","src":"1383:111:49"},{"expression":{"id":8112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"1511:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":8111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1520:2:49","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1511:11:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8113,"nodeType":"ExpressionStatement","src":"1511:11:49"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8114,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8080,"src":"1544:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1553:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1544:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8118,"nodeType":"IfStatement","src":"1540:21:49","trueBody":{"id":8117,"nodeType":"Break","src":"1556:5:49"}}]},"condition":{"hexValue":"74727565","id":8105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1336:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":8120,"nodeType":"WhileStatement","src":"1329:247:49"},{"expression":{"id":8121,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8095,"src":"1596:6:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8084,"id":8122,"nodeType":"Return","src":"1589:13:49"}]}]},"documentation":{"id":8078,"nodeType":"StructuredDocumentation","src":"892:90:49","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":8125,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"996:8:49","nodeType":"FunctionDefinition","parameters":{"id":8081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8080,"mutability":"mutable","name":"value","nameLocation":"1013:5:49","nodeType":"VariableDeclaration","scope":8125,"src":"1005:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8079,"name":"uint256","nodeType":"ElementaryTypeName","src":"1005:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1004:15:49"},"returnParameters":{"id":8084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8125,"src":"1043:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8082,"name":"string","nodeType":"ElementaryTypeName","src":"1043:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1042:15:49"},"scope":9247,"src":"987:632:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8150,"nodeType":"Block","src":"1795:92:49","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8136,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8128,"src":"1826:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1834:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1826:9:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"","id":8140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1844:2:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"id":8141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1826:20:49","trueExpression":{"hexValue":"2d","id":8139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1838:3:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"},"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"arguments":[{"id":8145,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8128,"src":"1872:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":8143,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13447,"src":"1857:10:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SignedMath_$13447_$","typeString":"type(library SignedMath)"}},"id":8144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1868:3:49","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":13446,"src":"1857:14:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$","typeString":"function (int256) pure returns (uint256)"}},"id":8146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1857:21:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8142,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8125,"src":"1848:8:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":8147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":8134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1812:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":8133,"name":"string","nodeType":"ElementaryTypeName","src":"1812:6:49","typeDescriptions":{}}},"id":8135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1819:6:49","memberName":"concat","nodeType":"MemberAccess","src":"1812:13:49","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":8148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1812:68:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8132,"id":8149,"nodeType":"Return","src":"1805:75:49"}]},"documentation":{"id":8126,"nodeType":"StructuredDocumentation","src":"1625:89:49","text":" @dev Converts a `int256` to its ASCII `string` decimal representation."},"id":8151,"implemented":true,"kind":"function","modifiers":[],"name":"toStringSigned","nameLocation":"1728:14:49","nodeType":"FunctionDefinition","parameters":{"id":8129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8128,"mutability":"mutable","name":"value","nameLocation":"1750:5:49","nodeType":"VariableDeclaration","scope":8151,"src":"1743:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8127,"name":"int256","nodeType":"ElementaryTypeName","src":"1743:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1742:14:49"},"returnParameters":{"id":8132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8131,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8151,"src":"1780:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8130,"name":"string","nodeType":"ElementaryTypeName","src":"1780:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1779:15:49"},"scope":9247,"src":"1719:168:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8170,"nodeType":"Block","src":"2066:100:49","statements":[{"id":8169,"nodeType":"UncheckedBlock","src":"2076:84:49","statements":[{"expression":{"arguments":[{"id":8160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8154,"src":"2119:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8163,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8154,"src":"2138:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8161,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"2126:4:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":8162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2131:6:49","memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":11481,"src":"2126:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":8164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2126:18:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2147:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2126:22:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8159,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[8171,8254,8274],"referencedDeclaration":8254,"src":"2107:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":8167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2107:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8158,"id":8168,"nodeType":"Return","src":"2100:49:49"}]}]},"documentation":{"id":8152,"nodeType":"StructuredDocumentation","src":"1893:94:49","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":8171,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2001:11:49","nodeType":"FunctionDefinition","parameters":{"id":8155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8154,"mutability":"mutable","name":"value","nameLocation":"2021:5:49","nodeType":"VariableDeclaration","scope":8171,"src":"2013:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2013:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2012:15:49"},"returnParameters":{"id":8158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8171,"src":"2051:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8156,"name":"string","nodeType":"ElementaryTypeName","src":"2051:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2050:15:49"},"scope":9247,"src":"1992:174:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8253,"nodeType":"Block","src":"2379:435:49","statements":[{"assignments":[8182],"declarations":[{"constant":false,"id":8182,"mutability":"mutable","name":"localValue","nameLocation":"2397:10:49","nodeType":"VariableDeclaration","scope":8253,"src":"2389:18:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8181,"name":"uint256","nodeType":"ElementaryTypeName","src":"2389:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8184,"initialValue":{"id":8183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8174,"src":"2410:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2389:26:49"},{"assignments":[8186],"declarations":[{"constant":false,"id":8186,"mutability":"mutable","name":"buffer","nameLocation":"2438:6:49","nodeType":"VariableDeclaration","scope":8253,"src":"2425:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8185,"name":"bytes","nodeType":"ElementaryTypeName","src":"2425:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8195,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2457:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8190,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"2461:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2457:10:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":8192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2470:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2457:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2447:9:49","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":8187,"name":"bytes","nodeType":"ElementaryTypeName","src":"2451:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":8194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2447:25:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2425:47:49"},{"expression":{"id":8200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8196,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8186,"src":"2482:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8198,"indexExpression":{"hexValue":"30","id":8197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2489:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2482:9:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":8199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2494:3:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"2482:15:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8201,"nodeType":"ExpressionStatement","src":"2482:15:49"},{"expression":{"id":8206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8202,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8186,"src":"2507:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8204,"indexExpression":{"hexValue":"31","id":8203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2514:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2507:9:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":8205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2519:3:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"2507:15:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8207,"nodeType":"ExpressionStatement","src":"2507:15:49"},{"body":{"id":8236,"nodeType":"Block","src":"2577:95:49","statements":[{"expression":{"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8222,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8186,"src":"2591:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8224,"indexExpression":{"id":8223,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"2598:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2591:9:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":8225,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8061,"src":"2603:10:49","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":8229,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8226,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"2614:10:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":8227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2627:3:49","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"2614:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2603:28:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2591:40:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8231,"nodeType":"ExpressionStatement","src":"2591:40:49"},{"expression":{"id":8234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8232,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"2645:10:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":8233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2660:1:49","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2645:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8235,"nodeType":"ExpressionStatement","src":"2645:16:49"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8216,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"2565:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":8217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2569:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2565:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8237,"initializationExpression":{"assignments":[8209],"declarations":[{"constant":false,"id":8209,"mutability":"mutable","name":"i","nameLocation":"2545:1:49","nodeType":"VariableDeclaration","scope":8237,"src":"2537:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8208,"name":"uint256","nodeType":"ElementaryTypeName","src":"2537:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8215,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2549:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8211,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"2553:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2549:10:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2562:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2549:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2537:26:49"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":8220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"2572:3:49","subExpression":{"id":8219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8209,"src":"2574:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8221,"nodeType":"ExpressionStatement","src":"2572:3:49"},"nodeType":"ForStatement","src":"2532:140:49"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8238,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8182,"src":"2685:10:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":8239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2699:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2685:15:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8247,"nodeType":"IfStatement","src":"2681:96:49","trueBody":{"id":8246,"nodeType":"Block","src":"2702:75:49","statements":[{"errorCall":{"arguments":[{"id":8242,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8174,"src":"2752:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8243,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8176,"src":"2759:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8241,"name":"StringsInsufficientHexLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8071,"src":"2723:28:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":8244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:43:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8245,"nodeType":"RevertStatement","src":"2716:50:49"}]}},{"expression":{"arguments":[{"id":8250,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8186,"src":"2800:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2793:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":8248,"name":"string","nodeType":"ElementaryTypeName","src":"2793:6:49","typeDescriptions":{}}},"id":8251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2793:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8180,"id":8252,"nodeType":"Return","src":"2786:21:49"}]},"documentation":{"id":8172,"nodeType":"StructuredDocumentation","src":"2172:112:49","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":8254,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2298:11:49","nodeType":"FunctionDefinition","parameters":{"id":8177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8174,"mutability":"mutable","name":"value","nameLocation":"2318:5:49","nodeType":"VariableDeclaration","scope":8254,"src":"2310:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8173,"name":"uint256","nodeType":"ElementaryTypeName","src":"2310:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8176,"mutability":"mutable","name":"length","nameLocation":"2333:6:49","nodeType":"VariableDeclaration","scope":8254,"src":"2325:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8175,"name":"uint256","nodeType":"ElementaryTypeName","src":"2325:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2309:31:49"},"returnParameters":{"id":8180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8254,"src":"2364:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8178,"name":"string","nodeType":"ElementaryTypeName","src":"2364:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2363:15:49"},"scope":9247,"src":"2289:525:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8273,"nodeType":"Block","src":"3046:75:49","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":8267,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8257,"src":"3091:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3083:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":8265,"name":"uint160","nodeType":"ElementaryTypeName","src":"3083:7:49","typeDescriptions":{}}},"id":8268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3083:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":8264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3075:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8263,"name":"uint256","nodeType":"ElementaryTypeName","src":"3075:7:49","typeDescriptions":{}}},"id":8269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3075:22:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8270,"name":"ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"3099:14:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":8262,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[8171,8254,8274],"referencedDeclaration":8254,"src":"3063:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":8271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3063:51:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8261,"id":8272,"nodeType":"Return","src":"3056:58:49"}]},"documentation":{"id":8255,"nodeType":"StructuredDocumentation","src":"2820:148:49","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."},"id":8274,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2982:11:49","nodeType":"FunctionDefinition","parameters":{"id":8258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8257,"mutability":"mutable","name":"addr","nameLocation":"3002:4:49","nodeType":"VariableDeclaration","scope":8274,"src":"2994:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8256,"name":"address","nodeType":"ElementaryTypeName","src":"2994:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2993:14:49"},"returnParameters":{"id":8261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8274,"src":"3031:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8259,"name":"string","nodeType":"ElementaryTypeName","src":"3031:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3030:15:49"},"scope":9247,"src":"2973:148:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8338,"nodeType":"Block","src":"3378:642:49","statements":[{"assignments":[8283],"declarations":[{"constant":false,"id":8283,"mutability":"mutable","name":"buffer","nameLocation":"3401:6:49","nodeType":"VariableDeclaration","scope":8338,"src":"3388:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8282,"name":"bytes","nodeType":"ElementaryTypeName","src":"3388:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8290,"initialValue":{"arguments":[{"arguments":[{"id":8287,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"3428:4:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8286,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[8171,8254,8274],"referencedDeclaration":8274,"src":"3416:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$","typeString":"function (address) pure returns (string memory)"}},"id":8288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3416:17:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8285,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3410:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8284,"name":"bytes","nodeType":"ElementaryTypeName","src":"3410:5:49","typeDescriptions":{}}},"id":8289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3410:24:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3388:46:49"},{"assignments":[8292],"declarations":[{"constant":false,"id":8292,"mutability":"mutable","name":"hashValue","nameLocation":"3527:9:49","nodeType":"VariableDeclaration","scope":8338,"src":"3519:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8291,"name":"uint256","nodeType":"ElementaryTypeName","src":"3519:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8293,"nodeType":"VariableDeclarationStatement","src":"3519:17:49"},{"AST":{"nativeSrc":"3571:78:49","nodeType":"YulBlock","src":"3571:78:49","statements":[{"nativeSrc":"3585:54:49","nodeType":"YulAssignment","src":"3585:54:49","value":{"arguments":[{"kind":"number","nativeSrc":"3602:2:49","nodeType":"YulLiteral","src":"3602:2:49","type":"","value":"96"},{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"3620:6:49","nodeType":"YulIdentifier","src":"3620:6:49"},{"kind":"number","nativeSrc":"3628:4:49","nodeType":"YulLiteral","src":"3628:4:49","type":"","value":"0x22"}],"functionName":{"name":"add","nativeSrc":"3616:3:49","nodeType":"YulIdentifier","src":"3616:3:49"},"nativeSrc":"3616:17:49","nodeType":"YulFunctionCall","src":"3616:17:49"},{"kind":"number","nativeSrc":"3635:2:49","nodeType":"YulLiteral","src":"3635:2:49","type":"","value":"40"}],"functionName":{"name":"keccak256","nativeSrc":"3606:9:49","nodeType":"YulIdentifier","src":"3606:9:49"},"nativeSrc":"3606:32:49","nodeType":"YulFunctionCall","src":"3606:32:49"}],"functionName":{"name":"shr","nativeSrc":"3598:3:49","nodeType":"YulIdentifier","src":"3598:3:49"},"nativeSrc":"3598:41:49","nodeType":"YulFunctionCall","src":"3598:41:49"},"variableNames":[{"name":"hashValue","nativeSrc":"3585:9:49","nodeType":"YulIdentifier","src":"3585:9:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8283,"isOffset":false,"isSlot":false,"src":"3620:6:49","valueSize":1},{"declaration":8292,"isOffset":false,"isSlot":false,"src":"3585:9:49","valueSize":1}],"flags":["memory-safe"],"id":8294,"nodeType":"InlineAssembly","src":"3546:103:49"},{"body":{"id":8331,"nodeType":"Block","src":"3692:291:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8305,"name":"hashValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"3798:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":8306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3810:3:49","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"3798:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":8308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3816:1:49","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"3798:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":8312,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"3827:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8314,"indexExpression":{"id":8313,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8296,"src":"3834:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3827:9:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":8311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3821:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8310,"name":"uint8","nodeType":"ElementaryTypeName","src":"3821:5:49","typeDescriptions":{}}},"id":8315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3821:16:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3936","id":8316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3840:2:49","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},"src":"3821:21:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3798:44:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8326,"nodeType":"IfStatement","src":"3794:150:49","trueBody":{"id":8325,"nodeType":"Block","src":"3844:100:49","statements":[{"expression":{"id":8323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":8319,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"3912:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8321,"indexExpression":{"id":8320,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8296,"src":"3919:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3912:9:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"^=","rightHandSide":{"hexValue":"30783230","id":8322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3925:4:49","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"0x20"},"src":"3912:17:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8324,"nodeType":"ExpressionStatement","src":"3912:17:49"}]}},{"expression":{"id":8329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8327,"name":"hashValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"3957:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":8328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3971:1:49","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"3957:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8330,"nodeType":"ExpressionStatement","src":"3957:15:49"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8299,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8296,"src":"3680:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":8300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3684:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3680:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8332,"initializationExpression":{"assignments":[8296],"declarations":[{"constant":false,"id":8296,"mutability":"mutable","name":"i","nameLocation":"3672:1:49","nodeType":"VariableDeclaration","scope":8332,"src":"3664:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8295,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8298,"initialValue":{"hexValue":"3431","id":8297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3676:2:49","typeDescriptions":{"typeIdentifier":"t_rational_41_by_1","typeString":"int_const 41"},"value":"41"},"nodeType":"VariableDeclarationStatement","src":"3664:14:49"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":8303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"3687:3:49","subExpression":{"id":8302,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8296,"src":"3689:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8304,"nodeType":"ExpressionStatement","src":"3687:3:49"},"nodeType":"ForStatement","src":"3659:324:49"},{"expression":{"arguments":[{"id":8335,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"4006:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3999:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":8333,"name":"string","nodeType":"ElementaryTypeName","src":"3999:6:49","typeDescriptions":{}}},"id":8336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3999:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":8281,"id":8337,"nodeType":"Return","src":"3992:21:49"}]},"documentation":{"id":8275,"nodeType":"StructuredDocumentation","src":"3127:165:49","text":" @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n representation, according to EIP-55."},"id":8339,"implemented":true,"kind":"function","modifiers":[],"name":"toChecksumHexString","nameLocation":"3306:19:49","nodeType":"FunctionDefinition","parameters":{"id":8278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8277,"mutability":"mutable","name":"addr","nameLocation":"3334:4:49","nodeType":"VariableDeclaration","scope":8339,"src":"3326:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8276,"name":"address","nodeType":"ElementaryTypeName","src":"3326:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3325:14:49"},"returnParameters":{"id":8281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8280,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8339,"src":"3363:13:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8279,"name":"string","nodeType":"ElementaryTypeName","src":"3363:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3362:15:49"},"scope":9247,"src":"3297:723:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8375,"nodeType":"Block","src":"4175:104:49","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":8351,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8342,"src":"4198:1:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4192:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8349,"name":"bytes","nodeType":"ElementaryTypeName","src":"4192:5:49","typeDescriptions":{}}},"id":8352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4192:8:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4201:6:49","memberName":"length","nodeType":"MemberAccess","src":"4192:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":8356,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"4217:1:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8355,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4211:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8354,"name":"bytes","nodeType":"ElementaryTypeName","src":"4211:5:49","typeDescriptions":{}}},"id":8357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4211:8:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4220:6:49","memberName":"length","nodeType":"MemberAccess","src":"4211:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4192:34:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":8372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":8363,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8342,"src":"4246:1:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4240:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8361,"name":"bytes","nodeType":"ElementaryTypeName","src":"4240:5:49","typeDescriptions":{}}},"id":8364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4240:8:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8360,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4230:9:49","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4230:19:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"id":8369,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8344,"src":"4269:1:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4263:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8367,"name":"bytes","nodeType":"ElementaryTypeName","src":"4263:5:49","typeDescriptions":{}}},"id":8370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4263:8:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":8366,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4253:9:49","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":8371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4253:19:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4230:42:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4192:80:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":8348,"id":8374,"nodeType":"Return","src":"4185:87:49"}]},"documentation":{"id":8340,"nodeType":"StructuredDocumentation","src":"4026:66:49","text":" @dev Returns true if the two strings are equal."},"id":8376,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"4106:5:49","nodeType":"FunctionDefinition","parameters":{"id":8345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8342,"mutability":"mutable","name":"a","nameLocation":"4126:1:49","nodeType":"VariableDeclaration","scope":8376,"src":"4112:15:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8341,"name":"string","nodeType":"ElementaryTypeName","src":"4112:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8344,"mutability":"mutable","name":"b","nameLocation":"4143:1:49","nodeType":"VariableDeclaration","scope":8376,"src":"4129:15:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8343,"name":"string","nodeType":"ElementaryTypeName","src":"4129:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4111:34:49"},"returnParameters":{"id":8348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8347,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8376,"src":"4169:4:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8346,"name":"bool","nodeType":"ElementaryTypeName","src":"4169:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4168:6:49"},"scope":9247,"src":"4097:182:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8394,"nodeType":"Block","src":"4576:64:49","statements":[{"expression":{"arguments":[{"id":8385,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"4603:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4610:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8389,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"4619:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4613:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8387,"name":"bytes","nodeType":"ElementaryTypeName","src":"4613:5:49","typeDescriptions":{}}},"id":8390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4613:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4626:6:49","memberName":"length","nodeType":"MemberAccess","src":"4613:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8384,"name":"parseUint","nodeType":"Identifier","overloadedDeclarations":[8395,8426],"referencedDeclaration":8426,"src":"4593:9:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (uint256)"}},"id":8392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4593:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8383,"id":8393,"nodeType":"Return","src":"4586:47:49"}]},"documentation":{"id":8377,"nodeType":"StructuredDocumentation","src":"4285:214:49","text":" @dev Parse a decimal string and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"},"id":8395,"implemented":true,"kind":"function","modifiers":[],"name":"parseUint","nameLocation":"4513:9:49","nodeType":"FunctionDefinition","parameters":{"id":8380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8379,"mutability":"mutable","name":"input","nameLocation":"4537:5:49","nodeType":"VariableDeclaration","scope":8395,"src":"4523:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8378,"name":"string","nodeType":"ElementaryTypeName","src":"4523:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4522:21:49"},"returnParameters":{"id":8383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8382,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8395,"src":"4567:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8381,"name":"uint256","nodeType":"ElementaryTypeName","src":"4567:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4566:9:49"},"scope":9247,"src":"4504:136:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8425,"nodeType":"Block","src":"5038:153:49","statements":[{"assignments":[8408,8410],"declarations":[{"constant":false,"id":8408,"mutability":"mutable","name":"success","nameLocation":"5054:7:49","nodeType":"VariableDeclaration","scope":8425,"src":"5049:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8407,"name":"bool","nodeType":"ElementaryTypeName","src":"5049:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8410,"mutability":"mutable","name":"value","nameLocation":"5071:5:49","nodeType":"VariableDeclaration","scope":8425,"src":"5063:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8409,"name":"uint256","nodeType":"ElementaryTypeName","src":"5063:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8416,"initialValue":{"arguments":[{"id":8412,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8398,"src":"5093:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8413,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8400,"src":"5100:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8414,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"5107:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8411,"name":"tryParseUint","nodeType":"Identifier","overloadedDeclarations":[8447,8484],"referencedDeclaration":8484,"src":"5080:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5080:31:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5048:63:49"},{"condition":{"id":8418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5125:8:49","subExpression":{"id":8417,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8408,"src":"5126:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8422,"nodeType":"IfStatement","src":"5121:41:49","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8419,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8074,"src":"5142:18:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5142:20:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8421,"nodeType":"RevertStatement","src":"5135:27:49"}},{"expression":{"id":8423,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8410,"src":"5179:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8406,"id":8424,"nodeType":"Return","src":"5172:12:49"}]},"documentation":{"id":8396,"nodeType":"StructuredDocumentation","src":"4646:287:49","text":" @dev Variant of {parseUint} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"},"id":8426,"implemented":true,"kind":"function","modifiers":[],"name":"parseUint","nameLocation":"4947:9:49","nodeType":"FunctionDefinition","parameters":{"id":8403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8398,"mutability":"mutable","name":"input","nameLocation":"4971:5:49","nodeType":"VariableDeclaration","scope":8426,"src":"4957:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8397,"name":"string","nodeType":"ElementaryTypeName","src":"4957:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8400,"mutability":"mutable","name":"begin","nameLocation":"4986:5:49","nodeType":"VariableDeclaration","scope":8426,"src":"4978:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8399,"name":"uint256","nodeType":"ElementaryTypeName","src":"4978:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8402,"mutability":"mutable","name":"end","nameLocation":"5001:3:49","nodeType":"VariableDeclaration","scope":8426,"src":"4993:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8401,"name":"uint256","nodeType":"ElementaryTypeName","src":"4993:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4956:49:49"},"returnParameters":{"id":8406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8426,"src":"5029:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8404,"name":"uint256","nodeType":"ElementaryTypeName","src":"5029:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5028:9:49"},"scope":9247,"src":"4938:253:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8446,"nodeType":"Block","src":"5512:83:49","statements":[{"expression":{"arguments":[{"id":8437,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"5558:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5565:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8441,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"5574:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5568:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8439,"name":"bytes","nodeType":"ElementaryTypeName","src":"5568:5:49","typeDescriptions":{}}},"id":8442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5568:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5581:6:49","memberName":"length","nodeType":"MemberAccess","src":"5568:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8436,"name":"_tryParseUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8554,"src":"5529:28:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5529:59:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8435,"id":8445,"nodeType":"Return","src":"5522:66:49"}]},"documentation":{"id":8427,"nodeType":"StructuredDocumentation","src":"5197:215:49","text":" @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":8447,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseUint","nameLocation":"5426:12:49","nodeType":"FunctionDefinition","parameters":{"id":8430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8429,"mutability":"mutable","name":"input","nameLocation":"5453:5:49","nodeType":"VariableDeclaration","scope":8447,"src":"5439:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8428,"name":"string","nodeType":"ElementaryTypeName","src":"5439:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5438:21:49"},"returnParameters":{"id":8435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8432,"mutability":"mutable","name":"success","nameLocation":"5488:7:49","nodeType":"VariableDeclaration","scope":8447,"src":"5483:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8431,"name":"bool","nodeType":"ElementaryTypeName","src":"5483:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8434,"mutability":"mutable","name":"value","nameLocation":"5505:5:49","nodeType":"VariableDeclaration","scope":8447,"src":"5497:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8433,"name":"uint256","nodeType":"ElementaryTypeName","src":"5497:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5482:29:49"},"scope":9247,"src":"5417:178:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8483,"nodeType":"Block","src":"5997:144:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8461,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"6011:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8464,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8450,"src":"6023:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6017:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8462,"name":"bytes","nodeType":"ElementaryTypeName","src":"6017:5:49","typeDescriptions":{}}},"id":8465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6017:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6030:6:49","memberName":"length","nodeType":"MemberAccess","src":"6017:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6011:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8468,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8452,"src":"6040:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":8469,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"6048:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6040:11:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6011:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8476,"nodeType":"IfStatement","src":"6007:63:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6061:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6068:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8474,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6060:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8460,"id":8475,"nodeType":"Return","src":"6053:17:49"}},{"expression":{"arguments":[{"id":8478,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8450,"src":"6116:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8479,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8452,"src":"6123:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8480,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"6130:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8477,"name":"_tryParseUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8554,"src":"6087:28:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6087:47:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8460,"id":8482,"nodeType":"Return","src":"6080:54:49"}]},"documentation":{"id":8448,"nodeType":"StructuredDocumentation","src":"5601:238:49","text":" @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":8484,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseUint","nameLocation":"5853:12:49","nodeType":"FunctionDefinition","parameters":{"id":8455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8450,"mutability":"mutable","name":"input","nameLocation":"5889:5:49","nodeType":"VariableDeclaration","scope":8484,"src":"5875:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8449,"name":"string","nodeType":"ElementaryTypeName","src":"5875:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8452,"mutability":"mutable","name":"begin","nameLocation":"5912:5:49","nodeType":"VariableDeclaration","scope":8484,"src":"5904:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8451,"name":"uint256","nodeType":"ElementaryTypeName","src":"5904:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8454,"mutability":"mutable","name":"end","nameLocation":"5935:3:49","nodeType":"VariableDeclaration","scope":8484,"src":"5927:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8453,"name":"uint256","nodeType":"ElementaryTypeName","src":"5927:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5865:79:49"},"returnParameters":{"id":8460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8457,"mutability":"mutable","name":"success","nameLocation":"5973:7:49","nodeType":"VariableDeclaration","scope":8484,"src":"5968:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8456,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8459,"mutability":"mutable","name":"value","nameLocation":"5990:5:49","nodeType":"VariableDeclaration","scope":8484,"src":"5982:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8458,"name":"uint256","nodeType":"ElementaryTypeName","src":"5982:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5967:29:49"},"scope":9247,"src":"5844:297:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8553,"nodeType":"Block","src":"6521:347:49","statements":[{"assignments":[8499],"declarations":[{"constant":false,"id":8499,"mutability":"mutable","name":"buffer","nameLocation":"6544:6:49","nodeType":"VariableDeclaration","scope":8553,"src":"6531:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8498,"name":"bytes","nodeType":"ElementaryTypeName","src":"6531:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8504,"initialValue":{"arguments":[{"id":8502,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8487,"src":"6559:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6553:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8500,"name":"bytes","nodeType":"ElementaryTypeName","src":"6553:5:49","typeDescriptions":{}}},"id":8503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6553:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6531:34:49"},{"assignments":[8506],"declarations":[{"constant":false,"id":8506,"mutability":"mutable","name":"result","nameLocation":"6584:6:49","nodeType":"VariableDeclaration","scope":8553,"src":"6576:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8505,"name":"uint256","nodeType":"ElementaryTypeName","src":"6576:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8508,"initialValue":{"hexValue":"30","id":8507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6593:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6576:18:49"},{"body":{"id":8547,"nodeType":"Block","src":"6642:189:49","statements":[{"assignments":[8520],"declarations":[{"constant":false,"id":8520,"mutability":"mutable","name":"chr","nameLocation":"6662:3:49","nodeType":"VariableDeclaration","scope":8547,"src":"6656:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8519,"name":"uint8","nodeType":"ElementaryTypeName","src":"6656:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":8530,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":8525,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8499,"src":"6711:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":8526,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"6719:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8524,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9246,"src":"6688:22:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":8527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6688:33:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6681:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8522,"name":"bytes1","nodeType":"ElementaryTypeName","src":"6681:6:49","typeDescriptions":{}}},"id":8528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6681:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":8521,"name":"_tryParseChr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9234,"src":"6668:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$","typeString":"function (bytes1) pure returns (uint8)"}},"id":8529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6668:55:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"6656:67:49"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8531,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8520,"src":"6741:3:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"39","id":8532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6747:1:49","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"6741:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8538,"nodeType":"IfStatement","src":"6737:30:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6758:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6765:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8536,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6757:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8497,"id":8537,"nodeType":"Return","src":"6750:17:49"}},{"expression":{"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8539,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"6781:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"3130","id":8540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6791:2:49","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"6781:12:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8542,"nodeType":"ExpressionStatement","src":"6781:12:49"},{"expression":{"id":8545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8543,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"6807:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8544,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8520,"src":"6817:3:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6807:13:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8546,"nodeType":"ExpressionStatement","src":"6807:13:49"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8513,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"6628:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8514,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8491,"src":"6632:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6628:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8548,"initializationExpression":{"assignments":[8510],"declarations":[{"constant":false,"id":8510,"mutability":"mutable","name":"i","nameLocation":"6617:1:49","nodeType":"VariableDeclaration","scope":8548,"src":"6609:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8509,"name":"uint256","nodeType":"ElementaryTypeName","src":"6609:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8512,"initialValue":{"id":8511,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8489,"src":"6621:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6609:17:49"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6637:3:49","subExpression":{"id":8516,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"6639:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8518,"nodeType":"ExpressionStatement","src":"6637:3:49"},"nodeType":"ForStatement","src":"6604:227:49"},{"expression":{"components":[{"hexValue":"74727565","id":8549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6848:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":8550,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"6854:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8551,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6847:14:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8497,"id":8552,"nodeType":"Return","src":"6840:21:49"}]},"documentation":{"id":8485,"nodeType":"StructuredDocumentation","src":"6147:201:49","text":" @dev Implementation of {tryParseUint} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":8554,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseUintUncheckedBounds","nameLocation":"6362:28:49","nodeType":"FunctionDefinition","parameters":{"id":8492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8487,"mutability":"mutable","name":"input","nameLocation":"6414:5:49","nodeType":"VariableDeclaration","scope":8554,"src":"6400:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8486,"name":"string","nodeType":"ElementaryTypeName","src":"6400:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8489,"mutability":"mutable","name":"begin","nameLocation":"6437:5:49","nodeType":"VariableDeclaration","scope":8554,"src":"6429:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8488,"name":"uint256","nodeType":"ElementaryTypeName","src":"6429:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8491,"mutability":"mutable","name":"end","nameLocation":"6460:3:49","nodeType":"VariableDeclaration","scope":8554,"src":"6452:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8490,"name":"uint256","nodeType":"ElementaryTypeName","src":"6452:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6390:79:49"},"returnParameters":{"id":8497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8494,"mutability":"mutable","name":"success","nameLocation":"6497:7:49","nodeType":"VariableDeclaration","scope":8554,"src":"6492:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8493,"name":"bool","nodeType":"ElementaryTypeName","src":"6492:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8496,"mutability":"mutable","name":"value","nameLocation":"6514:5:49","nodeType":"VariableDeclaration","scope":8554,"src":"6506:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8495,"name":"uint256","nodeType":"ElementaryTypeName","src":"6506:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6491:29:49"},"scope":9247,"src":"6353:515:49","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":8572,"nodeType":"Block","src":"7165:63:49","statements":[{"expression":{"arguments":[{"id":8563,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8557,"src":"7191:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7198:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8567,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8557,"src":"7207:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7201:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8565,"name":"bytes","nodeType":"ElementaryTypeName","src":"7201:5:49","typeDescriptions":{}}},"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7201:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7214:6:49","memberName":"length","nodeType":"MemberAccess","src":"7201:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8562,"name":"parseInt","nodeType":"Identifier","overloadedDeclarations":[8573,8604],"referencedDeclaration":8604,"src":"7182:8:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (int256)"}},"id":8570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7182:39:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8561,"id":8571,"nodeType":"Return","src":"7175:46:49"}]},"documentation":{"id":8555,"nodeType":"StructuredDocumentation","src":"6874:216:49","text":" @dev Parse a decimal string and returns the value as a `int256`.\n Requirements:\n - The string must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."},"id":8573,"implemented":true,"kind":"function","modifiers":[],"name":"parseInt","nameLocation":"7104:8:49","nodeType":"FunctionDefinition","parameters":{"id":8558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8557,"mutability":"mutable","name":"input","nameLocation":"7127:5:49","nodeType":"VariableDeclaration","scope":8573,"src":"7113:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8556,"name":"string","nodeType":"ElementaryTypeName","src":"7113:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7112:21:49"},"returnParameters":{"id":8561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8573,"src":"7157:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8559,"name":"int256","nodeType":"ElementaryTypeName","src":"7157:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7156:8:49"},"scope":9247,"src":"7095:133:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8603,"nodeType":"Block","src":"7633:151:49","statements":[{"assignments":[8586,8588],"declarations":[{"constant":false,"id":8586,"mutability":"mutable","name":"success","nameLocation":"7649:7:49","nodeType":"VariableDeclaration","scope":8603,"src":"7644:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8585,"name":"bool","nodeType":"ElementaryTypeName","src":"7644:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8588,"mutability":"mutable","name":"value","nameLocation":"7665:5:49","nodeType":"VariableDeclaration","scope":8603,"src":"7658:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8587,"name":"int256","nodeType":"ElementaryTypeName","src":"7658:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8594,"initialValue":{"arguments":[{"id":8590,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8576,"src":"7686:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8591,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8578,"src":"7693:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8592,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8580,"src":"7700:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8589,"name":"tryParseInt","nodeType":"Identifier","overloadedDeclarations":[8625,8667],"referencedDeclaration":8667,"src":"7674:11:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":8593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7674:30:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"nodeType":"VariableDeclarationStatement","src":"7643:61:49"},{"condition":{"id":8596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7718:8:49","subExpression":{"id":8595,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8586,"src":"7719:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8600,"nodeType":"IfStatement","src":"7714:41:49","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8597,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8074,"src":"7735:18:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7735:20:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8599,"nodeType":"RevertStatement","src":"7728:27:49"}},{"expression":{"id":8601,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8588,"src":"7772:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8584,"id":8602,"nodeType":"Return","src":"7765:12:49"}]},"documentation":{"id":8574,"nodeType":"StructuredDocumentation","src":"7234:296:49","text":" @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."},"id":8604,"implemented":true,"kind":"function","modifiers":[],"name":"parseInt","nameLocation":"7544:8:49","nodeType":"FunctionDefinition","parameters":{"id":8581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8576,"mutability":"mutable","name":"input","nameLocation":"7567:5:49","nodeType":"VariableDeclaration","scope":8604,"src":"7553:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8575,"name":"string","nodeType":"ElementaryTypeName","src":"7553:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8578,"mutability":"mutable","name":"begin","nameLocation":"7582:5:49","nodeType":"VariableDeclaration","scope":8604,"src":"7574:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8577,"name":"uint256","nodeType":"ElementaryTypeName","src":"7574:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8580,"mutability":"mutable","name":"end","nameLocation":"7597:3:49","nodeType":"VariableDeclaration","scope":8604,"src":"7589:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8579,"name":"uint256","nodeType":"ElementaryTypeName","src":"7589:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7552:49:49"},"returnParameters":{"id":8584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8604,"src":"7625:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8582,"name":"int256","nodeType":"ElementaryTypeName","src":"7625:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7624:8:49"},"scope":9247,"src":"7535:249:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8624,"nodeType":"Block","src":"8175:82:49","statements":[{"expression":{"arguments":[{"id":8615,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8607,"src":"8220:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8227:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8619,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8607,"src":"8236:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8230:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8617,"name":"bytes","nodeType":"ElementaryTypeName","src":"8230:5:49","typeDescriptions":{}}},"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8230:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8243:6:49","memberName":"length","nodeType":"MemberAccess","src":"8230:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8614,"name":"_tryParseIntUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8788,"src":"8192:27:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":8622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8192:58:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":8613,"id":8623,"nodeType":"Return","src":"8185:65:49"}]},"documentation":{"id":8605,"nodeType":"StructuredDocumentation","src":"7790:287:49","text":" @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."},"id":8625,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseInt","nameLocation":"8091:11:49","nodeType":"FunctionDefinition","parameters":{"id":8608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8607,"mutability":"mutable","name":"input","nameLocation":"8117:5:49","nodeType":"VariableDeclaration","scope":8625,"src":"8103:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8606,"name":"string","nodeType":"ElementaryTypeName","src":"8103:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"8102:21:49"},"returnParameters":{"id":8613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8610,"mutability":"mutable","name":"success","nameLocation":"8152:7:49","nodeType":"VariableDeclaration","scope":8625,"src":"8147:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8609,"name":"bool","nodeType":"ElementaryTypeName","src":"8147:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8612,"mutability":"mutable","name":"value","nameLocation":"8168:5:49","nodeType":"VariableDeclaration","scope":8625,"src":"8161:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8611,"name":"int256","nodeType":"ElementaryTypeName","src":"8161:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"8146:28:49"},"scope":9247,"src":"8082:175:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"constant":true,"id":8630,"mutability":"constant","name":"ABS_MIN_INT256","nameLocation":"8288:14:49","nodeType":"VariableDeclaration","scope":9247,"src":"8263:50:49","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8626,"name":"uint256","nodeType":"ElementaryTypeName","src":"8263:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"},"id":8629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8305:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323535","id":8628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8310:3:49","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"8305:8:49","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1","typeString":"int_const 5789...(69 digits omitted)...9968"}},"visibility":"private"},{"body":{"id":8666,"nodeType":"Block","src":"8779:143:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8644,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"8793:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8647,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"8805:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8799:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8645,"name":"bytes","nodeType":"ElementaryTypeName","src":"8799:5:49","typeDescriptions":{}}},"id":8648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8799:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8812:6:49","memberName":"length","nodeType":"MemberAccess","src":"8799:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8793:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8651,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8635,"src":"8822:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":8652,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"8830:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8822:11:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8793:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8659,"nodeType":"IfStatement","src":"8789:63:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8843:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8850:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8657,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8842:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8643,"id":8658,"nodeType":"Return","src":"8835:17:49"}},{"expression":{"arguments":[{"id":8661,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8633,"src":"8897:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8662,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8635,"src":"8904:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8663,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"8911:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8660,"name":"_tryParseIntUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8788,"src":"8869:27:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,int256)"}},"id":8664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8869:46:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":8643,"id":8665,"nodeType":"Return","src":"8862:53:49"}]},"documentation":{"id":8631,"nodeType":"StructuredDocumentation","src":"8320:303:49","text":" @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character or if the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."},"id":8667,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseInt","nameLocation":"8637:11:49","nodeType":"FunctionDefinition","parameters":{"id":8638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8633,"mutability":"mutable","name":"input","nameLocation":"8672:5:49","nodeType":"VariableDeclaration","scope":8667,"src":"8658:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8632,"name":"string","nodeType":"ElementaryTypeName","src":"8658:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8635,"mutability":"mutable","name":"begin","nameLocation":"8695:5:49","nodeType":"VariableDeclaration","scope":8667,"src":"8687:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8634,"name":"uint256","nodeType":"ElementaryTypeName","src":"8687:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8637,"mutability":"mutable","name":"end","nameLocation":"8718:3:49","nodeType":"VariableDeclaration","scope":8667,"src":"8710:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8636,"name":"uint256","nodeType":"ElementaryTypeName","src":"8710:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8648:79:49"},"returnParameters":{"id":8643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8640,"mutability":"mutable","name":"success","nameLocation":"8756:7:49","nodeType":"VariableDeclaration","scope":8667,"src":"8751:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8639,"name":"bool","nodeType":"ElementaryTypeName","src":"8751:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8642,"mutability":"mutable","name":"value","nameLocation":"8772:5:49","nodeType":"VariableDeclaration","scope":8667,"src":"8765:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8641,"name":"int256","nodeType":"ElementaryTypeName","src":"8765:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"8750:28:49"},"scope":9247,"src":"8628:294:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8787,"nodeType":"Block","src":"9299:812:49","statements":[{"assignments":[8682],"declarations":[{"constant":false,"id":8682,"mutability":"mutable","name":"buffer","nameLocation":"9322:6:49","nodeType":"VariableDeclaration","scope":8787,"src":"9309:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8681,"name":"bytes","nodeType":"ElementaryTypeName","src":"9309:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8687,"initialValue":{"arguments":[{"id":8685,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8670,"src":"9337:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9331:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8683,"name":"bytes","nodeType":"ElementaryTypeName","src":"9331:5:49","typeDescriptions":{}}},"id":8686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9331:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"9309:34:49"},{"assignments":[8689],"declarations":[{"constant":false,"id":8689,"mutability":"mutable","name":"sign","nameLocation":"9407:4:49","nodeType":"VariableDeclaration","scope":8787,"src":"9400:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":8688,"name":"bytes1","nodeType":"ElementaryTypeName","src":"9400:6:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"id":8705,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8690,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8672,"src":"9414:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8691,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8674,"src":"9423:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9414:12:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"arguments":[{"id":8700,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8682,"src":"9471:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":8701,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8672,"src":"9479:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8699,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9246,"src":"9448:22:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":8702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9448:37:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9441:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8697,"name":"bytes1","nodeType":"ElementaryTypeName","src":"9441:6:49","typeDescriptions":{}}},"id":8703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9441:45:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":8704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9414:72:49","trueExpression":{"arguments":[{"hexValue":"30","id":8695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9436:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":8694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9429:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8693,"name":"bytes1","nodeType":"ElementaryTypeName","src":"9429:6:49","typeDescriptions":{}}},"id":8696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9429:9:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"VariableDeclarationStatement","src":"9400:86:49"},{"assignments":[8707],"declarations":[{"constant":false,"id":8707,"mutability":"mutable","name":"positiveSign","nameLocation":"9572:12:49","nodeType":"VariableDeclaration","scope":8787,"src":"9567:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8706,"name":"bool","nodeType":"ElementaryTypeName","src":"9567:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8714,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":8713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8708,"name":"sign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8689,"src":"9587:4:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"2b","id":8711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9602:3:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8","typeString":"literal_string \"+\""},"value":"+"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8","typeString":"literal_string \"+\""}],"id":8710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9595:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8709,"name":"bytes1","nodeType":"ElementaryTypeName","src":"9595:6:49","typeDescriptions":{}}},"id":8712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9595:11:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"9587:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"9567:39:49"},{"assignments":[8716],"declarations":[{"constant":false,"id":8716,"mutability":"mutable","name":"negativeSign","nameLocation":"9621:12:49","nodeType":"VariableDeclaration","scope":8787,"src":"9616:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8715,"name":"bool","nodeType":"ElementaryTypeName","src":"9616:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8723,"initialValue":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":8722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8717,"name":"sign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8689,"src":"9636:4:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"2d","id":8720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"9651:3:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""}],"id":8719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9644:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8718,"name":"bytes1","nodeType":"ElementaryTypeName","src":"9644:6:49","typeDescriptions":{}}},"id":8721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9644:11:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"9636:19:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"9616:39:49"},{"assignments":[8725],"declarations":[{"constant":false,"id":8725,"mutability":"mutable","name":"offset","nameLocation":"9673:6:49","nodeType":"VariableDeclaration","scope":8787,"src":"9665:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8724,"name":"uint256","nodeType":"ElementaryTypeName","src":"9665:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8732,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8726,"name":"positiveSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8707,"src":"9683:12:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":8727,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8716,"src":"9699:12:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9683:28:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8729,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9682:30:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9713:6:49","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"9682:37:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":8731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9682:39:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9665:56:49"},{"assignments":[8734,8736],"declarations":[{"constant":false,"id":8734,"mutability":"mutable","name":"absSuccess","nameLocation":"9738:10:49","nodeType":"VariableDeclaration","scope":8787,"src":"9733:15:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8733,"name":"bool","nodeType":"ElementaryTypeName","src":"9733:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8736,"mutability":"mutable","name":"absValue","nameLocation":"9758:8:49","nodeType":"VariableDeclaration","scope":8787,"src":"9750:16:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8735,"name":"uint256","nodeType":"ElementaryTypeName","src":"9750:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8744,"initialValue":{"arguments":[{"id":8738,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8670,"src":"9783:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8739,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8672,"src":"9790:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8740,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8725,"src":"9798:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9790:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8742,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8674,"src":"9806:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8737,"name":"tryParseUint","nodeType":"Identifier","overloadedDeclarations":[8447,8484],"referencedDeclaration":8484,"src":"9770:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9770:40:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"9732:78:49"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8745,"name":"absSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8734,"src":"9825:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8746,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8736,"src":"9839:8:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8747,"name":"ABS_MIN_INT256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8630,"src":"9850:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9839:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9825:39:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8765,"name":"absSuccess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8734,"src":"9967:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":8766,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8716,"src":"9981:12:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9967:26:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8768,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8736,"src":"9997:8:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8769,"name":"ABS_MIN_INT256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8630,"src":"10009:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9997:26:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9967:56:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10095:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10102:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8783,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"10094:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8680,"id":8784,"nodeType":"Return","src":"10087:17:49"},"id":8785,"nodeType":"IfStatement","src":"9963:141:49","trueBody":{"id":8780,"nodeType":"Block","src":"10025:56:49","statements":[{"expression":{"components":[{"hexValue":"74727565","id":8772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10047:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"expression":{"arguments":[{"id":8775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10058:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8774,"name":"int256","nodeType":"ElementaryTypeName","src":"10058:6:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":8773,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10053:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10053:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":8777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10066:3:49","memberName":"min","nodeType":"MemberAccess","src":"10053:16:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"10046:24:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":8680,"id":8779,"nodeType":"Return","src":"10039:31:49"}]}},"id":8786,"nodeType":"IfStatement","src":"9821:283:49","trueBody":{"id":8764,"nodeType":"Block","src":"9866:91:49","statements":[{"expression":{"components":[{"hexValue":"74727565","id":8750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9888:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"condition":{"id":8751,"name":"negativeSign","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8716,"src":"9894:12:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":8759,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8736,"src":"9936:8:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9929:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8757,"name":"int256","nodeType":"ElementaryTypeName","src":"9929:6:49","typeDescriptions":{}}},"id":8760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9929:16:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9894:51:49","trueExpression":{"id":8756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"9909:17:49","subExpression":{"arguments":[{"id":8754,"name":"absValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8736,"src":"9917:8:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9910:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8752,"name":"int256","nodeType":"ElementaryTypeName","src":"9910:6:49","typeDescriptions":{}}},"id":8755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9910:16:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8762,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9887:59:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_int256_$","typeString":"tuple(bool,int256)"}},"functionReturnParameters":8680,"id":8763,"nodeType":"Return","src":"9880:66:49"}]}}]},"documentation":{"id":8668,"nodeType":"StructuredDocumentation","src":"8928:200:49","text":" @dev Implementation of {tryParseInt} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":8788,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseIntUncheckedBounds","nameLocation":"9142:27:49","nodeType":"FunctionDefinition","parameters":{"id":8675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8670,"mutability":"mutable","name":"input","nameLocation":"9193:5:49","nodeType":"VariableDeclaration","scope":8788,"src":"9179:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8669,"name":"string","nodeType":"ElementaryTypeName","src":"9179:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8672,"mutability":"mutable","name":"begin","nameLocation":"9216:5:49","nodeType":"VariableDeclaration","scope":8788,"src":"9208:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8671,"name":"uint256","nodeType":"ElementaryTypeName","src":"9208:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8674,"mutability":"mutable","name":"end","nameLocation":"9239:3:49","nodeType":"VariableDeclaration","scope":8788,"src":"9231:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8673,"name":"uint256","nodeType":"ElementaryTypeName","src":"9231:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9169:79:49"},"returnParameters":{"id":8680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8677,"mutability":"mutable","name":"success","nameLocation":"9276:7:49","nodeType":"VariableDeclaration","scope":8788,"src":"9271:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8676,"name":"bool","nodeType":"ElementaryTypeName","src":"9271:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8679,"mutability":"mutable","name":"value","nameLocation":"9292:5:49","nodeType":"VariableDeclaration","scope":8788,"src":"9285:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8678,"name":"int256","nodeType":"ElementaryTypeName","src":"9285:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"9270:28:49"},"scope":9247,"src":"9133:978:49","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":8806,"nodeType":"Block","src":"10456:67:49","statements":[{"expression":{"arguments":[{"id":8797,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8791,"src":"10486:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10493:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8801,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8791,"src":"10502:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10496:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8799,"name":"bytes","nodeType":"ElementaryTypeName","src":"10496:5:49","typeDescriptions":{}}},"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10496:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10509:6:49","memberName":"length","nodeType":"MemberAccess","src":"10496:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8796,"name":"parseHexUint","nodeType":"Identifier","overloadedDeclarations":[8807,8838],"referencedDeclaration":8838,"src":"10473:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (uint256)"}},"id":8804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10473:43:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8795,"id":8805,"nodeType":"Return","src":"10466:50:49"}]},"documentation":{"id":8789,"nodeType":"StructuredDocumentation","src":"10117:259:49","text":" @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."},"id":8807,"implemented":true,"kind":"function","modifiers":[],"name":"parseHexUint","nameLocation":"10390:12:49","nodeType":"FunctionDefinition","parameters":{"id":8792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8791,"mutability":"mutable","name":"input","nameLocation":"10417:5:49","nodeType":"VariableDeclaration","scope":8807,"src":"10403:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8790,"name":"string","nodeType":"ElementaryTypeName","src":"10403:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"10402:21:49"},"returnParameters":{"id":8795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8807,"src":"10447:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8793,"name":"uint256","nodeType":"ElementaryTypeName","src":"10447:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10446:9:49"},"scope":9247,"src":"10381:142:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8837,"nodeType":"Block","src":"10937:156:49","statements":[{"assignments":[8820,8822],"declarations":[{"constant":false,"id":8820,"mutability":"mutable","name":"success","nameLocation":"10953:7:49","nodeType":"VariableDeclaration","scope":8837,"src":"10948:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8819,"name":"bool","nodeType":"ElementaryTypeName","src":"10948:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8822,"mutability":"mutable","name":"value","nameLocation":"10970:5:49","nodeType":"VariableDeclaration","scope":8837,"src":"10962:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8821,"name":"uint256","nodeType":"ElementaryTypeName","src":"10962:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8828,"initialValue":{"arguments":[{"id":8824,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8810,"src":"10995:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8825,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8812,"src":"11002:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8826,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8814,"src":"11009:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8823,"name":"tryParseHexUint","nodeType":"Identifier","overloadedDeclarations":[8859,8896],"referencedDeclaration":8896,"src":"10979:15:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10979:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10947:66:49"},{"condition":{"id":8830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11027:8:49","subExpression":{"id":8829,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8820,"src":"11028:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8834,"nodeType":"IfStatement","src":"11023:41:49","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8831,"name":"StringsInvalidChar","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8074,"src":"11044:18:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11044:20:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8833,"nodeType":"RevertStatement","src":"11037:27:49"}},{"expression":{"id":8835,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8822,"src":"11081:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8818,"id":8836,"nodeType":"Return","src":"11074:12:49"}]},"documentation":{"id":8808,"nodeType":"StructuredDocumentation","src":"10529:300:49","text":" @dev Variant of {parseHexUint} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."},"id":8838,"implemented":true,"kind":"function","modifiers":[],"name":"parseHexUint","nameLocation":"10843:12:49","nodeType":"FunctionDefinition","parameters":{"id":8815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8810,"mutability":"mutable","name":"input","nameLocation":"10870:5:49","nodeType":"VariableDeclaration","scope":8838,"src":"10856:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8809,"name":"string","nodeType":"ElementaryTypeName","src":"10856:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8812,"mutability":"mutable","name":"begin","nameLocation":"10885:5:49","nodeType":"VariableDeclaration","scope":8838,"src":"10877:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8811,"name":"uint256","nodeType":"ElementaryTypeName","src":"10877:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8814,"mutability":"mutable","name":"end","nameLocation":"10900:3:49","nodeType":"VariableDeclaration","scope":8838,"src":"10892:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8813,"name":"uint256","nodeType":"ElementaryTypeName","src":"10892:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10855:49:49"},"returnParameters":{"id":8818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8838,"src":"10928:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8816,"name":"uint256","nodeType":"ElementaryTypeName","src":"10928:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10927:9:49"},"scope":9247,"src":"10834:259:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8858,"nodeType":"Block","src":"11420:86:49","statements":[{"expression":{"arguments":[{"id":8849,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8841,"src":"11469:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":8850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11476:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":8853,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8841,"src":"11485:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11479:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8851,"name":"bytes","nodeType":"ElementaryTypeName","src":"11479:5:49","typeDescriptions":{}}},"id":8854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11479:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11492:6:49","memberName":"length","nodeType":"MemberAccess","src":"11479:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8848,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"11437:31:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11437:62:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8847,"id":8857,"nodeType":"Return","src":"11430:69:49"}]},"documentation":{"id":8839,"nodeType":"StructuredDocumentation","src":"11099:218:49","text":" @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":8859,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseHexUint","nameLocation":"11331:15:49","nodeType":"FunctionDefinition","parameters":{"id":8842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8841,"mutability":"mutable","name":"input","nameLocation":"11361:5:49","nodeType":"VariableDeclaration","scope":8859,"src":"11347:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8840,"name":"string","nodeType":"ElementaryTypeName","src":"11347:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"11346:21:49"},"returnParameters":{"id":8847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8844,"mutability":"mutable","name":"success","nameLocation":"11396:7:49","nodeType":"VariableDeclaration","scope":8859,"src":"11391:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8843,"name":"bool","nodeType":"ElementaryTypeName","src":"11391:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8846,"mutability":"mutable","name":"value","nameLocation":"11413:5:49","nodeType":"VariableDeclaration","scope":8859,"src":"11405:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8845,"name":"uint256","nodeType":"ElementaryTypeName","src":"11405:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11390:29:49"},"scope":9247,"src":"11322:184:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8895,"nodeType":"Block","src":"11914:147:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8873,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8866,"src":"11928:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8876,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8862,"src":"11940:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11934:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8874,"name":"bytes","nodeType":"ElementaryTypeName","src":"11934:5:49","typeDescriptions":{}}},"id":8877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11934:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":8878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11947:6:49","memberName":"length","nodeType":"MemberAccess","src":"11934:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11928:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8880,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8864,"src":"11957:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":8881,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8866,"src":"11965:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11957:11:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11928:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8888,"nodeType":"IfStatement","src":"11924:63:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11978:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11985:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"11977:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8872,"id":8887,"nodeType":"Return","src":"11970:17:49"}},{"expression":{"arguments":[{"id":8890,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8862,"src":"12036:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":8891,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8864,"src":"12043:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8892,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8866,"src":"12050:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8889,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"12004:31:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":8893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12004:50:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8872,"id":8894,"nodeType":"Return","src":"11997:57:49"}]},"documentation":{"id":8860,"nodeType":"StructuredDocumentation","src":"11512:241:49","text":" @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."},"id":8896,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseHexUint","nameLocation":"11767:15:49","nodeType":"FunctionDefinition","parameters":{"id":8867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8862,"mutability":"mutable","name":"input","nameLocation":"11806:5:49","nodeType":"VariableDeclaration","scope":8896,"src":"11792:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8861,"name":"string","nodeType":"ElementaryTypeName","src":"11792:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8864,"mutability":"mutable","name":"begin","nameLocation":"11829:5:49","nodeType":"VariableDeclaration","scope":8896,"src":"11821:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8863,"name":"uint256","nodeType":"ElementaryTypeName","src":"11821:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8866,"mutability":"mutable","name":"end","nameLocation":"11852:3:49","nodeType":"VariableDeclaration","scope":8896,"src":"11844:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8865,"name":"uint256","nodeType":"ElementaryTypeName","src":"11844:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11782:79:49"},"returnParameters":{"id":8872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8869,"mutability":"mutable","name":"success","nameLocation":"11890:7:49","nodeType":"VariableDeclaration","scope":8896,"src":"11885:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8868,"name":"bool","nodeType":"ElementaryTypeName","src":"11885:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8871,"mutability":"mutable","name":"value","nameLocation":"11907:5:49","nodeType":"VariableDeclaration","scope":8896,"src":"11899:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8870,"name":"uint256","nodeType":"ElementaryTypeName","src":"11899:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11884:29:49"},"scope":9247,"src":"11758:303:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8998,"nodeType":"Block","src":"12447:880:49","statements":[{"assignments":[8911],"declarations":[{"constant":false,"id":8911,"mutability":"mutable","name":"buffer","nameLocation":"12470:6:49","nodeType":"VariableDeclaration","scope":8998,"src":"12457:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":8910,"name":"bytes","nodeType":"ElementaryTypeName","src":"12457:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":8916,"initialValue":{"arguments":[{"id":8914,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8899,"src":"12485:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":8913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12479:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":8912,"name":"bytes","nodeType":"ElementaryTypeName","src":"12479:5:49","typeDescriptions":{}}},"id":8915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12479:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"12457:34:49"},{"assignments":[8918],"declarations":[{"constant":false,"id":8918,"mutability":"mutable","name":"hasPrefix","nameLocation":"12544:9:49","nodeType":"VariableDeclaration","scope":8998,"src":"12539:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8917,"name":"bool","nodeType":"ElementaryTypeName","src":"12539:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8938,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8919,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8903,"src":"12557:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8920,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8901,"src":"12563:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8921,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12571:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12563:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12557:15:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8924,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12556:17:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":8936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":8928,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"12607:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":8929,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8901,"src":"12615:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8927,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9246,"src":"12584:22:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":8930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12584:37:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12577:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":8925,"name":"bytes2","nodeType":"ElementaryTypeName","src":"12577:6:49","typeDescriptions":{}}},"id":8931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12577:45:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"3078","id":8934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12633:4:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"id":8933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12626:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":8932,"name":"bytes2","nodeType":"ElementaryTypeName","src":"12626:6:49","typeDescriptions":{}}},"id":8935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12626:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"src":"12577:61:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12556:82:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"12539:99:49"},{"assignments":[8940],"declarations":[{"constant":false,"id":8940,"mutability":"mutable","name":"offset","nameLocation":"12727:6:49","nodeType":"VariableDeclaration","scope":8998,"src":"12719:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8939,"name":"uint256","nodeType":"ElementaryTypeName","src":"12719:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8946,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8941,"name":"hasPrefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8918,"src":"12736:9:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12746:6:49","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"12736:16:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":8943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12736:18:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":8944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12757:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12736:22:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12719:39:49"},{"assignments":[8948],"declarations":[{"constant":false,"id":8948,"mutability":"mutable","name":"result","nameLocation":"12777:6:49","nodeType":"VariableDeclaration","scope":8998,"src":"12769:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8947,"name":"uint256","nodeType":"ElementaryTypeName","src":"12769:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8950,"initialValue":{"hexValue":"30","id":8949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12786:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12769:18:49"},{"body":{"id":8992,"nodeType":"Block","src":"12844:446:49","statements":[{"assignments":[8964],"declarations":[{"constant":false,"id":8964,"mutability":"mutable","name":"chr","nameLocation":"12864:3:49","nodeType":"VariableDeclaration","scope":8992,"src":"12858:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8963,"name":"uint8","nodeType":"ElementaryTypeName","src":"12858:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":8974,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":8969,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8911,"src":"12913:6:49","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":8970,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8952,"src":"12921:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8968,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9246,"src":"12890:22:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":8971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12890:33:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":8967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12883:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes1_$","typeString":"type(bytes1)"},"typeName":{"id":8966,"name":"bytes1","nodeType":"ElementaryTypeName","src":"12883:6:49","typeDescriptions":{}}},"id":8972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12883:41:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":8965,"name":"_tryParseChr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9234,"src":"12870:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$","typeString":"function (bytes1) pure returns (uint8)"}},"id":8973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12870:55:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"12858:67:49"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":8977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8975,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8964,"src":"12943:3:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3135","id":8976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12949:2:49","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"12943:8:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8982,"nodeType":"IfStatement","src":"12939:31:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":8978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12961:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":8979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12968:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":8980,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12960:10:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":8909,"id":8981,"nodeType":"Return","src":"12953:17:49"}},{"expression":{"id":8985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8983,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"12984:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"3136","id":8984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12994:2:49","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12984:12:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8986,"nodeType":"ExpressionStatement","src":"12984:12:49"},{"id":8991,"nodeType":"UncheckedBlock","src":"13010:270:49","statements":[{"expression":{"id":8989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8987,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"13252:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8988,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8964,"src":"13262:3:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13252:13:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8990,"nodeType":"ExpressionStatement","src":"13252:13:49"}]}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8957,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8952,"src":"12830:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8958,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8903,"src":"12834:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12830:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8993,"initializationExpression":{"assignments":[8952],"declarations":[{"constant":false,"id":8952,"mutability":"mutable","name":"i","nameLocation":"12810:1:49","nodeType":"VariableDeclaration","scope":8993,"src":"12802:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8951,"name":"uint256","nodeType":"ElementaryTypeName","src":"12802:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8956,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8953,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8901,"src":"12814:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8954,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8940,"src":"12822:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12814:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12802:26:49"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12839:3:49","subExpression":{"id":8960,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8952,"src":"12841:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8962,"nodeType":"ExpressionStatement","src":"12839:3:49"},"nodeType":"ForStatement","src":"12797:493:49"},{"expression":{"components":[{"hexValue":"74727565","id":8994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13307:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":8995,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8948,"src":"13313:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":8996,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13306:14:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":8909,"id":8997,"nodeType":"Return","src":"13299:21:49"}]},"documentation":{"id":8897,"nodeType":"StructuredDocumentation","src":"12067:204:49","text":" @dev Implementation of {tryParseHexUint} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."},"id":8999,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseHexUintUncheckedBounds","nameLocation":"12285:31:49","nodeType":"FunctionDefinition","parameters":{"id":8904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8899,"mutability":"mutable","name":"input","nameLocation":"12340:5:49","nodeType":"VariableDeclaration","scope":8999,"src":"12326:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":8898,"name":"string","nodeType":"ElementaryTypeName","src":"12326:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":8901,"mutability":"mutable","name":"begin","nameLocation":"12363:5:49","nodeType":"VariableDeclaration","scope":8999,"src":"12355:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8900,"name":"uint256","nodeType":"ElementaryTypeName","src":"12355:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8903,"mutability":"mutable","name":"end","nameLocation":"12386:3:49","nodeType":"VariableDeclaration","scope":8999,"src":"12378:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8902,"name":"uint256","nodeType":"ElementaryTypeName","src":"12378:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12316:79:49"},"returnParameters":{"id":8909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8906,"mutability":"mutable","name":"success","nameLocation":"12423:7:49","nodeType":"VariableDeclaration","scope":8999,"src":"12418:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8905,"name":"bool","nodeType":"ElementaryTypeName","src":"12418:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8908,"mutability":"mutable","name":"value","nameLocation":"12440:5:49","nodeType":"VariableDeclaration","scope":8999,"src":"12432:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8907,"name":"uint256","nodeType":"ElementaryTypeName","src":"12432:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12417:29:49"},"scope":9247,"src":"12276:1051:49","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":9017,"nodeType":"Block","src":"13625:67:49","statements":[{"expression":{"arguments":[{"id":9008,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9002,"src":"13655:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":9009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13662:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":9012,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9002,"src":"13671:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13665:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9010,"name":"bytes","nodeType":"ElementaryTypeName","src":"13665:5:49","typeDescriptions":{}}},"id":9013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13665:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13678:6:49","memberName":"length","nodeType":"MemberAccess","src":"13665:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9007,"name":"parseAddress","nodeType":"Identifier","overloadedDeclarations":[9018,9049],"referencedDeclaration":9049,"src":"13642:12:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (address)"}},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13642:43:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9006,"id":9016,"nodeType":"Return","src":"13635:50:49"}]},"documentation":{"id":9000,"nodeType":"StructuredDocumentation","src":"13333:212:49","text":" @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`"},"id":9018,"implemented":true,"kind":"function","modifiers":[],"name":"parseAddress","nameLocation":"13559:12:49","nodeType":"FunctionDefinition","parameters":{"id":9003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9002,"mutability":"mutable","name":"input","nameLocation":"13586:5:49","nodeType":"VariableDeclaration","scope":9018,"src":"13572:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9001,"name":"string","nodeType":"ElementaryTypeName","src":"13572:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"13571:21:49"},"returnParameters":{"id":9006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9018,"src":"13616:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9004,"name":"address","nodeType":"ElementaryTypeName","src":"13616:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13615:9:49"},"scope":9247,"src":"13550:142:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9048,"nodeType":"Block","src":"14058:165:49","statements":[{"assignments":[9031,9033],"declarations":[{"constant":false,"id":9031,"mutability":"mutable","name":"success","nameLocation":"14074:7:49","nodeType":"VariableDeclaration","scope":9048,"src":"14069:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9030,"name":"bool","nodeType":"ElementaryTypeName","src":"14069:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9033,"mutability":"mutable","name":"value","nameLocation":"14091:5:49","nodeType":"VariableDeclaration","scope":9048,"src":"14083:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9032,"name":"address","nodeType":"ElementaryTypeName","src":"14083:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9039,"initialValue":{"arguments":[{"id":9035,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9021,"src":"14116:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":9036,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9023,"src":"14123:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9037,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9025,"src":"14130:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9034,"name":"tryParseAddress","nodeType":"Identifier","overloadedDeclarations":[9070,9174],"referencedDeclaration":9174,"src":"14100:15:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,address)"}},"id":9038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14100:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"nodeType":"VariableDeclarationStatement","src":"14068:66:49"},{"condition":{"id":9041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"14148:8:49","subExpression":{"id":9040,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9031,"src":"14149:7:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9045,"nodeType":"IfStatement","src":"14144:50:49","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9042,"name":"StringsInvalidAddressFormat","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8077,"src":"14165:27:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14165:29:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9044,"nodeType":"RevertStatement","src":"14158:36:49"}},{"expression":{"id":9046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"14211:5:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9029,"id":9047,"nodeType":"Return","src":"14204:12:49"}]},"documentation":{"id":9019,"nodeType":"StructuredDocumentation","src":"13698:252:49","text":" @dev Variant of {parseAddress} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`"},"id":9049,"implemented":true,"kind":"function","modifiers":[],"name":"parseAddress","nameLocation":"13964:12:49","nodeType":"FunctionDefinition","parameters":{"id":9026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9021,"mutability":"mutable","name":"input","nameLocation":"13991:5:49","nodeType":"VariableDeclaration","scope":9049,"src":"13977:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9020,"name":"string","nodeType":"ElementaryTypeName","src":"13977:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9023,"mutability":"mutable","name":"begin","nameLocation":"14006:5:49","nodeType":"VariableDeclaration","scope":9049,"src":"13998:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9022,"name":"uint256","nodeType":"ElementaryTypeName","src":"13998:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9025,"mutability":"mutable","name":"end","nameLocation":"14021:3:49","nodeType":"VariableDeclaration","scope":9049,"src":"14013:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9024,"name":"uint256","nodeType":"ElementaryTypeName","src":"14013:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13976:49:49"},"returnParameters":{"id":9029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9049,"src":"14049:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9027,"name":"address","nodeType":"ElementaryTypeName","src":"14049:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14048:9:49"},"scope":9247,"src":"13955:268:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9069,"nodeType":"Block","src":"14523:70:49","statements":[{"expression":{"arguments":[{"id":9060,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"14556:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"30","id":9061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14563:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"arguments":[{"id":9064,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9052,"src":"14572:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9063,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14566:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9062,"name":"bytes","nodeType":"ElementaryTypeName","src":"14566:5:49","typeDescriptions":{}}},"id":9065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14566:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14579:6:49","memberName":"length","nodeType":"MemberAccess","src":"14566:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9059,"name":"tryParseAddress","nodeType":"Identifier","overloadedDeclarations":[9070,9174],"referencedDeclaration":9174,"src":"14540:15:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,address)"}},"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14540:46:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":9058,"id":9068,"nodeType":"Return","src":"14533:53:49"}]},"documentation":{"id":9050,"nodeType":"StructuredDocumentation","src":"14229:191:49","text":" @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n formatted address. See {parseAddress} requirements."},"id":9070,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseAddress","nameLocation":"14434:15:49","nodeType":"FunctionDefinition","parameters":{"id":9053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9052,"mutability":"mutable","name":"input","nameLocation":"14464:5:49","nodeType":"VariableDeclaration","scope":9070,"src":"14450:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9051,"name":"string","nodeType":"ElementaryTypeName","src":"14450:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"14449:21:49"},"returnParameters":{"id":9058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9055,"mutability":"mutable","name":"success","nameLocation":"14499:7:49","nodeType":"VariableDeclaration","scope":9070,"src":"14494:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9054,"name":"bool","nodeType":"ElementaryTypeName","src":"14494:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9057,"mutability":"mutable","name":"value","nameLocation":"14516:5:49","nodeType":"VariableDeclaration","scope":9070,"src":"14508:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9056,"name":"address","nodeType":"ElementaryTypeName","src":"14508:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14493:29:49"},"scope":9247,"src":"14425:168:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9173,"nodeType":"Block","src":"14963:733:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9084,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"14977:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":9087,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9073,"src":"14989:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14983:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9085,"name":"bytes","nodeType":"ElementaryTypeName","src":"14983:5:49","typeDescriptions":{}}},"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14983:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14996:6:49","memberName":"length","nodeType":"MemberAccess","src":"14983:19:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14977:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9091,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9075,"src":"15006:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":9092,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"15014:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15006:11:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14977:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9102,"nodeType":"IfStatement","src":"14973:72:49","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15027:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":9098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15042:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15034:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9096,"name":"address","nodeType":"ElementaryTypeName","src":"15034:7:49","typeDescriptions":{}}},"id":9099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15034:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9100,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15026:19:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":9083,"id":9101,"nodeType":"Return","src":"15019:26:49"}},{"assignments":[9104],"declarations":[{"constant":false,"id":9104,"mutability":"mutable","name":"hasPrefix","nameLocation":"15061:9:49","nodeType":"VariableDeclaration","scope":9173,"src":"15056:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9103,"name":"bool","nodeType":"ElementaryTypeName","src":"15056:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":9127,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9105,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"15074:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9106,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9075,"src":"15080:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":9107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15088:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15080:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15074:15:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":9110,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15073:17:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes2","typeString":"bytes2"},"id":9125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":9116,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9073,"src":"15130:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15124:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9114,"name":"bytes","nodeType":"ElementaryTypeName","src":"15124:5:49","typeDescriptions":{}}},"id":9117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15124:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9118,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9075,"src":"15138:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9113,"name":"_unsafeReadBytesOffset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9246,"src":"15101:22:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (bytes memory,uint256) pure returns (bytes32)"}},"id":9119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15101:43:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15094:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":9111,"name":"bytes2","nodeType":"ElementaryTypeName","src":"15094:6:49","typeDescriptions":{}}},"id":9120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15094:51:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"3078","id":9123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"15156:4:49","typeDescriptions":{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""},"value":"0x"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837","typeString":"literal_string \"0x\""}],"id":9122,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15149:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes2_$","typeString":"type(bytes2)"},"typeName":{"id":9121,"name":"bytes2","nodeType":"ElementaryTypeName","src":"15149:6:49","typeDescriptions":{}}},"id":9124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15149:12:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},"src":"15094:67:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15073:88:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"15056:105:49"},{"assignments":[9129],"declarations":[{"constant":false,"id":9129,"mutability":"mutable","name":"expectedLength","nameLocation":"15250:14:49","nodeType":"VariableDeclaration","scope":9173,"src":"15242:22:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9128,"name":"uint256","nodeType":"ElementaryTypeName","src":"15242:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9137,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3430","id":9130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15267:2:49","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9131,"name":"hasPrefix","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9104,"src":"15272:9:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15282:6:49","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"15272:16:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$","typeString":"function (bool) pure returns (uint256)"}},"id":9133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15272:18:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":9134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15293:1:49","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15272:22:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15267:27:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15242:52:49"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9138,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"15359:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9139,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9075,"src":"15365:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15359:11:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":9141,"name":"expectedLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9129,"src":"15374:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15359:29:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9171,"nodeType":"Block","src":"15639:51:49","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":9164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15661:5:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":9167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15676:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15668:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9165,"name":"address","nodeType":"ElementaryTypeName","src":"15668:7:49","typeDescriptions":{}}},"id":9168,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15668:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9169,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15660:19:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":9083,"id":9170,"nodeType":"Return","src":"15653:26:49"}]},"id":9172,"nodeType":"IfStatement","src":"15355:335:49","trueBody":{"id":9163,"nodeType":"Block","src":"15390:243:49","statements":[{"assignments":[9144,9146],"declarations":[{"constant":false,"id":9144,"mutability":"mutable","name":"s","nameLocation":"15511:1:49","nodeType":"VariableDeclaration","scope":9163,"src":"15506:6:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9143,"name":"bool","nodeType":"ElementaryTypeName","src":"15506:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9146,"mutability":"mutable","name":"v","nameLocation":"15522:1:49","nodeType":"VariableDeclaration","scope":9163,"src":"15514:9:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9145,"name":"uint256","nodeType":"ElementaryTypeName","src":"15514:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9152,"initialValue":{"arguments":[{"id":9148,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9073,"src":"15559:5:49","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":9149,"name":"begin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9075,"src":"15566:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9150,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9077,"src":"15573:3:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9147,"name":"_tryParseHexUintUncheckedBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"15527:31:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (string memory,uint256,uint256) pure returns (bool,uint256)"}},"id":9151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15527:50:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15505:72:49"},{"expression":{"components":[{"id":9153,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9144,"src":"15599:1:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[{"arguments":[{"id":9158,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9146,"src":"15618:1:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15610:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":9156,"name":"uint160","nodeType":"ElementaryTypeName","src":"15610:7:49","typeDescriptions":{}}},"id":9159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15610:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":9155,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15602:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9154,"name":"address","nodeType":"ElementaryTypeName","src":"15602:7:49","typeDescriptions":{}}},"id":9160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15602:19:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":9161,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"15598:24:49","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"functionReturnParameters":9083,"id":9162,"nodeType":"Return","src":"15591:31:49"}]}}]},"documentation":{"id":9071,"nodeType":"StructuredDocumentation","src":"14599:203:49","text":" @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n formatted address. See {parseAddress} requirements."},"id":9174,"implemented":true,"kind":"function","modifiers":[],"name":"tryParseAddress","nameLocation":"14816:15:49","nodeType":"FunctionDefinition","parameters":{"id":9078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9073,"mutability":"mutable","name":"input","nameLocation":"14855:5:49","nodeType":"VariableDeclaration","scope":9174,"src":"14841:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9072,"name":"string","nodeType":"ElementaryTypeName","src":"14841:6:49","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9075,"mutability":"mutable","name":"begin","nameLocation":"14878:5:49","nodeType":"VariableDeclaration","scope":9174,"src":"14870:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9074,"name":"uint256","nodeType":"ElementaryTypeName","src":"14870:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9077,"mutability":"mutable","name":"end","nameLocation":"14901:3:49","nodeType":"VariableDeclaration","scope":9174,"src":"14893:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9076,"name":"uint256","nodeType":"ElementaryTypeName","src":"14893:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14831:79:49"},"returnParameters":{"id":9083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9080,"mutability":"mutable","name":"success","nameLocation":"14939:7:49","nodeType":"VariableDeclaration","scope":9174,"src":"14934:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9079,"name":"bool","nodeType":"ElementaryTypeName","src":"14934:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9082,"mutability":"mutable","name":"value","nameLocation":"14956:5:49","nodeType":"VariableDeclaration","scope":9174,"src":"14948:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9081,"name":"address","nodeType":"ElementaryTypeName","src":"14948:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14933:29:49"},"scope":9247,"src":"14807:889:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9233,"nodeType":"Block","src":"15765:461:49","statements":[{"assignments":[9182],"declarations":[{"constant":false,"id":9182,"mutability":"mutable","name":"value","nameLocation":"15781:5:49","nodeType":"VariableDeclaration","scope":9233,"src":"15775:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9181,"name":"uint8","nodeType":"ElementaryTypeName","src":"15775:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":9187,"initialValue":{"arguments":[{"id":9185,"name":"chr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9176,"src":"15795:3:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes1","typeString":"bytes1"}],"id":9184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15789:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":9183,"name":"uint8","nodeType":"ElementaryTypeName","src":"15789:5:49","typeDescriptions":{}}},"id":9186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15789:10:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"15775:24:49"},{"id":9230,"nodeType":"UncheckedBlock","src":"15959:238:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9188,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"15987:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3437","id":9189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15995:2:49","typeDescriptions":{"typeIdentifier":"t_rational_47_by_1","typeString":"int_const 47"},"value":"47"},"src":"15987:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9191,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16001:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3538","id":9192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16009:2:49","typeDescriptions":{"typeIdentifier":"t_rational_58_by_1","typeString":"int_const 58"},"value":"58"},"src":"16001:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15987:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9199,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16047:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3936","id":9200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16055:2:49","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},"src":"16047:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16061:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"313033","id":9203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16069:3:49","typeDescriptions":{"typeIdentifier":"t_rational_103_by_1","typeString":"int_const 103"},"value":"103"},"src":"16061:11:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16047:25:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9210,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16108:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3634","id":9211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16116:2:49","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"16108:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":9215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9213,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16122:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3731","id":9214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16130:2:49","typeDescriptions":{"typeIdentifier":"t_rational_71_by_1","typeString":"int_const 71"},"value":"71"},"src":"16122:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16108:24:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"expression":{"expression":{"arguments":[{"id":9223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16176:5:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":9222,"name":"uint8","nodeType":"ElementaryTypeName","src":"16176:5:49","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":9221,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16171:4:49","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16171:11:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":9225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16183:3:49","memberName":"max","nodeType":"MemberAccess","src":"16171:15:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":9180,"id":9226,"nodeType":"Return","src":"16164:22:49"},"id":9227,"nodeType":"IfStatement","src":"16104:82:49","trueBody":{"expression":{"id":9219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9217,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16134:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3535","id":9218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16143:2:49","typeDescriptions":{"typeIdentifier":"t_rational_55_by_1","typeString":"int_const 55"},"value":"55"},"src":"16134:11:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":9220,"nodeType":"ExpressionStatement","src":"16134:11:49"}},"id":9228,"nodeType":"IfStatement","src":"16043:143:49","trueBody":{"expression":{"id":9208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9206,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16074:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3837","id":9207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16083:2:49","typeDescriptions":{"typeIdentifier":"t_rational_87_by_1","typeString":"int_const 87"},"value":"87"},"src":"16074:11:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":9209,"nodeType":"ExpressionStatement","src":"16074:11:49"}},"id":9229,"nodeType":"IfStatement","src":"15983:203:49","trueBody":{"expression":{"id":9197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9195,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16013:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"hexValue":"3438","id":9196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16022:2:49","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},"src":"16013:11:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":9198,"nodeType":"ExpressionStatement","src":"16013:11:49"}}]},{"expression":{"id":9231,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9182,"src":"16214:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":9180,"id":9232,"nodeType":"Return","src":"16207:12:49"}]},"id":9234,"implemented":true,"kind":"function","modifiers":[],"name":"_tryParseChr","nameLocation":"15711:12:49","nodeType":"FunctionDefinition","parameters":{"id":9177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9176,"mutability":"mutable","name":"chr","nameLocation":"15731:3:49","nodeType":"VariableDeclaration","scope":9234,"src":"15724:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":9175,"name":"bytes1","nodeType":"ElementaryTypeName","src":"15724:6:49","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"}],"src":"15723:12:49"},"returnParameters":{"id":9180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9234,"src":"15758:5:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9178,"name":"uint8","nodeType":"ElementaryTypeName","src":"15758:5:49","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"15757:7:49"},"scope":9247,"src":"15702:524:49","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":9245,"nodeType":"Block","src":"16611:225:49","statements":[{"AST":{"nativeSrc":"16760:70:49","nodeType":"YulBlock","src":"16760:70:49","statements":[{"nativeSrc":"16774:46:49","nodeType":"YulAssignment","src":"16774:46:49","value":{"arguments":[{"arguments":[{"name":"buffer","nativeSrc":"16793:6:49","nodeType":"YulIdentifier","src":"16793:6:49"},{"arguments":[{"kind":"number","nativeSrc":"16805:4:49","nodeType":"YulLiteral","src":"16805:4:49","type":"","value":"0x20"},{"name":"offset","nativeSrc":"16811:6:49","nodeType":"YulIdentifier","src":"16811:6:49"}],"functionName":{"name":"add","nativeSrc":"16801:3:49","nodeType":"YulIdentifier","src":"16801:3:49"},"nativeSrc":"16801:17:49","nodeType":"YulFunctionCall","src":"16801:17:49"}],"functionName":{"name":"add","nativeSrc":"16789:3:49","nodeType":"YulIdentifier","src":"16789:3:49"},"nativeSrc":"16789:30:49","nodeType":"YulFunctionCall","src":"16789:30:49"}],"functionName":{"name":"mload","nativeSrc":"16783:5:49","nodeType":"YulIdentifier","src":"16783:5:49"},"nativeSrc":"16783:37:49","nodeType":"YulFunctionCall","src":"16783:37:49"},"variableNames":[{"name":"value","nativeSrc":"16774:5:49","nodeType":"YulIdentifier","src":"16774:5:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9237,"isOffset":false,"isSlot":false,"src":"16793:6:49","valueSize":1},{"declaration":9239,"isOffset":false,"isSlot":false,"src":"16811:6:49","valueSize":1},{"declaration":9242,"isOffset":false,"isSlot":false,"src":"16774:5:49","valueSize":1}],"flags":["memory-safe"],"id":9244,"nodeType":"InlineAssembly","src":"16735:95:49"}]},"documentation":{"id":9235,"nodeType":"StructuredDocumentation","src":"16232:268:49","text":" @dev Reads a bytes32 from a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."},"id":9246,"implemented":true,"kind":"function","modifiers":[],"name":"_unsafeReadBytesOffset","nameLocation":"16514:22:49","nodeType":"FunctionDefinition","parameters":{"id":9240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9237,"mutability":"mutable","name":"buffer","nameLocation":"16550:6:49","nodeType":"VariableDeclaration","scope":9246,"src":"16537:19:49","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9236,"name":"bytes","nodeType":"ElementaryTypeName","src":"16537:5:49","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":9239,"mutability":"mutable","name":"offset","nameLocation":"16566:6:49","nodeType":"VariableDeclaration","scope":9246,"src":"16558:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9238,"name":"uint256","nodeType":"ElementaryTypeName","src":"16558:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16536:37:49"},"returnParameters":{"id":9243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9242,"mutability":"mutable","name":"value","nameLocation":"16604:5:49","nodeType":"VariableDeclaration","scope":9246,"src":"16596:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9241,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16596:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16595:15:49"},"scope":9247,"src":"16505:331:49","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9248,"src":"297:16541:49","usedErrors":[8071,8074,8077],"usedEvents":[]}],"src":"101:16738:49"},"id":49},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","exportedSymbols":{"ECDSA":[9595]},"id":9596,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9249,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:50"},{"abstract":false,"baseContracts":[],"canonicalName":"ECDSA","contractDependencies":[],"contractKind":"library","documentation":{"id":9250,"nodeType":"StructuredDocumentation","src":"138:205:50","text":" @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."},"fullyImplemented":true,"id":9595,"linearizedBaseContracts":[9595],"name":"ECDSA","nameLocation":"352:5:50","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ECDSA.RecoverError","id":9255,"members":[{"id":9251,"name":"NoError","nameLocation":"392:7:50","nodeType":"EnumValue","src":"392:7:50"},{"id":9252,"name":"InvalidSignature","nameLocation":"409:16:50","nodeType":"EnumValue","src":"409:16:50"},{"id":9253,"name":"InvalidSignatureLength","nameLocation":"435:22:50","nodeType":"EnumValue","src":"435:22:50"},{"id":9254,"name":"InvalidSignatureS","nameLocation":"467:17:50","nodeType":"EnumValue","src":"467:17:50"}],"name":"RecoverError","nameLocation":"369:12:50","nodeType":"EnumDefinition","src":"364:126:50"},{"documentation":{"id":9256,"nodeType":"StructuredDocumentation","src":"496:63:50","text":" @dev The signature derives the `address(0)`."},"errorSelector":"f645eedf","id":9258,"name":"ECDSAInvalidSignature","nameLocation":"570:21:50","nodeType":"ErrorDefinition","parameters":{"id":9257,"nodeType":"ParameterList","parameters":[],"src":"591:2:50"},"src":"564:30:50"},{"documentation":{"id":9259,"nodeType":"StructuredDocumentation","src":"600:60:50","text":" @dev The signature has an invalid length."},"errorSelector":"fce698f7","id":9263,"name":"ECDSAInvalidSignatureLength","nameLocation":"671:27:50","nodeType":"ErrorDefinition","parameters":{"id":9262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9261,"mutability":"mutable","name":"length","nameLocation":"707:6:50","nodeType":"VariableDeclaration","scope":9263,"src":"699:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9260,"name":"uint256","nodeType":"ElementaryTypeName","src":"699:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"698:16:50"},"src":"665:50:50"},{"documentation":{"id":9264,"nodeType":"StructuredDocumentation","src":"721:85:50","text":" @dev The signature has an S value that is in the upper half order."},"errorSelector":"d78bce0c","id":9268,"name":"ECDSAInvalidSignatureS","nameLocation":"817:22:50","nodeType":"ErrorDefinition","parameters":{"id":9267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9266,"mutability":"mutable","name":"s","nameLocation":"848:1:50","nodeType":"VariableDeclaration","scope":9268,"src":"840:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9265,"name":"bytes32","nodeType":"ElementaryTypeName","src":"840:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"839:11:50"},"src":"811:40:50"},{"body":{"id":9320,"nodeType":"Block","src":"2285:622:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9283,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9273,"src":"2299:9:50","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2309:6:50","memberName":"length","nodeType":"MemberAccess","src":"2299:16:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3635","id":9285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2319:2:50","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"65"},"src":"2299:22:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9318,"nodeType":"Block","src":"2793:108:50","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":9307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2823:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2815:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9305,"name":"address","nodeType":"ElementaryTypeName","src":"2815:7:50","typeDescriptions":{}}},"id":9308,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2815:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9309,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"2827:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9310,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2840:22:50","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":9253,"src":"2827:35:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"expression":{"id":9313,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9273,"src":"2872:9:50","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2882:6:50","memberName":"length","nodeType":"MemberAccess","src":"2872:16:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2864:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9311,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2864:7:50","typeDescriptions":{}}},"id":9315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2864:25:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2814:76:50","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9282,"id":9317,"nodeType":"Return","src":"2807:83:50"}]},"id":9319,"nodeType":"IfStatement","src":"2295:606:50","trueBody":{"id":9304,"nodeType":"Block","src":"2323:464:50","statements":[{"assignments":[9288],"declarations":[{"constant":false,"id":9288,"mutability":"mutable","name":"r","nameLocation":"2345:1:50","nodeType":"VariableDeclaration","scope":9304,"src":"2337:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2337:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9289,"nodeType":"VariableDeclarationStatement","src":"2337:9:50"},{"assignments":[9291],"declarations":[{"constant":false,"id":9291,"mutability":"mutable","name":"s","nameLocation":"2368:1:50","nodeType":"VariableDeclaration","scope":9304,"src":"2360:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9290,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2360:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9292,"nodeType":"VariableDeclarationStatement","src":"2360:9:50"},{"assignments":[9294],"declarations":[{"constant":false,"id":9294,"mutability":"mutable","name":"v","nameLocation":"2389:1:50","nodeType":"VariableDeclaration","scope":9304,"src":"2383:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9293,"name":"uint8","nodeType":"ElementaryTypeName","src":"2383:5:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":9295,"nodeType":"VariableDeclarationStatement","src":"2383:7:50"},{"AST":{"nativeSrc":"2560:171:50","nodeType":"YulBlock","src":"2560:171:50","statements":[{"nativeSrc":"2578:32:50","nodeType":"YulAssignment","src":"2578:32:50","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2593:9:50","nodeType":"YulIdentifier","src":"2593:9:50"},{"kind":"number","nativeSrc":"2604:4:50","nodeType":"YulLiteral","src":"2604:4:50","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2589:3:50","nodeType":"YulIdentifier","src":"2589:3:50"},"nativeSrc":"2589:20:50","nodeType":"YulFunctionCall","src":"2589:20:50"}],"functionName":{"name":"mload","nativeSrc":"2583:5:50","nodeType":"YulIdentifier","src":"2583:5:50"},"nativeSrc":"2583:27:50","nodeType":"YulFunctionCall","src":"2583:27:50"},"variableNames":[{"name":"r","nativeSrc":"2578:1:50","nodeType":"YulIdentifier","src":"2578:1:50"}]},{"nativeSrc":"2627:32:50","nodeType":"YulAssignment","src":"2627:32:50","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2642:9:50","nodeType":"YulIdentifier","src":"2642:9:50"},{"kind":"number","nativeSrc":"2653:4:50","nodeType":"YulLiteral","src":"2653:4:50","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"2638:3:50","nodeType":"YulIdentifier","src":"2638:3:50"},"nativeSrc":"2638:20:50","nodeType":"YulFunctionCall","src":"2638:20:50"}],"functionName":{"name":"mload","nativeSrc":"2632:5:50","nodeType":"YulIdentifier","src":"2632:5:50"},"nativeSrc":"2632:27:50","nodeType":"YulFunctionCall","src":"2632:27:50"},"variableNames":[{"name":"s","nativeSrc":"2627:1:50","nodeType":"YulIdentifier","src":"2627:1:50"}]},{"nativeSrc":"2676:41:50","nodeType":"YulAssignment","src":"2676:41:50","value":{"arguments":[{"kind":"number","nativeSrc":"2686:1:50","nodeType":"YulLiteral","src":"2686:1:50","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2699:9:50","nodeType":"YulIdentifier","src":"2699:9:50"},{"kind":"number","nativeSrc":"2710:4:50","nodeType":"YulLiteral","src":"2710:4:50","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"2695:3:50","nodeType":"YulIdentifier","src":"2695:3:50"},"nativeSrc":"2695:20:50","nodeType":"YulFunctionCall","src":"2695:20:50"}],"functionName":{"name":"mload","nativeSrc":"2689:5:50","nodeType":"YulIdentifier","src":"2689:5:50"},"nativeSrc":"2689:27:50","nodeType":"YulFunctionCall","src":"2689:27:50"}],"functionName":{"name":"byte","nativeSrc":"2681:4:50","nodeType":"YulIdentifier","src":"2681:4:50"},"nativeSrc":"2681:36:50","nodeType":"YulFunctionCall","src":"2681:36:50"},"variableNames":[{"name":"v","nativeSrc":"2676:1:50","nodeType":"YulIdentifier","src":"2676:1:50"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9288,"isOffset":false,"isSlot":false,"src":"2578:1:50","valueSize":1},{"declaration":9291,"isOffset":false,"isSlot":false,"src":"2627:1:50","valueSize":1},{"declaration":9273,"isOffset":false,"isSlot":false,"src":"2593:9:50","valueSize":1},{"declaration":9273,"isOffset":false,"isSlot":false,"src":"2642:9:50","valueSize":1},{"declaration":9273,"isOffset":false,"isSlot":false,"src":"2699:9:50","valueSize":1},{"declaration":9294,"isOffset":false,"isSlot":false,"src":"2676:1:50","valueSize":1}],"flags":["memory-safe"],"id":9296,"nodeType":"InlineAssembly","src":"2535:196:50"},{"expression":{"arguments":[{"id":9298,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9271,"src":"2762:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9299,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9294,"src":"2768:1:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":9300,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9288,"src":"2771:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9301,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9291,"src":"2774:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9297,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[9321,9401,9509],"referencedDeclaration":9509,"src":"2751:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":9302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2751:25:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9282,"id":9303,"nodeType":"Return","src":"2744:32:50"}]}}]},"documentation":{"id":9269,"nodeType":"StructuredDocumentation","src":"857:1267:50","text":" @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]"},"id":9321,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"2138:10:50","nodeType":"FunctionDefinition","parameters":{"id":9274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9271,"mutability":"mutable","name":"hash","nameLocation":"2166:4:50","nodeType":"VariableDeclaration","scope":9321,"src":"2158:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9270,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2158:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9273,"mutability":"mutable","name":"signature","nameLocation":"2193:9:50","nodeType":"VariableDeclaration","scope":9321,"src":"2180:22:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9272,"name":"bytes","nodeType":"ElementaryTypeName","src":"2180:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2148:60:50"},"returnParameters":{"id":9282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9276,"mutability":"mutable","name":"recovered","nameLocation":"2240:9:50","nodeType":"VariableDeclaration","scope":9321,"src":"2232:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9275,"name":"address","nodeType":"ElementaryTypeName","src":"2232:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9279,"mutability":"mutable","name":"err","nameLocation":"2264:3:50","nodeType":"VariableDeclaration","scope":9321,"src":"2251:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9278,"nodeType":"UserDefinedTypeName","pathNode":{"id":9277,"name":"RecoverError","nameLocations":["2251:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"2251:12:50"},"referencedDeclaration":9255,"src":"2251:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9281,"mutability":"mutable","name":"errArg","nameLocation":"2277:6:50","nodeType":"VariableDeclaration","scope":9321,"src":"2269:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9280,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2269:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2231:53:50"},"scope":9595,"src":"2129:778:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9350,"nodeType":"Block","src":"3801:168:50","statements":[{"assignments":[9332,9335,9337],"declarations":[{"constant":false,"id":9332,"mutability":"mutable","name":"recovered","nameLocation":"3820:9:50","nodeType":"VariableDeclaration","scope":9350,"src":"3812:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9331,"name":"address","nodeType":"ElementaryTypeName","src":"3812:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9335,"mutability":"mutable","name":"error","nameLocation":"3844:5:50","nodeType":"VariableDeclaration","scope":9350,"src":"3831:18:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9334,"nodeType":"UserDefinedTypeName","pathNode":{"id":9333,"name":"RecoverError","nameLocations":["3831:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"3831:12:50"},"referencedDeclaration":9255,"src":"3831:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9337,"mutability":"mutable","name":"errorArg","nameLocation":"3859:8:50","nodeType":"VariableDeclaration","scope":9350,"src":"3851:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9336,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3851:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9342,"initialValue":{"arguments":[{"id":9339,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9324,"src":"3882:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9340,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9326,"src":"3888:9:50","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9338,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[9321,9401,9509],"referencedDeclaration":9321,"src":"3871:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":9341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3871:27:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"3811:87:50"},{"expression":{"arguments":[{"id":9344,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9335,"src":"3920:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"id":9345,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9337,"src":"3927:8:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9343,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9594,"src":"3908:11:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$9255_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":9346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3908:28:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9347,"nodeType":"ExpressionStatement","src":"3908:28:50"},{"expression":{"id":9348,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9332,"src":"3953:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9330,"id":9349,"nodeType":"Return","src":"3946:16:50"}]},"documentation":{"id":9322,"nodeType":"StructuredDocumentation","src":"2913:796:50","text":" @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it."},"id":9351,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"3723:7:50","nodeType":"FunctionDefinition","parameters":{"id":9327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9324,"mutability":"mutable","name":"hash","nameLocation":"3739:4:50","nodeType":"VariableDeclaration","scope":9351,"src":"3731:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9323,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3731:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9326,"mutability":"mutable","name":"signature","nameLocation":"3758:9:50","nodeType":"VariableDeclaration","scope":9351,"src":"3745:22:50","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9325,"name":"bytes","nodeType":"ElementaryTypeName","src":"3745:5:50","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3730:38:50"},"returnParameters":{"id":9330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9329,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9351,"src":"3792:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9328,"name":"address","nodeType":"ElementaryTypeName","src":"3792:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3791:9:50"},"scope":9595,"src":"3714:255:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9400,"nodeType":"Block","src":"4348:342:50","statements":[{"id":9399,"nodeType":"UncheckedBlock","src":"4358:326:50","statements":[{"assignments":[9369],"declarations":[{"constant":false,"id":9369,"mutability":"mutable","name":"s","nameLocation":"4390:1:50","nodeType":"VariableDeclaration","scope":9399,"src":"4382:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9368,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4382:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9376,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":9375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9370,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9358,"src":"4394:2:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"arguments":[{"hexValue":"307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":9373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4407:66:50","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"},"value":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"}],"id":9372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4399:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9371,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4399:7:50","typeDescriptions":{}}},"id":9374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4399:75:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4394:80:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4382:92:50"},{"assignments":[9378],"declarations":[{"constant":false,"id":9378,"mutability":"mutable","name":"v","nameLocation":"4591:1:50","nodeType":"VariableDeclaration","scope":9399,"src":"4585:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9377,"name":"uint8","nodeType":"ElementaryTypeName","src":"4585:5:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":9391,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9383,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9358,"src":"4610:2:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9382,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9381,"name":"uint256","nodeType":"ElementaryTypeName","src":"4602:7:50","typeDescriptions":{}}},"id":9384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4602:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":9385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4617:3:50","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"4602:18:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9387,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:20:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3237","id":9388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4624:2:50","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"4601:25:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4595:5:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":9379,"name":"uint8","nodeType":"ElementaryTypeName","src":"4595:5:50","typeDescriptions":{}}},"id":9390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4595:32:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4585:42:50"},{"expression":{"arguments":[{"id":9393,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9354,"src":"4659:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9394,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9378,"src":"4665:1:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":9395,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9356,"src":"4668:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9396,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9369,"src":"4671:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9392,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[9321,9401,9509],"referencedDeclaration":9509,"src":"4648:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":9397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4648:25:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9367,"id":9398,"nodeType":"Return","src":"4641:32:50"}]}]},"documentation":{"id":9352,"nodeType":"StructuredDocumentation","src":"3975:205:50","text":" @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]"},"id":9401,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"4194:10:50","nodeType":"FunctionDefinition","parameters":{"id":9359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9354,"mutability":"mutable","name":"hash","nameLocation":"4222:4:50","nodeType":"VariableDeclaration","scope":9401,"src":"4214:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9353,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4214:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9356,"mutability":"mutable","name":"r","nameLocation":"4244:1:50","nodeType":"VariableDeclaration","scope":9401,"src":"4236:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9355,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4236:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9358,"mutability":"mutable","name":"vs","nameLocation":"4263:2:50","nodeType":"VariableDeclaration","scope":9401,"src":"4255:10:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9357,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4255:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4204:67:50"},"returnParameters":{"id":9367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9361,"mutability":"mutable","name":"recovered","nameLocation":"4303:9:50","nodeType":"VariableDeclaration","scope":9401,"src":"4295:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9360,"name":"address","nodeType":"ElementaryTypeName","src":"4295:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9364,"mutability":"mutable","name":"err","nameLocation":"4327:3:50","nodeType":"VariableDeclaration","scope":9401,"src":"4314:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9363,"nodeType":"UserDefinedTypeName","pathNode":{"id":9362,"name":"RecoverError","nameLocations":["4314:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"4314:12:50"},"referencedDeclaration":9255,"src":"4314:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9366,"mutability":"mutable","name":"errArg","nameLocation":"4340:6:50","nodeType":"VariableDeclaration","scope":9401,"src":"4332:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9365,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4332:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4294:53:50"},"scope":9595,"src":"4185:505:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9433,"nodeType":"Block","src":"4903:164:50","statements":[{"assignments":[9414,9417,9419],"declarations":[{"constant":false,"id":9414,"mutability":"mutable","name":"recovered","nameLocation":"4922:9:50","nodeType":"VariableDeclaration","scope":9433,"src":"4914:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9413,"name":"address","nodeType":"ElementaryTypeName","src":"4914:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9417,"mutability":"mutable","name":"error","nameLocation":"4946:5:50","nodeType":"VariableDeclaration","scope":9433,"src":"4933:18:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9416,"nodeType":"UserDefinedTypeName","pathNode":{"id":9415,"name":"RecoverError","nameLocations":["4933:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"4933:12:50"},"referencedDeclaration":9255,"src":"4933:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9419,"mutability":"mutable","name":"errorArg","nameLocation":"4961:8:50","nodeType":"VariableDeclaration","scope":9433,"src":"4953:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9418,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4953:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9425,"initialValue":{"arguments":[{"id":9421,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9404,"src":"4984:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9422,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9406,"src":"4990:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9423,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9408,"src":"4993:2:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9420,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[9321,9401,9509],"referencedDeclaration":9401,"src":"4973:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":9424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4973:23:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"4913:83:50"},{"expression":{"arguments":[{"id":9427,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9417,"src":"5018:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"id":9428,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9419,"src":"5025:8:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9426,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9594,"src":"5006:11:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$9255_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":9429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5006:28:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9430,"nodeType":"ExpressionStatement","src":"5006:28:50"},{"expression":{"id":9431,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9414,"src":"5051:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9412,"id":9432,"nodeType":"Return","src":"5044:16:50"}]},"documentation":{"id":9402,"nodeType":"StructuredDocumentation","src":"4696:116:50","text":" @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately."},"id":9434,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"4826:7:50","nodeType":"FunctionDefinition","parameters":{"id":9409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9404,"mutability":"mutable","name":"hash","nameLocation":"4842:4:50","nodeType":"VariableDeclaration","scope":9434,"src":"4834:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9403,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4834:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9406,"mutability":"mutable","name":"r","nameLocation":"4856:1:50","nodeType":"VariableDeclaration","scope":9434,"src":"4848:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9405,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4848:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9408,"mutability":"mutable","name":"vs","nameLocation":"4867:2:50","nodeType":"VariableDeclaration","scope":9434,"src":"4859:10:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9407,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4859:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4833:37:50"},"returnParameters":{"id":9412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9434,"src":"4894:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9410,"name":"address","nodeType":"ElementaryTypeName","src":"4894:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4893:9:50"},"scope":9595,"src":"4817:250:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9508,"nodeType":"Block","src":"5382:1372:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9455,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9443,"src":"6278:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6270:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9453,"name":"uint256","nodeType":"ElementaryTypeName","src":"6270:7:50","typeDescriptions":{}}},"id":9456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6270:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130","id":9457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6283:66:50","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1","typeString":"int_const 5789...(69 digits omitted)...7168"},"value":"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"},"src":"6270:79:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9469,"nodeType":"IfStatement","src":"6266:164:50","trueBody":{"id":9468,"nodeType":"Block","src":"6351:79:50","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":9461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6381:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6373:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9459,"name":"address","nodeType":"ElementaryTypeName","src":"6373:7:50","typeDescriptions":{}}},"id":9462,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6373:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9463,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"6385:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6398:17:50","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":9254,"src":"6385:30:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"id":9465,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9443,"src":"6417:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9466,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6372:47:50","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9452,"id":9467,"nodeType":"Return","src":"6365:54:50"}]}},{"assignments":[9471],"declarations":[{"constant":false,"id":9471,"mutability":"mutable","name":"signer","nameLocation":"6532:6:50","nodeType":"VariableDeclaration","scope":9508,"src":"6524:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9470,"name":"address","nodeType":"ElementaryTypeName","src":"6524:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":9478,"initialValue":{"arguments":[{"id":9473,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9437,"src":"6551:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9474,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9439,"src":"6557:1:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":9475,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9441,"src":"6560:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9476,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9443,"src":"6563:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9472,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"6541:9:50","typeDescriptions":{"typeIdentifier":"t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":9477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6541:24:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6524:41:50"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9479,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"6579:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":9482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6597:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6589:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9480,"name":"address","nodeType":"ElementaryTypeName","src":"6589:7:50","typeDescriptions":{}}},"id":9483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6589:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6579:20:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9498,"nodeType":"IfStatement","src":"6575:113:50","trueBody":{"id":9497,"nodeType":"Block","src":"6601:87:50","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":9487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6631:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6623:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9485,"name":"address","nodeType":"ElementaryTypeName","src":"6623:7:50","typeDescriptions":{}}},"id":9488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6623:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9489,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"6635:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6648:16:50","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":9252,"src":"6635:29:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":9493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6674:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6666:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9491,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6666:7:50","typeDescriptions":{}}},"id":9494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6666:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9495,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6622:55:50","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9452,"id":9496,"nodeType":"Return","src":"6615:62:50"}]}},{"expression":{"components":[{"id":9499,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9471,"src":"6706:6:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":9500,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"6714:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6727:7:50","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":9251,"src":"6714:20:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":9504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6744:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6736:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9502,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6736:7:50","typeDescriptions":{}}},"id":9505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6736:10:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":9506,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6705:42:50","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":9452,"id":9507,"nodeType":"Return","src":"6698:49:50"}]},"documentation":{"id":9435,"nodeType":"StructuredDocumentation","src":"5073:125:50","text":" @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":9509,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"5212:10:50","nodeType":"FunctionDefinition","parameters":{"id":9444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9437,"mutability":"mutable","name":"hash","nameLocation":"5240:4:50","nodeType":"VariableDeclaration","scope":9509,"src":"5232:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9436,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5232:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9439,"mutability":"mutable","name":"v","nameLocation":"5260:1:50","nodeType":"VariableDeclaration","scope":9509,"src":"5254:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9438,"name":"uint8","nodeType":"ElementaryTypeName","src":"5254:5:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":9441,"mutability":"mutable","name":"r","nameLocation":"5279:1:50","nodeType":"VariableDeclaration","scope":9509,"src":"5271:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9440,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5271:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9443,"mutability":"mutable","name":"s","nameLocation":"5298:1:50","nodeType":"VariableDeclaration","scope":9509,"src":"5290:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9442,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5290:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5222:83:50"},"returnParameters":{"id":9452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9446,"mutability":"mutable","name":"recovered","nameLocation":"5337:9:50","nodeType":"VariableDeclaration","scope":9509,"src":"5329:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9445,"name":"address","nodeType":"ElementaryTypeName","src":"5329:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9449,"mutability":"mutable","name":"err","nameLocation":"5361:3:50","nodeType":"VariableDeclaration","scope":9509,"src":"5348:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9448,"nodeType":"UserDefinedTypeName","pathNode":{"id":9447,"name":"RecoverError","nameLocations":["5348:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"5348:12:50"},"referencedDeclaration":9255,"src":"5348:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9451,"mutability":"mutable","name":"errArg","nameLocation":"5374:6:50","nodeType":"VariableDeclaration","scope":9509,"src":"5366:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9450,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5366:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5328:53:50"},"scope":9595,"src":"5203:1551:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9544,"nodeType":"Block","src":"6981:166:50","statements":[{"assignments":[9524,9527,9529],"declarations":[{"constant":false,"id":9524,"mutability":"mutable","name":"recovered","nameLocation":"7000:9:50","nodeType":"VariableDeclaration","scope":9544,"src":"6992:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9523,"name":"address","nodeType":"ElementaryTypeName","src":"6992:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9527,"mutability":"mutable","name":"error","nameLocation":"7024:5:50","nodeType":"VariableDeclaration","scope":9544,"src":"7011:18:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9526,"nodeType":"UserDefinedTypeName","pathNode":{"id":9525,"name":"RecoverError","nameLocations":["7011:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"7011:12:50"},"referencedDeclaration":9255,"src":"7011:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9529,"mutability":"mutable","name":"errorArg","nameLocation":"7039:8:50","nodeType":"VariableDeclaration","scope":9544,"src":"7031:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9528,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7031:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9536,"initialValue":{"arguments":[{"id":9531,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9512,"src":"7062:4:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9532,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9514,"src":"7068:1:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":9533,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9516,"src":"7071:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9534,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9518,"src":"7074:1:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9530,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[9321,9401,9509],"referencedDeclaration":9509,"src":"7051:10:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":9535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7051:25:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$9255_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"6991:85:50"},{"expression":{"arguments":[{"id":9538,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9527,"src":"7098:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},{"id":9539,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9529,"src":"7105:8:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9537,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9594,"src":"7086:11:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$9255_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":9540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7086:28:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9541,"nodeType":"ExpressionStatement","src":"7086:28:50"},{"expression":{"id":9542,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9524,"src":"7131:9:50","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":9522,"id":9543,"nodeType":"Return","src":"7124:16:50"}]},"documentation":{"id":9510,"nodeType":"StructuredDocumentation","src":"6760:122:50","text":" @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":9545,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"6896:7:50","nodeType":"FunctionDefinition","parameters":{"id":9519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9512,"mutability":"mutable","name":"hash","nameLocation":"6912:4:50","nodeType":"VariableDeclaration","scope":9545,"src":"6904:12:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6904:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9514,"mutability":"mutable","name":"v","nameLocation":"6924:1:50","nodeType":"VariableDeclaration","scope":9545,"src":"6918:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":9513,"name":"uint8","nodeType":"ElementaryTypeName","src":"6918:5:50","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":9516,"mutability":"mutable","name":"r","nameLocation":"6935:1:50","nodeType":"VariableDeclaration","scope":9545,"src":"6927:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9515,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6927:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9518,"mutability":"mutable","name":"s","nameLocation":"6946:1:50","nodeType":"VariableDeclaration","scope":9545,"src":"6938:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9517,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6938:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6903:45:50"},"returnParameters":{"id":9522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9521,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9545,"src":"6972:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9520,"name":"address","nodeType":"ElementaryTypeName","src":"6972:7:50","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6971:9:50"},"scope":9595,"src":"6887:260:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9593,"nodeType":"Block","src":"7352:460:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"id":9557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9554,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"7366:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":9555,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"7375:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7388:7:50","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":9251,"src":"7375:20:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"src":"7366:29:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"id":9563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9560,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"7462:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":9561,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"7471:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7484:16:50","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":9252,"src":"7471:29:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"src":"7462:38:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"id":9571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9568,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"7567:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":9569,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"7576:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7589:22:50","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":9253,"src":"7576:35:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"src":"7567:44:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"id":9583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9580,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9549,"src":"7701:5:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":9581,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9255,"src":"7710:12:50","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$9255_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":9582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7723:17:50","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":9254,"src":"7710:30:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"src":"7701:39:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9589,"nodeType":"IfStatement","src":"7697:109:50","trueBody":{"id":9588,"nodeType":"Block","src":"7742:64:50","statements":[{"errorCall":{"arguments":[{"id":9585,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"7786:8:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9584,"name":"ECDSAInvalidSignatureS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9268,"src":"7763:22:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes32_$returns$_t_error_$","typeString":"function (bytes32) pure returns (error)"}},"id":9586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7763:32:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9587,"nodeType":"RevertStatement","src":"7756:39:50"}]}},"id":9590,"nodeType":"IfStatement","src":"7563:243:50","trueBody":{"id":9579,"nodeType":"Block","src":"7613:78:50","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":9575,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9551,"src":"7670:8:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7662:7:50","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9573,"name":"uint256","nodeType":"ElementaryTypeName","src":"7662:7:50","typeDescriptions":{}}},"id":9576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7662:17:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9572,"name":"ECDSAInvalidSignatureLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9263,"src":"7634:27:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":9577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7634:46:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9578,"nodeType":"RevertStatement","src":"7627:53:50"}]}},"id":9591,"nodeType":"IfStatement","src":"7458:348:50","trueBody":{"id":9567,"nodeType":"Block","src":"7502:55:50","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9564,"name":"ECDSAInvalidSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9258,"src":"7523:21:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7523:23:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9566,"nodeType":"RevertStatement","src":"7516:30:50"}]}},"id":9592,"nodeType":"IfStatement","src":"7362:444:50","trueBody":{"id":9559,"nodeType":"Block","src":"7397:55:50","statements":[{"functionReturnParameters":9553,"id":9558,"nodeType":"Return","src":"7411:7:50"}]}}]},"documentation":{"id":9546,"nodeType":"StructuredDocumentation","src":"7153:122:50","text":" @dev Optionally reverts with the corresponding custom error according to the `error` argument provided."},"id":9594,"implemented":true,"kind":"function","modifiers":[],"name":"_throwError","nameLocation":"7289:11:50","nodeType":"FunctionDefinition","parameters":{"id":9552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9549,"mutability":"mutable","name":"error","nameLocation":"7314:5:50","nodeType":"VariableDeclaration","scope":9594,"src":"7301:18:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":9548,"nodeType":"UserDefinedTypeName","pathNode":{"id":9547,"name":"RecoverError","nameLocations":["7301:12:50"],"nodeType":"IdentifierPath","referencedDeclaration":9255,"src":"7301:12:50"},"referencedDeclaration":9255,"src":"7301:12:50","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$9255","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":9551,"mutability":"mutable","name":"errorArg","nameLocation":"7329:8:50","nodeType":"VariableDeclaration","scope":9594,"src":"7321:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9550,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7321:7:50","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7300:38:50"},"returnParameters":{"id":9553,"nodeType":"ParameterList","parameters":[],"src":"7352:0:50"},"scope":9595,"src":"7280:532:50","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9596,"src":"344:7470:50","usedErrors":[9258,9263,9268],"usedEvents":[]}],"src":"112:7703:50"},"id":50},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","exportedSymbols":{"EIP712":[9822],"IERC5267":[7325],"MessageHashUtils":[9896],"ShortString":[7712],"ShortStrings":[7923]},"id":9823,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9597,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"113:24:51"},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","file":"./MessageHashUtils.sol","id":9599,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9823,"sourceUnit":9897,"src":"139:56:51","symbolAliases":[{"foreign":{"id":9598,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9896,"src":"147:16:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","file":"../ShortStrings.sol","id":9602,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9823,"sourceUnit":7924,"src":"196:62:51","symbolAliases":[{"foreign":{"id":9600,"name":"ShortStrings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7923,"src":"204:12:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":9601,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7712,"src":"218:11:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","file":"../../interfaces/IERC5267.sol","id":9604,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9823,"sourceUnit":7326,"src":"259:55:51","symbolAliases":[{"foreign":{"id":9603,"name":"IERC5267","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7325,"src":"267:8:51","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9606,"name":"IERC5267","nameLocations":["1988:8:51"],"nodeType":"IdentifierPath","referencedDeclaration":7325,"src":"1988:8:51"},"id":9607,"nodeType":"InheritanceSpecifier","src":"1988:8:51"}],"canonicalName":"EIP712","contractDependencies":[],"contractKind":"contract","documentation":{"id":9605,"nodeType":"StructuredDocumentation","src":"316:1643:51","text":" @dev https://eips.ethereum.org/EIPS/eip-712[EIP-712] is a standard for hashing and signing of typed structured data.\n The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP-712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"fullyImplemented":true,"id":9822,"linearizedBaseContracts":[9822,7325],"name":"EIP712","nameLocation":"1978:6:51","nodeType":"ContractDefinition","nodes":[{"global":false,"id":9609,"libraryName":{"id":9608,"name":"ShortStrings","nameLocations":["2009:12:51"],"nodeType":"IdentifierPath","referencedDeclaration":7923,"src":"2009:12:51"},"nodeType":"UsingForDirective","src":"2003:25:51"},{"constant":true,"id":9614,"mutability":"constant","name":"TYPE_HASH","nameLocation":"2059:9:51","nodeType":"VariableDeclaration","scope":9822,"src":"2034:140:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9610,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2034:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":9612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2089:84:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""}],"id":9611,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2079:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2079:95:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":9616,"mutability":"immutable","name":"_cachedDomainSeparator","nameLocation":"2399:22:51","nodeType":"VariableDeclaration","scope":9822,"src":"2373:48:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9615,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2373:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":9618,"mutability":"immutable","name":"_cachedChainId","nameLocation":"2453:14:51","nodeType":"VariableDeclaration","scope":9822,"src":"2427:40:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9617,"name":"uint256","nodeType":"ElementaryTypeName","src":"2427:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":9620,"mutability":"immutable","name":"_cachedThis","nameLocation":"2499:11:51","nodeType":"VariableDeclaration","scope":9822,"src":"2473:37:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9619,"name":"address","nodeType":"ElementaryTypeName","src":"2473:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":9622,"mutability":"immutable","name":"_hashedName","nameLocation":"2543:11:51","nodeType":"VariableDeclaration","scope":9822,"src":"2517:37:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9621,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2517:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":9624,"mutability":"immutable","name":"_hashedVersion","nameLocation":"2586:14:51","nodeType":"VariableDeclaration","scope":9822,"src":"2560:40:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9623,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2560:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":9627,"mutability":"immutable","name":"_name","nameLocation":"2637:5:51","nodeType":"VariableDeclaration","scope":9822,"src":"2607:35:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":9626,"nodeType":"UserDefinedTypeName","pathNode":{"id":9625,"name":"ShortString","nameLocations":["2607:11:51"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"2607:11:51"},"referencedDeclaration":7712,"src":"2607:11:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":9630,"mutability":"immutable","name":"_version","nameLocation":"2678:8:51","nodeType":"VariableDeclaration","scope":9822,"src":"2648:38:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"},"typeName":{"id":9629,"nodeType":"UserDefinedTypeName","pathNode":{"id":9628,"name":"ShortString","nameLocations":["2648:11:51"],"nodeType":"IdentifierPath","referencedDeclaration":7712,"src":"2648:11:51"},"referencedDeclaration":7712,"src":"2648:11:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":9632,"mutability":"mutable","name":"_nameFallback","nameLocation":"2707:13:51","nodeType":"VariableDeclaration","scope":9822,"src":"2692:28:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9631,"name":"string","nodeType":"ElementaryTypeName","src":"2692:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":9634,"mutability":"mutable","name":"_versionFallback","nameLocation":"2741:16:51","nodeType":"VariableDeclaration","scope":9822,"src":"2726:31:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":9633,"name":"string","nodeType":"ElementaryTypeName","src":"2726:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":9691,"nodeType":"Block","src":"3383:376:51","statements":[{"expression":{"id":9647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9642,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9627,"src":"3393:5:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9645,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"3432:13:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":9643,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9637,"src":"3401:4:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":9644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3406:25:51","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7864,"src":"3401:30:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$7712_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":9646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3401:45:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"src":"3393:53:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"id":9648,"nodeType":"ExpressionStatement","src":"3393:53:51"},{"expression":{"id":9654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9649,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9630,"src":"3456:8:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9652,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9634,"src":"3501:16:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":9650,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9639,"src":"3467:7:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":9651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3475:25:51","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7864,"src":"3467:33:51","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$7712_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":9653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3467:51:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"src":"3456:62:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"id":9655,"nodeType":"ExpressionStatement","src":"3456:62:51"},{"expression":{"id":9663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9656,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9622,"src":"3528:11:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":9660,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9637,"src":"3558:4:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3552:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9658,"name":"bytes","nodeType":"ElementaryTypeName","src":"3552:5:51","typeDescriptions":{}}},"id":9661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3552:11:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9657,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3542:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:22:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3528:36:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9664,"nodeType":"ExpressionStatement","src":"3528:36:51"},{"expression":{"id":9672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9665,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9624,"src":"3574:14:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":9669,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9639,"src":"3607:7:51","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3601:5:51","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9667,"name":"bytes","nodeType":"ElementaryTypeName","src":"3601:5:51","typeDescriptions":{}}},"id":9670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3601:14:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9666,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3591:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:25:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3574:42:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9673,"nodeType":"ExpressionStatement","src":"3574:42:51"},{"expression":{"id":9677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9674,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9618,"src":"3627:14:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":9675,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3644:5:51","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3650:7:51","memberName":"chainid","nodeType":"MemberAccess","src":"3644:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3627:30:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9678,"nodeType":"ExpressionStatement","src":"3627:30:51"},{"expression":{"id":9682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9679,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9616,"src":"3667:22:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":9680,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9739,"src":"3692:21:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":9681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3692:23:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3667:48:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9683,"nodeType":"ExpressionStatement","src":"3667:48:51"},{"expression":{"id":9689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9684,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9620,"src":"3725:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":9687,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3747:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}],"id":9686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3739:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9685,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:51","typeDescriptions":{}}},"id":9688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3739:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3725:27:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9690,"nodeType":"ExpressionStatement","src":"3725:27:51"}]},"documentation":{"id":9635,"nodeType":"StructuredDocumentation","src":"2764:559:51","text":" @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP-712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]."},"id":9692,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9637,"mutability":"mutable","name":"name","nameLocation":"3354:4:51","nodeType":"VariableDeclaration","scope":9692,"src":"3340:18:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9636,"name":"string","nodeType":"ElementaryTypeName","src":"3340:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9639,"mutability":"mutable","name":"version","nameLocation":"3374:7:51","nodeType":"VariableDeclaration","scope":9692,"src":"3360:21:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9638,"name":"string","nodeType":"ElementaryTypeName","src":"3360:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3339:43:51"},"returnParameters":{"id":9641,"nodeType":"ParameterList","parameters":[],"src":"3383:0:51"},"scope":9822,"src":"3328:431:51","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9717,"nodeType":"Block","src":"3907:200:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":9703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9700,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3929:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}],"id":9699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3921:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9698,"name":"address","nodeType":"ElementaryTypeName","src":"3921:7:51","typeDescriptions":{}}},"id":9701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":9702,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9620,"src":"3938:11:51","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3921:28:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":9704,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3953:5:51","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3959:7:51","memberName":"chainid","nodeType":"MemberAccess","src":"3953:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":9706,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9618,"src":"3970:14:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3953:31:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3921:63:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9715,"nodeType":"Block","src":"4046:55:51","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9712,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9739,"src":"4067:21:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":9713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4067:23:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9697,"id":9714,"nodeType":"Return","src":"4060:30:51"}]},"id":9716,"nodeType":"IfStatement","src":"3917:184:51","trueBody":{"id":9711,"nodeType":"Block","src":"3986:54:51","statements":[{"expression":{"id":9709,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9616,"src":"4007:22:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9697,"id":9710,"nodeType":"Return","src":"4000:29:51"}]}}]},"documentation":{"id":9693,"nodeType":"StructuredDocumentation","src":"3765:75:51","text":" @dev Returns the domain separator for the current chain."},"id":9718,"implemented":true,"kind":"function","modifiers":[],"name":"_domainSeparatorV4","nameLocation":"3854:18:51","nodeType":"FunctionDefinition","parameters":{"id":9694,"nodeType":"ParameterList","parameters":[],"src":"3872:2:51"},"returnParameters":{"id":9697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9696,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9718,"src":"3898:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9695,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3898:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3897:9:51"},"scope":9822,"src":"3845:262:51","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9738,"nodeType":"Block","src":"4177:115:51","statements":[{"expression":{"arguments":[{"arguments":[{"id":9726,"name":"TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9614,"src":"4215:9:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9727,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9622,"src":"4226:11:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9728,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9624,"src":"4239:14:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":9729,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4255:5:51","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4261:7:51","memberName":"chainid","nodeType":"MemberAccess","src":"4255:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":9733,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4278:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}],"id":9732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9731,"name":"address","nodeType":"ElementaryTypeName","src":"4270:7:51","typeDescriptions":{}}},"id":9734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9724,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4204:3:51","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4208:6:51","memberName":"encode","nodeType":"MemberAccess","src":"4204:10:51","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4204:80:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9723,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4194:9:51","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4194:91:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9722,"id":9737,"nodeType":"Return","src":"4187:98:51"}]},"id":9739,"implemented":true,"kind":"function","modifiers":[],"name":"_buildDomainSeparator","nameLocation":"4122:21:51","nodeType":"FunctionDefinition","parameters":{"id":9719,"nodeType":"ParameterList","parameters":[],"src":"4143:2:51"},"returnParameters":{"id":9722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9739,"src":"4168:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9720,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4168:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4167:9:51"},"scope":9822,"src":"4113:179:51","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":9754,"nodeType":"Block","src":"5003:90:51","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":9749,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9718,"src":"5053:18:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":9750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5053:20:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":9751,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9742,"src":"5075:10:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":9747,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9896,"src":"5020:16:51","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MessageHashUtils_$9896_$","typeString":"type(library MessageHashUtils)"}},"id":9748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5037:15:51","memberName":"toTypedDataHash","nodeType":"MemberAccess","referencedDeclaration":9895,"src":"5020:32:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":9752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5020:66:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9746,"id":9753,"nodeType":"Return","src":"5013:73:51"}]},"documentation":{"id":9740,"nodeType":"StructuredDocumentation","src":"4298:614:51","text":" @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"},"id":9755,"implemented":true,"kind":"function","modifiers":[],"name":"_hashTypedDataV4","nameLocation":"4926:16:51","nodeType":"FunctionDefinition","parameters":{"id":9743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9742,"mutability":"mutable","name":"structHash","nameLocation":"4951:10:51","nodeType":"VariableDeclaration","scope":9755,"src":"4943:18:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9741,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4943:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4942:20:51"},"returnParameters":{"id":9746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9745,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9755,"src":"4994:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9744,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4994:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4993:9:51"},"scope":9822,"src":"4917:176:51","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[7324],"body":{"id":9796,"nodeType":"Block","src":"5472:229:51","statements":[{"expression":{"components":[{"hexValue":"0f","id":9774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"5503:7:51","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c","typeString":"literal_string hex\"0f\""},"value":"\u000f"},{"arguments":[],"expression":{"argumentTypes":[],"id":9775,"name":"_EIP712Name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9809,"src":"5533:11:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":9776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5533:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":9777,"name":"_EIP712Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9821,"src":"5560:14:51","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":9778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5560:16:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":9779,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5590:5:51","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":9780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5596:7:51","memberName":"chainid","nodeType":"MemberAccess","src":"5590:13:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":9783,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5625:4:51","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$9822","typeString":"contract EIP712"}],"id":9782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5617:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9781,"name":"address","nodeType":"ElementaryTypeName","src":"5617:7:51","typeDescriptions":{}}},"id":9784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5617:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":9787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5652:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5644:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9785,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5644:7:51","typeDescriptions":{}}},"id":9788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:10:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":9792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5682:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":9791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5668:13:51","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":9789,"name":"uint256","nodeType":"ElementaryTypeName","src":"5672:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9790,"nodeType":"ArrayTypeName","src":"5672:9:51","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":9793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5668:16:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":9794,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5489:205:51","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(literal_string hex\"0f\",string memory,string memory,uint256,address,bytes32,uint256[] memory)"}},"functionReturnParameters":9773,"id":9795,"nodeType":"Return","src":"5482:212:51"}]},"documentation":{"id":9756,"nodeType":"StructuredDocumentation","src":"5099:40:51","text":" @dev See {IERC-5267}."},"functionSelector":"84b0196e","id":9797,"implemented":true,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"5153:12:51","nodeType":"FunctionDefinition","parameters":{"id":9757,"nodeType":"ParameterList","parameters":[],"src":"5165:2:51"},"returnParameters":{"id":9773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9759,"mutability":"mutable","name":"fields","nameLocation":"5249:6:51","nodeType":"VariableDeclaration","scope":9797,"src":"5242:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":9758,"name":"bytes1","nodeType":"ElementaryTypeName","src":"5242:6:51","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":9761,"mutability":"mutable","name":"name","nameLocation":"5283:4:51","nodeType":"VariableDeclaration","scope":9797,"src":"5269:18:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9760,"name":"string","nodeType":"ElementaryTypeName","src":"5269:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9763,"mutability":"mutable","name":"version","nameLocation":"5315:7:51","nodeType":"VariableDeclaration","scope":9797,"src":"5301:21:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9762,"name":"string","nodeType":"ElementaryTypeName","src":"5301:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":9765,"mutability":"mutable","name":"chainId","nameLocation":"5344:7:51","nodeType":"VariableDeclaration","scope":9797,"src":"5336:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9764,"name":"uint256","nodeType":"ElementaryTypeName","src":"5336:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9767,"mutability":"mutable","name":"verifyingContract","nameLocation":"5373:17:51","nodeType":"VariableDeclaration","scope":9797,"src":"5365:25:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9766,"name":"address","nodeType":"ElementaryTypeName","src":"5365:7:51","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9769,"mutability":"mutable","name":"salt","nameLocation":"5412:4:51","nodeType":"VariableDeclaration","scope":9797,"src":"5404:12:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9768,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5404:7:51","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9772,"mutability":"mutable","name":"extensions","nameLocation":"5447:10:51","nodeType":"VariableDeclaration","scope":9797,"src":"5430:27:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9770,"name":"uint256","nodeType":"ElementaryTypeName","src":"5430:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9771,"nodeType":"ArrayTypeName","src":"5430:9:51","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5228:239:51"},"scope":9822,"src":"5144:557:51","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":9808,"nodeType":"Block","src":"6082:65:51","statements":[{"expression":{"arguments":[{"id":9805,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9632,"src":"6126:13:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":9803,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9627,"src":"6099:5:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"id":9804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6105:20:51","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7891,"src":"6099:26:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7712_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":9806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6099:41:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":9802,"id":9807,"nodeType":"Return","src":"6092:48:51"}]},"documentation":{"id":9798,"nodeType":"StructuredDocumentation","src":"5707:256:51","text":" @dev The name parameter for the EIP712 domain.\n NOTE: By default this function reads _name which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":9809,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Name","nameLocation":"6030:11:51","nodeType":"FunctionDefinition","parameters":{"id":9799,"nodeType":"ParameterList","parameters":[],"src":"6041:2:51"},"returnParameters":{"id":9802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9809,"src":"6067:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9800,"name":"string","nodeType":"ElementaryTypeName","src":"6067:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6066:15:51"},"scope":9822,"src":"6021:126:51","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":9820,"nodeType":"Block","src":"6537:71:51","statements":[{"expression":{"arguments":[{"id":9817,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9634,"src":"6584:16:51","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":9815,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9630,"src":"6554:8:51","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$7712","typeString":"ShortString"}},"id":9816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6563:20:51","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":7891,"src":"6554:29:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$7712_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$7712_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":9818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6554:47:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":9814,"id":9819,"nodeType":"Return","src":"6547:54:51"}]},"documentation":{"id":9810,"nodeType":"StructuredDocumentation","src":"6153:262:51","text":" @dev The version parameter for the EIP712 domain.\n NOTE: By default this function reads _version which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":9821,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Version","nameLocation":"6482:14:51","nodeType":"FunctionDefinition","parameters":{"id":9811,"nodeType":"ParameterList","parameters":[],"src":"6496:2:51"},"returnParameters":{"id":9814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9813,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9821,"src":"6522:13:51","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9812,"name":"string","nodeType":"ElementaryTypeName","src":"6522:6:51","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6521:15:51"},"scope":9822,"src":"6473:135:51","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":9823,"src":"1960:4650:51","usedErrors":[7720,7722],"usedEvents":[7305]}],"src":"113:6498:51"},"id":51},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","exportedSymbols":{"MessageHashUtils":[9896],"Strings":[9247]},"id":9897,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9824,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:52"},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../Strings.sol","id":9826,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9897,"sourceUnit":9248,"src":"149:39:52","symbolAliases":[{"foreign":{"id":9825,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9247,"src":"157:7:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MessageHashUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":9827,"nodeType":"StructuredDocumentation","src":"190:330:52","text":" @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n The library provides methods for generating a hash of a message that conforms to the\n https://eips.ethereum.org/EIPS/eip-191[ERC-191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n specifications."},"fullyImplemented":true,"id":9896,"linearizedBaseContracts":[9896],"name":"MessageHashUtils","nameLocation":"529:16:52","nodeType":"ContractDefinition","nodes":[{"body":{"id":9836,"nodeType":"Block","src":"1314:341:52","statements":[{"AST":{"nativeSrc":"1349:300:52","nodeType":"YulBlock","src":"1349:300:52","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1370:4:52","nodeType":"YulLiteral","src":"1370:4:52","type":"","value":"0x00"},{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a3332","kind":"string","nativeSrc":"1376:34:52","nodeType":"YulLiteral","src":"1376:34:52","type":"","value":"\u0019Ethereum Signed Message:\n32"}],"functionName":{"name":"mstore","nativeSrc":"1363:6:52","nodeType":"YulIdentifier","src":"1363:6:52"},"nativeSrc":"1363:48:52","nodeType":"YulFunctionCall","src":"1363:48:52"},"nativeSrc":"1363:48:52","nodeType":"YulExpressionStatement","src":"1363:48:52"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1472:4:52","nodeType":"YulLiteral","src":"1472:4:52","type":"","value":"0x1c"},{"name":"messageHash","nativeSrc":"1478:11:52","nodeType":"YulIdentifier","src":"1478:11:52"}],"functionName":{"name":"mstore","nativeSrc":"1465:6:52","nodeType":"YulIdentifier","src":"1465:6:52"},"nativeSrc":"1465:25:52","nodeType":"YulFunctionCall","src":"1465:25:52"},"nativeSrc":"1465:25:52","nodeType":"YulExpressionStatement","src":"1465:25:52"},{"nativeSrc":"1544:31:52","nodeType":"YulAssignment","src":"1544:31:52","value":{"arguments":[{"kind":"number","nativeSrc":"1564:4:52","nodeType":"YulLiteral","src":"1564:4:52","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1570:4:52","nodeType":"YulLiteral","src":"1570:4:52","type":"","value":"0x3c"}],"functionName":{"name":"keccak256","nativeSrc":"1554:9:52","nodeType":"YulIdentifier","src":"1554:9:52"},"nativeSrc":"1554:21:52","nodeType":"YulFunctionCall","src":"1554:21:52"},"variableNames":[{"name":"digest","nativeSrc":"1544:6:52","nodeType":"YulIdentifier","src":"1544:6:52"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9833,"isOffset":false,"isSlot":false,"src":"1544:6:52","valueSize":1},{"declaration":9830,"isOffset":false,"isSlot":false,"src":"1478:11:52","valueSize":1}],"flags":["memory-safe"],"id":9835,"nodeType":"InlineAssembly","src":"1324:325:52"}]},"documentation":{"id":9828,"nodeType":"StructuredDocumentation","src":"552:665:52","text":" @dev Returns the keccak256 digest of an ERC-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing a bytes32 `messageHash` with\n `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n keccak256, although any bytes32 value can be safely used because the final digest will\n be re-hashed.\n See {ECDSA-recover}."},"id":9837,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"1231:22:52","nodeType":"FunctionDefinition","parameters":{"id":9831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9830,"mutability":"mutable","name":"messageHash","nameLocation":"1262:11:52","nodeType":"VariableDeclaration","scope":9837,"src":"1254:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9829,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1254:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1253:21:52"},"returnParameters":{"id":9834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9833,"mutability":"mutable","name":"digest","nameLocation":"1306:6:52","nodeType":"VariableDeclaration","scope":9837,"src":"1298:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9832,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1297:16:52"},"scope":9896,"src":"1222:433:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9862,"nodeType":"Block","src":"2207:143:52","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a","id":9849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2259:32:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},"value":"\u0019Ethereum Signed Message:\n"},{"arguments":[{"arguments":[{"expression":{"id":9854,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9840,"src":"2316:7:52","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":9855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2324:6:52","memberName":"length","nodeType":"MemberAccess","src":"2316:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9852,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9247,"src":"2299:7:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$9247_$","typeString":"type(library Strings)"}},"id":9853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2307:8:52","memberName":"toString","nodeType":"MemberAccess","referencedDeclaration":8125,"src":"2299:16:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":9856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2299:32:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":9851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2293:5:52","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9850,"name":"bytes","nodeType":"ElementaryTypeName","src":"2293:5:52","typeDescriptions":{}}},"id":9857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":9858,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9840,"src":"2334:7:52","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2246:5:52","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":9846,"name":"bytes","nodeType":"ElementaryTypeName","src":"2246:5:52","typeDescriptions":{}}},"id":9848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2252:6:52","memberName":"concat","nodeType":"MemberAccess","src":"2246:12:52","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2246:96:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9845,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2236:9:52","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2236:107:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9844,"id":9861,"nodeType":"Return","src":"2217:126:52"}]},"documentation":{"id":9838,"nodeType":"StructuredDocumentation","src":"1661:455:52","text":" @dev Returns the keccak256 digest of an ERC-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing an arbitrary `message` with\n `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n See {ECDSA-recover}."},"id":9863,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"2130:22:52","nodeType":"FunctionDefinition","parameters":{"id":9841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9840,"mutability":"mutable","name":"message","nameLocation":"2166:7:52","nodeType":"VariableDeclaration","scope":9863,"src":"2153:20:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9839,"name":"bytes","nodeType":"ElementaryTypeName","src":"2153:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2152:22:52"},"returnParameters":{"id":9844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9863,"src":"2198:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9842,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2198:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2197:9:52"},"scope":9896,"src":"2121:229:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9882,"nodeType":"Block","src":"2804:80:52","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"1900","id":9876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2848:10:52","typeDescriptions":{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},"value":"\u0019\u0000"},{"id":9877,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9866,"src":"2860:9:52","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":9878,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9868,"src":"2871:4:52","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":9874,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2831:3:52","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":9875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2835:12:52","memberName":"encodePacked","nodeType":"MemberAccess","src":"2831:16:52","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":9879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2831:45:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":9873,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2821:9:52","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":9880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2821:56:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9872,"id":9881,"nodeType":"Return","src":"2814:63:52"}]},"documentation":{"id":9864,"nodeType":"StructuredDocumentation","src":"2356:332:52","text":" @dev Returns the keccak256 digest of an ERC-191 signed data with version\n `0x00` (data with intended validator).\n The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n `validator` address. Then hashing the result.\n See {ECDSA-recover}."},"id":9883,"implemented":true,"kind":"function","modifiers":[],"name":"toDataWithIntendedValidatorHash","nameLocation":"2702:31:52","nodeType":"FunctionDefinition","parameters":{"id":9869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9866,"mutability":"mutable","name":"validator","nameLocation":"2742:9:52","nodeType":"VariableDeclaration","scope":9883,"src":"2734:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9865,"name":"address","nodeType":"ElementaryTypeName","src":"2734:7:52","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":9868,"mutability":"mutable","name":"data","nameLocation":"2766:4:52","nodeType":"VariableDeclaration","scope":9883,"src":"2753:17:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":9867,"name":"bytes","nodeType":"ElementaryTypeName","src":"2753:5:52","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2733:38:52"},"returnParameters":{"id":9872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9883,"src":"2795:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9870,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2795:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2794:9:52"},"scope":9896,"src":"2693:191:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9894,"nodeType":"Block","src":"3435:265:52","statements":[{"AST":{"nativeSrc":"3470:224:52","nodeType":"YulBlock","src":"3470:224:52","statements":[{"nativeSrc":"3484:22:52","nodeType":"YulVariableDeclaration","src":"3484:22:52","value":{"arguments":[{"kind":"number","nativeSrc":"3501:4:52","nodeType":"YulLiteral","src":"3501:4:52","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"3495:5:52","nodeType":"YulIdentifier","src":"3495:5:52"},"nativeSrc":"3495:11:52","nodeType":"YulFunctionCall","src":"3495:11:52"},"variables":[{"name":"ptr","nativeSrc":"3488:3:52","nodeType":"YulTypedName","src":"3488:3:52","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"3526:3:52","nodeType":"YulIdentifier","src":"3526:3:52"},{"hexValue":"1901","kind":"string","nativeSrc":"3531:10:52","nodeType":"YulLiteral","src":"3531:10:52","type":"","value":"\u0019\u0001"}],"functionName":{"name":"mstore","nativeSrc":"3519:6:52","nodeType":"YulIdentifier","src":"3519:6:52"},"nativeSrc":"3519:23:52","nodeType":"YulFunctionCall","src":"3519:23:52"},"nativeSrc":"3519:23:52","nodeType":"YulExpressionStatement","src":"3519:23:52"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3566:3:52","nodeType":"YulIdentifier","src":"3566:3:52"},{"kind":"number","nativeSrc":"3571:4:52","nodeType":"YulLiteral","src":"3571:4:52","type":"","value":"0x02"}],"functionName":{"name":"add","nativeSrc":"3562:3:52","nodeType":"YulIdentifier","src":"3562:3:52"},"nativeSrc":"3562:14:52","nodeType":"YulFunctionCall","src":"3562:14:52"},{"name":"domainSeparator","nativeSrc":"3578:15:52","nodeType":"YulIdentifier","src":"3578:15:52"}],"functionName":{"name":"mstore","nativeSrc":"3555:6:52","nodeType":"YulIdentifier","src":"3555:6:52"},"nativeSrc":"3555:39:52","nodeType":"YulFunctionCall","src":"3555:39:52"},"nativeSrc":"3555:39:52","nodeType":"YulExpressionStatement","src":"3555:39:52"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3618:3:52","nodeType":"YulIdentifier","src":"3618:3:52"},{"kind":"number","nativeSrc":"3623:4:52","nodeType":"YulLiteral","src":"3623:4:52","type":"","value":"0x22"}],"functionName":{"name":"add","nativeSrc":"3614:3:52","nodeType":"YulIdentifier","src":"3614:3:52"},"nativeSrc":"3614:14:52","nodeType":"YulFunctionCall","src":"3614:14:52"},{"name":"structHash","nativeSrc":"3630:10:52","nodeType":"YulIdentifier","src":"3630:10:52"}],"functionName":{"name":"mstore","nativeSrc":"3607:6:52","nodeType":"YulIdentifier","src":"3607:6:52"},"nativeSrc":"3607:34:52","nodeType":"YulFunctionCall","src":"3607:34:52"},"nativeSrc":"3607:34:52","nodeType":"YulExpressionStatement","src":"3607:34:52"},{"nativeSrc":"3654:30:52","nodeType":"YulAssignment","src":"3654:30:52","value":{"arguments":[{"name":"ptr","nativeSrc":"3674:3:52","nodeType":"YulIdentifier","src":"3674:3:52"},{"kind":"number","nativeSrc":"3679:4:52","nodeType":"YulLiteral","src":"3679:4:52","type":"","value":"0x42"}],"functionName":{"name":"keccak256","nativeSrc":"3664:9:52","nodeType":"YulIdentifier","src":"3664:9:52"},"nativeSrc":"3664:20:52","nodeType":"YulFunctionCall","src":"3664:20:52"},"variableNames":[{"name":"digest","nativeSrc":"3654:6:52","nodeType":"YulIdentifier","src":"3654:6:52"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":9891,"isOffset":false,"isSlot":false,"src":"3654:6:52","valueSize":1},{"declaration":9886,"isOffset":false,"isSlot":false,"src":"3578:15:52","valueSize":1},{"declaration":9888,"isOffset":false,"isSlot":false,"src":"3630:10:52","valueSize":1}],"flags":["memory-safe"],"id":9893,"nodeType":"InlineAssembly","src":"3445:249:52"}]},"documentation":{"id":9884,"nodeType":"StructuredDocumentation","src":"2890:431:52","text":" @dev Returns the keccak256 digest of an EIP-712 typed data (ERC-191 version `0x01`).\n The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n See {ECDSA-recover}."},"id":9895,"implemented":true,"kind":"function","modifiers":[],"name":"toTypedDataHash","nameLocation":"3335:15:52","nodeType":"FunctionDefinition","parameters":{"id":9889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9886,"mutability":"mutable","name":"domainSeparator","nameLocation":"3359:15:52","nodeType":"VariableDeclaration","scope":9895,"src":"3351:23:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9885,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3351:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9888,"mutability":"mutable","name":"structHash","nameLocation":"3384:10:52","nodeType":"VariableDeclaration","scope":9895,"src":"3376:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9887,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3376:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3350:45:52"},"returnParameters":{"id":9892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9891,"mutability":"mutable","name":"digest","nameLocation":"3427:6:52","nodeType":"VariableDeclaration","scope":9895,"src":"3419:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9890,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3419:7:52","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3418:16:52"},"scope":9896,"src":"3326:374:52","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9897,"src":"521:3181:52","usedErrors":[],"usedEvents":[]}],"src":"123:3580:52"},"id":52},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[9920],"IERC165":[9932]},"id":9921,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9898,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"114:24:53"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":9900,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9921,"sourceUnit":9933,"src":"140:38:53","symbolAliases":[{"foreign":{"id":9899,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9932,"src":"148:7:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":9902,"name":"IERC165","nameLocations":["688:7:53"],"nodeType":"IdentifierPath","referencedDeclaration":9932,"src":"688:7:53"},"id":9903,"nodeType":"InheritanceSpecifier","src":"688:7:53"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":9901,"nodeType":"StructuredDocumentation","src":"180:479:53","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"},"fullyImplemented":true,"id":9920,"linearizedBaseContracts":[9920,9932],"name":"ERC165","nameLocation":"678:6:53","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[9931],"body":{"id":9918,"nodeType":"Block","src":"845:64:53","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":9916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9911,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9906,"src":"862:11:53","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":9913,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9932,"src":"882:7:53","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$9932_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$9932_$","typeString":"type(contract IERC165)"}],"id":9912,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"877:4:53","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":9914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"877:13:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$9932","typeString":"type(contract IERC165)"}},"id":9915,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"891:11:53","memberName":"interfaceId","nodeType":"MemberAccess","src":"877:25:53","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"862:40:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9910,"id":9917,"nodeType":"Return","src":"855:47:53"}]},"documentation":{"id":9904,"nodeType":"StructuredDocumentation","src":"702:56:53","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":9919,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"772:17:53","nodeType":"FunctionDefinition","parameters":{"id":9907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9906,"mutability":"mutable","name":"interfaceId","nameLocation":"797:11:53","nodeType":"VariableDeclaration","scope":9919,"src":"790:18:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9905,"name":"bytes4","nodeType":"ElementaryTypeName","src":"790:6:53","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"789:20:53"},"returnParameters":{"id":9910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9909,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9919,"src":"839:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9908,"name":"bool","nodeType":"ElementaryTypeName","src":"839:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"838:6:53"},"scope":9920,"src":"763:146:53","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":9921,"src":"660:251:53","usedErrors":[],"usedEvents":[]}],"src":"114:798:53"},"id":53},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[9932]},"id":9933,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9922,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:54"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":9923,"nodeType":"StructuredDocumentation","src":"141:280:54","text":" @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":9932,"linearizedBaseContracts":[9932],"name":"IERC165","nameLocation":"432:7:54","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":9924,"nodeType":"StructuredDocumentation","src":"446:340:54","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":9931,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"800:17:54","nodeType":"FunctionDefinition","parameters":{"id":9927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9926,"mutability":"mutable","name":"interfaceId","nameLocation":"825:11:54","nodeType":"VariableDeclaration","scope":9931,"src":"818:18:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":9925,"name":"bytes4","nodeType":"ElementaryTypeName","src":"818:6:54","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"817:20:54"},"returnParameters":{"id":9930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9931,"src":"861:4:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9928,"name":"bool","nodeType":"ElementaryTypeName","src":"861:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"860:6:54"},"scope":9932,"src":"791:76:54","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":9933,"src":"422:447:54","usedErrors":[],"usedEvents":[]}],"src":"115:755:54"},"id":54},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[11538],"Panic":[7706],"SafeCast":[13303]},"id":11539,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9934,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:55"},{"absolutePath":"@openzeppelin/contracts/utils/Panic.sol","file":"../Panic.sol","id":9936,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11539,"sourceUnit":7707,"src":"129:35:55","symbolAliases":[{"foreign":{"id":9935,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"137:5:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":9938,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11539,"sourceUnit":13304,"src":"165:40:55","symbolAliases":[{"foreign":{"id":9937,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"173:8:55","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":9939,"nodeType":"StructuredDocumentation","src":"207:73:55","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":11538,"linearizedBaseContracts":[11538],"name":"Math","nameLocation":"289:4:55","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":9944,"members":[{"id":9940,"name":"Floor","nameLocation":"324:5:55","nodeType":"EnumValue","src":"324:5:55"},{"id":9941,"name":"Ceil","nameLocation":"367:4:55","nodeType":"EnumValue","src":"367:4:55"},{"id":9942,"name":"Trunc","nameLocation":"409:5:55","nodeType":"EnumValue","src":"409:5:55"},{"id":9943,"name":"Expand","nameLocation":"439:6:55","nodeType":"EnumValue","src":"439:6:55"}],"name":"Rounding","nameLocation":"305:8:55","nodeType":"EnumDefinition","src":"300:169:55"},{"body":{"id":9975,"nodeType":"Block","src":"677:140:55","statements":[{"id":9974,"nodeType":"UncheckedBlock","src":"687:124:55","statements":[{"assignments":[9957],"declarations":[{"constant":false,"id":9957,"mutability":"mutable","name":"c","nameLocation":"719:1:55","nodeType":"VariableDeclaration","scope":9974,"src":"711:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9956,"name":"uint256","nodeType":"ElementaryTypeName","src":"711:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9961,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9958,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9947,"src":"723:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9959,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9949,"src":"727:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"723:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"711:17:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9962,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9957,"src":"746:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9963,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9947,"src":"750:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"746:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9969,"nodeType":"IfStatement","src":"742:28:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"761:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":9966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"768:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9967,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"760:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9955,"id":9968,"nodeType":"Return","src":"753:17:55"}},{"expression":{"components":[{"hexValue":"74727565","id":9970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"792:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":9971,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9957,"src":"798:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":9972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"791:9:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":9955,"id":9973,"nodeType":"Return","src":"784:16:55"}]}]},"documentation":{"id":9945,"nodeType":"StructuredDocumentation","src":"475:106:55","text":" @dev Returns the addition of two unsigned integers, with an success flag (no overflow)."},"id":9976,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"595:6:55","nodeType":"FunctionDefinition","parameters":{"id":9950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9947,"mutability":"mutable","name":"a","nameLocation":"610:1:55","nodeType":"VariableDeclaration","scope":9976,"src":"602:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9946,"name":"uint256","nodeType":"ElementaryTypeName","src":"602:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9949,"mutability":"mutable","name":"b","nameLocation":"621:1:55","nodeType":"VariableDeclaration","scope":9976,"src":"613:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9948,"name":"uint256","nodeType":"ElementaryTypeName","src":"613:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"601:22:55"},"returnParameters":{"id":9955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9952,"mutability":"mutable","name":"success","nameLocation":"652:7:55","nodeType":"VariableDeclaration","scope":9976,"src":"647:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9951,"name":"bool","nodeType":"ElementaryTypeName","src":"647:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9954,"mutability":"mutable","name":"result","nameLocation":"669:6:55","nodeType":"VariableDeclaration","scope":9976,"src":"661:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9953,"name":"uint256","nodeType":"ElementaryTypeName","src":"661:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"646:30:55"},"scope":11538,"src":"586:231:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10003,"nodeType":"Block","src":"1028:113:55","statements":[{"id":10002,"nodeType":"UncheckedBlock","src":"1038:97:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9988,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9981,"src":"1066:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":9989,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9979,"src":"1070:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1066:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9995,"nodeType":"IfStatement","src":"1062:28:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":9991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1081:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":9992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1088:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":9993,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1080:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":9987,"id":9994,"nodeType":"Return","src":"1073:17:55"}},{"expression":{"components":[{"hexValue":"74727565","id":9996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1112:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9997,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9979,"src":"1118:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9998,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9981,"src":"1122:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1118:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10000,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1111:13:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":9987,"id":10001,"nodeType":"Return","src":"1104:20:55"}]}]},"documentation":{"id":9977,"nodeType":"StructuredDocumentation","src":"823:109:55","text":" @dev Returns the subtraction of two unsigned integers, with an success flag (no overflow)."},"id":10004,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"946:6:55","nodeType":"FunctionDefinition","parameters":{"id":9982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9979,"mutability":"mutable","name":"a","nameLocation":"961:1:55","nodeType":"VariableDeclaration","scope":10004,"src":"953:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9978,"name":"uint256","nodeType":"ElementaryTypeName","src":"953:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9981,"mutability":"mutable","name":"b","nameLocation":"972:1:55","nodeType":"VariableDeclaration","scope":10004,"src":"964:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9980,"name":"uint256","nodeType":"ElementaryTypeName","src":"964:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"952:22:55"},"returnParameters":{"id":9987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9984,"mutability":"mutable","name":"success","nameLocation":"1003:7:55","nodeType":"VariableDeclaration","scope":10004,"src":"998:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9983,"name":"bool","nodeType":"ElementaryTypeName","src":"998:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9986,"mutability":"mutable","name":"result","nameLocation":"1020:6:55","nodeType":"VariableDeclaration","scope":10004,"src":"1012:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9985,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"997:30:55"},"scope":11538,"src":"937:204:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10045,"nodeType":"Block","src":"1355:417:55","statements":[{"id":10044,"nodeType":"UncheckedBlock","src":"1365:401:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10016,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10007,"src":"1623:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1628:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1623:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10023,"nodeType":"IfStatement","src":"1619:28:55","trueBody":{"expression":{"components":[{"hexValue":"74727565","id":10019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1639:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":10020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1645:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10021,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1638:9:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":10015,"id":10022,"nodeType":"Return","src":"1631:16:55"}},{"assignments":[10025],"declarations":[{"constant":false,"id":10025,"mutability":"mutable","name":"c","nameLocation":"1669:1:55","nodeType":"VariableDeclaration","scope":10044,"src":"1661:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10024,"name":"uint256","nodeType":"ElementaryTypeName","src":"1661:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10029,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10026,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10007,"src":"1673:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10027,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"1677:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1673:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1661:17:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10030,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10025,"src":"1696:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10031,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10007,"src":"1700:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1696:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10033,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10009,"src":"1705:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1696:10:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10039,"nodeType":"IfStatement","src":"1692:33:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":10035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1716:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":10036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1723:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10037,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1715:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":10015,"id":10038,"nodeType":"Return","src":"1708:17:55"}},{"expression":{"components":[{"hexValue":"74727565","id":10040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1747:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":10041,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10025,"src":"1753:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10042,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1746:9:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":10015,"id":10043,"nodeType":"Return","src":"1739:16:55"}]}]},"documentation":{"id":10005,"nodeType":"StructuredDocumentation","src":"1147:112:55","text":" @dev Returns the multiplication of two unsigned integers, with an success flag (no overflow)."},"id":10046,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"1273:6:55","nodeType":"FunctionDefinition","parameters":{"id":10010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10007,"mutability":"mutable","name":"a","nameLocation":"1288:1:55","nodeType":"VariableDeclaration","scope":10046,"src":"1280:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10006,"name":"uint256","nodeType":"ElementaryTypeName","src":"1280:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10009,"mutability":"mutable","name":"b","nameLocation":"1299:1:55","nodeType":"VariableDeclaration","scope":10046,"src":"1291:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10008,"name":"uint256","nodeType":"ElementaryTypeName","src":"1291:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1279:22:55"},"returnParameters":{"id":10015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10012,"mutability":"mutable","name":"success","nameLocation":"1330:7:55","nodeType":"VariableDeclaration","scope":10046,"src":"1325:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10011,"name":"bool","nodeType":"ElementaryTypeName","src":"1325:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10014,"mutability":"mutable","name":"result","nameLocation":"1347:6:55","nodeType":"VariableDeclaration","scope":10046,"src":"1339:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10013,"name":"uint256","nodeType":"ElementaryTypeName","src":"1339:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:30:55"},"scope":11538,"src":"1264:508:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10073,"nodeType":"Block","src":"1987:114:55","statements":[{"id":10072,"nodeType":"UncheckedBlock","src":"1997:98:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10058,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10051,"src":"2025:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2030:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2025:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10065,"nodeType":"IfStatement","src":"2021:29:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":10061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2041:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":10062,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2048:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10063,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2040:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":10057,"id":10064,"nodeType":"Return","src":"2033:17:55"}},{"expression":{"components":[{"hexValue":"74727565","id":10066,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2072:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10067,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10049,"src":"2078:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10068,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10051,"src":"2082:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2078:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10070,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2071:13:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":10057,"id":10071,"nodeType":"Return","src":"2064:20:55"}]}]},"documentation":{"id":10047,"nodeType":"StructuredDocumentation","src":"1778:113:55","text":" @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."},"id":10074,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"1905:6:55","nodeType":"FunctionDefinition","parameters":{"id":10052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10049,"mutability":"mutable","name":"a","nameLocation":"1920:1:55","nodeType":"VariableDeclaration","scope":10074,"src":"1912:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10048,"name":"uint256","nodeType":"ElementaryTypeName","src":"1912:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10051,"mutability":"mutable","name":"b","nameLocation":"1931:1:55","nodeType":"VariableDeclaration","scope":10074,"src":"1923:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10050,"name":"uint256","nodeType":"ElementaryTypeName","src":"1923:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1911:22:55"},"returnParameters":{"id":10057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10054,"mutability":"mutable","name":"success","nameLocation":"1962:7:55","nodeType":"VariableDeclaration","scope":10074,"src":"1957:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10053,"name":"bool","nodeType":"ElementaryTypeName","src":"1957:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10056,"mutability":"mutable","name":"result","nameLocation":"1979:6:55","nodeType":"VariableDeclaration","scope":10074,"src":"1971:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10055,"name":"uint256","nodeType":"ElementaryTypeName","src":"1971:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1956:30:55"},"scope":11538,"src":"1896:205:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10101,"nodeType":"Block","src":"2326:114:55","statements":[{"id":10100,"nodeType":"UncheckedBlock","src":"2336:98:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10086,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10079,"src":"2364:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2369:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2364:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10093,"nodeType":"IfStatement","src":"2360:29:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":10089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2380:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":10090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2387:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10091,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2379:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":10085,"id":10092,"nodeType":"Return","src":"2372:17:55"}},{"expression":{"components":[{"hexValue":"74727565","id":10094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2411:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10095,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10077,"src":"2417:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":10096,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10079,"src":"2421:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2417:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2410:13:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":10085,"id":10099,"nodeType":"Return","src":"2403:20:55"}]}]},"documentation":{"id":10075,"nodeType":"StructuredDocumentation","src":"2107:123:55","text":" @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."},"id":10102,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"2244:6:55","nodeType":"FunctionDefinition","parameters":{"id":10080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10077,"mutability":"mutable","name":"a","nameLocation":"2259:1:55","nodeType":"VariableDeclaration","scope":10102,"src":"2251:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10076,"name":"uint256","nodeType":"ElementaryTypeName","src":"2251:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10079,"mutability":"mutable","name":"b","nameLocation":"2270:1:55","nodeType":"VariableDeclaration","scope":10102,"src":"2262:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10078,"name":"uint256","nodeType":"ElementaryTypeName","src":"2262:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2250:22:55"},"returnParameters":{"id":10085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10082,"mutability":"mutable","name":"success","nameLocation":"2301:7:55","nodeType":"VariableDeclaration","scope":10102,"src":"2296:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10081,"name":"bool","nodeType":"ElementaryTypeName","src":"2296:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10084,"mutability":"mutable","name":"result","nameLocation":"2318:6:55","nodeType":"VariableDeclaration","scope":10102,"src":"2310:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10083,"name":"uint256","nodeType":"ElementaryTypeName","src":"2310:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2295:30:55"},"scope":11538,"src":"2235:205:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10128,"nodeType":"Block","src":"2912:207:55","statements":[{"id":10127,"nodeType":"UncheckedBlock","src":"2922:191:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10114,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10109,"src":"3060:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10115,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10107,"src":"3066:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":10116,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10109,"src":"3070:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3066:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10118,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3065:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":10121,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10105,"src":"3091:9:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10119,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"3075:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3084:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"3075:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3075:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3065:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10124,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3064:38:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:42:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10113,"id":10126,"nodeType":"Return","src":"3053:49:55"}]}]},"documentation":{"id":10103,"nodeType":"StructuredDocumentation","src":"2446:374:55","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":10129,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"2834:7:55","nodeType":"FunctionDefinition","parameters":{"id":10110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10105,"mutability":"mutable","name":"condition","nameLocation":"2847:9:55","nodeType":"VariableDeclaration","scope":10129,"src":"2842:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10104,"name":"bool","nodeType":"ElementaryTypeName","src":"2842:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10107,"mutability":"mutable","name":"a","nameLocation":"2866:1:55","nodeType":"VariableDeclaration","scope":10129,"src":"2858:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10106,"name":"uint256","nodeType":"ElementaryTypeName","src":"2858:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10109,"mutability":"mutable","name":"b","nameLocation":"2877:1:55","nodeType":"VariableDeclaration","scope":10129,"src":"2869:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10108,"name":"uint256","nodeType":"ElementaryTypeName","src":"2869:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2841:38:55"},"returnParameters":{"id":10113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10112,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10129,"src":"2903:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10111,"name":"uint256","nodeType":"ElementaryTypeName","src":"2903:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2902:9:55"},"scope":11538,"src":"2825:294:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10147,"nodeType":"Block","src":"3256:44:55","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10140,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10132,"src":"3281:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":10141,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10134,"src":"3285:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3281:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10143,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10132,"src":"3288:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10144,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10134,"src":"3291:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10139,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"3273:7:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":10145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3273:20:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10138,"id":10146,"nodeType":"Return","src":"3266:27:55"}]},"documentation":{"id":10130,"nodeType":"StructuredDocumentation","src":"3125:59:55","text":" @dev Returns the largest of two numbers."},"id":10148,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"3198:3:55","nodeType":"FunctionDefinition","parameters":{"id":10135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10132,"mutability":"mutable","name":"a","nameLocation":"3210:1:55","nodeType":"VariableDeclaration","scope":10148,"src":"3202:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10131,"name":"uint256","nodeType":"ElementaryTypeName","src":"3202:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10134,"mutability":"mutable","name":"b","nameLocation":"3221:1:55","nodeType":"VariableDeclaration","scope":10148,"src":"3213:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10133,"name":"uint256","nodeType":"ElementaryTypeName","src":"3213:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3201:22:55"},"returnParameters":{"id":10138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10148,"src":"3247:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10136,"name":"uint256","nodeType":"ElementaryTypeName","src":"3247:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3246:9:55"},"scope":11538,"src":"3189:111:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10166,"nodeType":"Block","src":"3438:44:55","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10159,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10151,"src":"3463:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10160,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10153,"src":"3467:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3463:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":10162,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10151,"src":"3470:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10163,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10153,"src":"3473:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10158,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"3455:7:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":10164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3455:20:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10157,"id":10165,"nodeType":"Return","src":"3448:27:55"}]},"documentation":{"id":10149,"nodeType":"StructuredDocumentation","src":"3306:60:55","text":" @dev Returns the smallest of two numbers."},"id":10167,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"3380:3:55","nodeType":"FunctionDefinition","parameters":{"id":10154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10151,"mutability":"mutable","name":"a","nameLocation":"3392:1:55","nodeType":"VariableDeclaration","scope":10167,"src":"3384:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10150,"name":"uint256","nodeType":"ElementaryTypeName","src":"3384:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10153,"mutability":"mutable","name":"b","nameLocation":"3403:1:55","nodeType":"VariableDeclaration","scope":10167,"src":"3395:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10152,"name":"uint256","nodeType":"ElementaryTypeName","src":"3395:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3383:22:55"},"returnParameters":{"id":10157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10167,"src":"3429:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10155,"name":"uint256","nodeType":"ElementaryTypeName","src":"3429:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3428:9:55"},"scope":11538,"src":"3371:111:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10189,"nodeType":"Block","src":"3666:82:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10177,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10170,"src":"3721:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":10178,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"3725:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3721:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10180,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3720:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10181,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10170,"src":"3731:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":10182,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10172,"src":"3735:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3731:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10184,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3730:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":10185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3740:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3730:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3720:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10176,"id":10188,"nodeType":"Return","src":"3713:28:55"}]},"documentation":{"id":10168,"nodeType":"StructuredDocumentation","src":"3488:102:55","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":10190,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"3604:7:55","nodeType":"FunctionDefinition","parameters":{"id":10173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10170,"mutability":"mutable","name":"a","nameLocation":"3620:1:55","nodeType":"VariableDeclaration","scope":10190,"src":"3612:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10169,"name":"uint256","nodeType":"ElementaryTypeName","src":"3612:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10172,"mutability":"mutable","name":"b","nameLocation":"3631:1:55","nodeType":"VariableDeclaration","scope":10190,"src":"3623:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10171,"name":"uint256","nodeType":"ElementaryTypeName","src":"3623:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3611:22:55"},"returnParameters":{"id":10176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10190,"src":"3657:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10174,"name":"uint256","nodeType":"ElementaryTypeName","src":"3657:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3656:9:55"},"scope":11538,"src":"3595:153:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10230,"nodeType":"Block","src":"4040:633:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10200,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10195,"src":"4054:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4059:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4054:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10211,"nodeType":"IfStatement","src":"4050:150:55","trueBody":{"id":10210,"nodeType":"Block","src":"4062:138:55","statements":[{"expression":{"arguments":[{"expression":{"id":10206,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"4166:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4172:16:55","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":7673,"src":"4166:22:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10203,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"4154:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4160:5:55","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":7705,"src":"4154:11:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":10208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4154:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10209,"nodeType":"ExpressionStatement","src":"4154:35:55"}]}},{"id":10229,"nodeType":"UncheckedBlock","src":"4583:84:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10214,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10193,"src":"4630:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":10215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4634:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4630:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10212,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"4614:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4623:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"4614:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4614:22:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10218,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10193,"src":"4641:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4645:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4641:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10221,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4640:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10222,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10195,"src":"4650:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4640:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":10224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4654:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4640:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4639:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4614:42:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10199,"id":10228,"nodeType":"Return","src":"4607:49:55"}]}]},"documentation":{"id":10191,"nodeType":"StructuredDocumentation","src":"3754:210:55","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":10231,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"3978:7:55","nodeType":"FunctionDefinition","parameters":{"id":10196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10193,"mutability":"mutable","name":"a","nameLocation":"3994:1:55","nodeType":"VariableDeclaration","scope":10231,"src":"3986:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10192,"name":"uint256","nodeType":"ElementaryTypeName","src":"3986:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10195,"mutability":"mutable","name":"b","nameLocation":"4005:1:55","nodeType":"VariableDeclaration","scope":10231,"src":"3997:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10194,"name":"uint256","nodeType":"ElementaryTypeName","src":"3997:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3985:22:55"},"returnParameters":{"id":10199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10198,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10231,"src":"4031:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10197,"name":"uint256","nodeType":"ElementaryTypeName","src":"4031:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4030:9:55"},"scope":11538,"src":"3969:704:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10367,"nodeType":"Block","src":"5094:4128:55","statements":[{"id":10366,"nodeType":"UncheckedBlock","src":"5104:4112:55","statements":[{"assignments":[10244],"declarations":[{"constant":false,"id":10244,"mutability":"mutable","name":"prod0","nameLocation":"5441:5:55","nodeType":"VariableDeclaration","scope":10366,"src":"5433:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10243,"name":"uint256","nodeType":"ElementaryTypeName","src":"5433:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10248,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10245,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10234,"src":"5449:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10246,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10236,"src":"5453:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5449:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5433:21:55"},{"assignments":[10250],"declarations":[{"constant":false,"id":10250,"mutability":"mutable","name":"prod1","nameLocation":"5521:5:55","nodeType":"VariableDeclaration","scope":10366,"src":"5513:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10249,"name":"uint256","nodeType":"ElementaryTypeName","src":"5513:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10251,"nodeType":"VariableDeclarationStatement","src":"5513:13:55"},{"AST":{"nativeSrc":"5593:122:55","nodeType":"YulBlock","src":"5593:122:55","statements":[{"nativeSrc":"5611:30:55","nodeType":"YulVariableDeclaration","src":"5611:30:55","value":{"arguments":[{"name":"x","nativeSrc":"5628:1:55","nodeType":"YulIdentifier","src":"5628:1:55"},{"name":"y","nativeSrc":"5631:1:55","nodeType":"YulIdentifier","src":"5631:1:55"},{"arguments":[{"kind":"number","nativeSrc":"5638:1:55","nodeType":"YulLiteral","src":"5638:1:55","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"5634:3:55","nodeType":"YulIdentifier","src":"5634:3:55"},"nativeSrc":"5634:6:55","nodeType":"YulFunctionCall","src":"5634:6:55"}],"functionName":{"name":"mulmod","nativeSrc":"5621:6:55","nodeType":"YulIdentifier","src":"5621:6:55"},"nativeSrc":"5621:20:55","nodeType":"YulFunctionCall","src":"5621:20:55"},"variables":[{"name":"mm","nativeSrc":"5615:2:55","nodeType":"YulTypedName","src":"5615:2:55","type":""}]},{"nativeSrc":"5658:43:55","nodeType":"YulAssignment","src":"5658:43:55","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"5675:2:55","nodeType":"YulIdentifier","src":"5675:2:55"},{"name":"prod0","nativeSrc":"5679:5:55","nodeType":"YulIdentifier","src":"5679:5:55"}],"functionName":{"name":"sub","nativeSrc":"5671:3:55","nodeType":"YulIdentifier","src":"5671:3:55"},"nativeSrc":"5671:14:55","nodeType":"YulFunctionCall","src":"5671:14:55"},{"arguments":[{"name":"mm","nativeSrc":"5690:2:55","nodeType":"YulIdentifier","src":"5690:2:55"},{"name":"prod0","nativeSrc":"5694:5:55","nodeType":"YulIdentifier","src":"5694:5:55"}],"functionName":{"name":"lt","nativeSrc":"5687:2:55","nodeType":"YulIdentifier","src":"5687:2:55"},"nativeSrc":"5687:13:55","nodeType":"YulFunctionCall","src":"5687:13:55"}],"functionName":{"name":"sub","nativeSrc":"5667:3:55","nodeType":"YulIdentifier","src":"5667:3:55"},"nativeSrc":"5667:34:55","nodeType":"YulFunctionCall","src":"5667:34:55"},"variableNames":[{"name":"prod1","nativeSrc":"5658:5:55","nodeType":"YulIdentifier","src":"5658:5:55"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10244,"isOffset":false,"isSlot":false,"src":"5679:5:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"5694:5:55","valueSize":1},{"declaration":10250,"isOffset":false,"isSlot":false,"src":"5658:5:55","valueSize":1},{"declaration":10234,"isOffset":false,"isSlot":false,"src":"5628:1:55","valueSize":1},{"declaration":10236,"isOffset":false,"isSlot":false,"src":"5631:1:55","valueSize":1}],"id":10252,"nodeType":"InlineAssembly","src":"5584:131:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10253,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"5796:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5805:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5796:10:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10261,"nodeType":"IfStatement","src":"5792:368:55","trueBody":{"id":10260,"nodeType":"Block","src":"5808:352:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10256,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10244,"src":"6126:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10257,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"6134:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6126:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10242,"id":10259,"nodeType":"Return","src":"6119:26:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10262,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"6270:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":10263,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"6285:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6270:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10280,"nodeType":"IfStatement","src":"6266:143:55","trueBody":{"id":10279,"nodeType":"Block","src":"6292:117:55","statements":[{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10269,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"6330:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6345:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6330:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":10272,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"6348:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6354:16:55","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":7673,"src":"6348:22:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10274,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"6372:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6378:14:55","memberName":"UNDER_OVERFLOW","nodeType":"MemberAccess","referencedDeclaration":7669,"src":"6372:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10268,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"6322:7:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":10276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6322:71:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10265,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"6310:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6316:5:55","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":7705,"src":"6310:11:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":10277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6310:84:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10278,"nodeType":"ExpressionStatement","src":"6310:84:55"}]}},{"assignments":[10282],"declarations":[{"constant":false,"id":10282,"mutability":"mutable","name":"remainder","nameLocation":"6672:9:55","nodeType":"VariableDeclaration","scope":10366,"src":"6664:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10281,"name":"uint256","nodeType":"ElementaryTypeName","src":"6664:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10283,"nodeType":"VariableDeclarationStatement","src":"6664:17:55"},{"AST":{"nativeSrc":"6704:291:55","nodeType":"YulBlock","src":"6704:291:55","statements":[{"nativeSrc":"6773:38:55","nodeType":"YulAssignment","src":"6773:38:55","value":{"arguments":[{"name":"x","nativeSrc":"6793:1:55","nodeType":"YulIdentifier","src":"6793:1:55"},{"name":"y","nativeSrc":"6796:1:55","nodeType":"YulIdentifier","src":"6796:1:55"},{"name":"denominator","nativeSrc":"6799:11:55","nodeType":"YulIdentifier","src":"6799:11:55"}],"functionName":{"name":"mulmod","nativeSrc":"6786:6:55","nodeType":"YulIdentifier","src":"6786:6:55"},"nativeSrc":"6786:25:55","nodeType":"YulFunctionCall","src":"6786:25:55"},"variableNames":[{"name":"remainder","nativeSrc":"6773:9:55","nodeType":"YulIdentifier","src":"6773:9:55"}]},{"nativeSrc":"6893:41:55","nodeType":"YulAssignment","src":"6893:41:55","value":{"arguments":[{"name":"prod1","nativeSrc":"6906:5:55","nodeType":"YulIdentifier","src":"6906:5:55"},{"arguments":[{"name":"remainder","nativeSrc":"6916:9:55","nodeType":"YulIdentifier","src":"6916:9:55"},{"name":"prod0","nativeSrc":"6927:5:55","nodeType":"YulIdentifier","src":"6927:5:55"}],"functionName":{"name":"gt","nativeSrc":"6913:2:55","nodeType":"YulIdentifier","src":"6913:2:55"},"nativeSrc":"6913:20:55","nodeType":"YulFunctionCall","src":"6913:20:55"}],"functionName":{"name":"sub","nativeSrc":"6902:3:55","nodeType":"YulIdentifier","src":"6902:3:55"},"nativeSrc":"6902:32:55","nodeType":"YulFunctionCall","src":"6902:32:55"},"variableNames":[{"name":"prod1","nativeSrc":"6893:5:55","nodeType":"YulIdentifier","src":"6893:5:55"}]},{"nativeSrc":"6951:30:55","nodeType":"YulAssignment","src":"6951:30:55","value":{"arguments":[{"name":"prod0","nativeSrc":"6964:5:55","nodeType":"YulIdentifier","src":"6964:5:55"},{"name":"remainder","nativeSrc":"6971:9:55","nodeType":"YulIdentifier","src":"6971:9:55"}],"functionName":{"name":"sub","nativeSrc":"6960:3:55","nodeType":"YulIdentifier","src":"6960:3:55"},"nativeSrc":"6960:21:55","nodeType":"YulFunctionCall","src":"6960:21:55"},"variableNames":[{"name":"prod0","nativeSrc":"6951:5:55","nodeType":"YulIdentifier","src":"6951:5:55"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10238,"isOffset":false,"isSlot":false,"src":"6799:11:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"6927:5:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"6951:5:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"6964:5:55","valueSize":1},{"declaration":10250,"isOffset":false,"isSlot":false,"src":"6893:5:55","valueSize":1},{"declaration":10250,"isOffset":false,"isSlot":false,"src":"6906:5:55","valueSize":1},{"declaration":10282,"isOffset":false,"isSlot":false,"src":"6773:9:55","valueSize":1},{"declaration":10282,"isOffset":false,"isSlot":false,"src":"6916:9:55","valueSize":1},{"declaration":10282,"isOffset":false,"isSlot":false,"src":"6971:9:55","valueSize":1},{"declaration":10234,"isOffset":false,"isSlot":false,"src":"6793:1:55","valueSize":1},{"declaration":10236,"isOffset":false,"isSlot":false,"src":"6796:1:55","valueSize":1}],"id":10284,"nodeType":"InlineAssembly","src":"6695:300:55"},{"assignments":[10286],"declarations":[{"constant":false,"id":10286,"mutability":"mutable","name":"twos","nameLocation":"7207:4:55","nodeType":"VariableDeclaration","scope":10366,"src":"7199:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10285,"name":"uint256","nodeType":"ElementaryTypeName","src":"7199:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10293,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10287,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"7214:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":10288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7229:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":10289,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"7233:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7229:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10291,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7228:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7214:31:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7199:46:55"},{"AST":{"nativeSrc":"7268:366:55","nodeType":"YulBlock","src":"7268:366:55","statements":[{"nativeSrc":"7333:37:55","nodeType":"YulAssignment","src":"7333:37:55","value":{"arguments":[{"name":"denominator","nativeSrc":"7352:11:55","nodeType":"YulIdentifier","src":"7352:11:55"},{"name":"twos","nativeSrc":"7365:4:55","nodeType":"YulIdentifier","src":"7365:4:55"}],"functionName":{"name":"div","nativeSrc":"7348:3:55","nodeType":"YulIdentifier","src":"7348:3:55"},"nativeSrc":"7348:22:55","nodeType":"YulFunctionCall","src":"7348:22:55"},"variableNames":[{"name":"denominator","nativeSrc":"7333:11:55","nodeType":"YulIdentifier","src":"7333:11:55"}]},{"nativeSrc":"7437:25:55","nodeType":"YulAssignment","src":"7437:25:55","value":{"arguments":[{"name":"prod0","nativeSrc":"7450:5:55","nodeType":"YulIdentifier","src":"7450:5:55"},{"name":"twos","nativeSrc":"7457:4:55","nodeType":"YulIdentifier","src":"7457:4:55"}],"functionName":{"name":"div","nativeSrc":"7446:3:55","nodeType":"YulIdentifier","src":"7446:3:55"},"nativeSrc":"7446:16:55","nodeType":"YulFunctionCall","src":"7446:16:55"},"variableNames":[{"name":"prod0","nativeSrc":"7437:5:55","nodeType":"YulIdentifier","src":"7437:5:55"}]},{"nativeSrc":"7581:39:55","nodeType":"YulAssignment","src":"7581:39:55","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"7601:1:55","nodeType":"YulLiteral","src":"7601:1:55","type":"","value":"0"},{"name":"twos","nativeSrc":"7604:4:55","nodeType":"YulIdentifier","src":"7604:4:55"}],"functionName":{"name":"sub","nativeSrc":"7597:3:55","nodeType":"YulIdentifier","src":"7597:3:55"},"nativeSrc":"7597:12:55","nodeType":"YulFunctionCall","src":"7597:12:55"},{"name":"twos","nativeSrc":"7611:4:55","nodeType":"YulIdentifier","src":"7611:4:55"}],"functionName":{"name":"div","nativeSrc":"7593:3:55","nodeType":"YulIdentifier","src":"7593:3:55"},"nativeSrc":"7593:23:55","nodeType":"YulFunctionCall","src":"7593:23:55"},{"kind":"number","nativeSrc":"7618:1:55","nodeType":"YulLiteral","src":"7618:1:55","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"7589:3:55","nodeType":"YulIdentifier","src":"7589:3:55"},"nativeSrc":"7589:31:55","nodeType":"YulFunctionCall","src":"7589:31:55"},"variableNames":[{"name":"twos","nativeSrc":"7581:4:55","nodeType":"YulIdentifier","src":"7581:4:55"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10238,"isOffset":false,"isSlot":false,"src":"7333:11:55","valueSize":1},{"declaration":10238,"isOffset":false,"isSlot":false,"src":"7352:11:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"7437:5:55","valueSize":1},{"declaration":10244,"isOffset":false,"isSlot":false,"src":"7450:5:55","valueSize":1},{"declaration":10286,"isOffset":false,"isSlot":false,"src":"7365:4:55","valueSize":1},{"declaration":10286,"isOffset":false,"isSlot":false,"src":"7457:4:55","valueSize":1},{"declaration":10286,"isOffset":false,"isSlot":false,"src":"7581:4:55","valueSize":1},{"declaration":10286,"isOffset":false,"isSlot":false,"src":"7604:4:55","valueSize":1},{"declaration":10286,"isOffset":false,"isSlot":false,"src":"7611:4:55","valueSize":1}],"id":10294,"nodeType":"InlineAssembly","src":"7259:375:55"},{"expression":{"id":10299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10295,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10244,"src":"7700:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10296,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10250,"src":"7709:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10297,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10286,"src":"7717:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7709:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7700:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10300,"nodeType":"ExpressionStatement","src":"7700:21:55"},{"assignments":[10302],"declarations":[{"constant":false,"id":10302,"mutability":"mutable","name":"inverse","nameLocation":"8064:7:55","nodeType":"VariableDeclaration","scope":10366,"src":"8056:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10301,"name":"uint256","nodeType":"ElementaryTypeName","src":"8056:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10309,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":10303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8075:1:55","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10304,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8079:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8075:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10306,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8074:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":10307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8094:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"8074:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8056:39:55"},{"expression":{"id":10316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10310,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8312:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8323:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10312,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8327:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10313,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8341:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8327:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8323:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8312:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10317,"nodeType":"ExpressionStatement","src":"8312:36:55"},{"expression":{"id":10324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10318,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8382:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8393:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10320,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8397:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10321,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8411:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8397:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8393:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8382:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10325,"nodeType":"ExpressionStatement","src":"8382:36:55"},{"expression":{"id":10332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10326,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8454:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8465:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10328,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8469:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10329,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8483:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8469:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8465:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8454:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10333,"nodeType":"ExpressionStatement","src":"8454:36:55"},{"expression":{"id":10340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10334,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8525:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8536:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10336,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8540:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10337,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8554:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8540:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8536:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8525:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10341,"nodeType":"ExpressionStatement","src":"8525:36:55"},{"expression":{"id":10348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10342,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8598:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8609:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10344,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8613:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10345,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8627:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8613:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8609:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8598:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10349,"nodeType":"ExpressionStatement","src":"8598:36:55"},{"expression":{"id":10356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10350,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8672:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":10351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8683:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10352,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10238,"src":"8687:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10353,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"8701:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8687:21:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8683:25:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8672:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10357,"nodeType":"ExpressionStatement","src":"8672:36:55"},{"expression":{"id":10362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10358,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10241,"src":"9154:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10359,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10244,"src":"9163:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10360,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10302,"src":"9171:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9163:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9154:24:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10363,"nodeType":"ExpressionStatement","src":"9154:24:55"},{"expression":{"id":10364,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10241,"src":"9199:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10242,"id":10365,"nodeType":"Return","src":"9192:13:55"}]}]},"documentation":{"id":10232,"nodeType":"StructuredDocumentation","src":"4679:312:55","text":" @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":10368,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"5005:6:55","nodeType":"FunctionDefinition","parameters":{"id":10239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10234,"mutability":"mutable","name":"x","nameLocation":"5020:1:55","nodeType":"VariableDeclaration","scope":10368,"src":"5012:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10233,"name":"uint256","nodeType":"ElementaryTypeName","src":"5012:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10236,"mutability":"mutable","name":"y","nameLocation":"5031:1:55","nodeType":"VariableDeclaration","scope":10368,"src":"5023:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10235,"name":"uint256","nodeType":"ElementaryTypeName","src":"5023:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10238,"mutability":"mutable","name":"denominator","nameLocation":"5042:11:55","nodeType":"VariableDeclaration","scope":10368,"src":"5034:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10237,"name":"uint256","nodeType":"ElementaryTypeName","src":"5034:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5011:43:55"},"returnParameters":{"id":10242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10241,"mutability":"mutable","name":"result","nameLocation":"5086:6:55","nodeType":"VariableDeclaration","scope":10368,"src":"5078:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10240,"name":"uint256","nodeType":"ElementaryTypeName","src":"5078:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5077:16:55"},"scope":11538,"src":"4996:4226:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10404,"nodeType":"Block","src":"9461:128:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10384,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10371,"src":"9485:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10385,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10373,"src":"9488:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10386,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10375,"src":"9491:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10383,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[10368,10405],"referencedDeclaration":10368,"src":"9478:6:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":10387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9478:25:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10391,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10378,"src":"9539:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":10390,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"9522:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$9944_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":10392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9522:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10394,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10371,"src":"9559:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10395,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10373,"src":"9562:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10396,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10375,"src":"9565:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10393,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"9552:6:55","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":10397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9552:25:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":10398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9580:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9552:29:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9522:59:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10388,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"9506:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9515:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"9506:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9506:76:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9478:104:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10382,"id":10403,"nodeType":"Return","src":"9471:111:55"}]},"documentation":{"id":10369,"nodeType":"StructuredDocumentation","src":"9228:118:55","text":" @dev Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":10405,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"9360:6:55","nodeType":"FunctionDefinition","parameters":{"id":10379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10371,"mutability":"mutable","name":"x","nameLocation":"9375:1:55","nodeType":"VariableDeclaration","scope":10405,"src":"9367:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10370,"name":"uint256","nodeType":"ElementaryTypeName","src":"9367:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10373,"mutability":"mutable","name":"y","nameLocation":"9386:1:55","nodeType":"VariableDeclaration","scope":10405,"src":"9378:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10372,"name":"uint256","nodeType":"ElementaryTypeName","src":"9378:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10375,"mutability":"mutable","name":"denominator","nameLocation":"9397:11:55","nodeType":"VariableDeclaration","scope":10405,"src":"9389:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10374,"name":"uint256","nodeType":"ElementaryTypeName","src":"9389:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10378,"mutability":"mutable","name":"rounding","nameLocation":"9419:8:55","nodeType":"VariableDeclaration","scope":10405,"src":"9410:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":10377,"nodeType":"UserDefinedTypeName","pathNode":{"id":10376,"name":"Rounding","nameLocations":["9410:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"9410:8:55"},"referencedDeclaration":9944,"src":"9410:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"9366:62:55"},"returnParameters":{"id":10382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10381,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10405,"src":"9452:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10380,"name":"uint256","nodeType":"ElementaryTypeName","src":"9452:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9451:9:55"},"scope":11538,"src":"9351:238:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10501,"nodeType":"Block","src":"10223:1849:55","statements":[{"id":10500,"nodeType":"UncheckedBlock","src":"10233:1833:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10415,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10410,"src":"10261:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10266:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10261:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10420,"nodeType":"IfStatement","src":"10257:20:55","trueBody":{"expression":{"hexValue":"30","id":10418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10276:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":10414,"id":10419,"nodeType":"Return","src":"10269:8:55"}},{"assignments":[10422],"declarations":[{"constant":false,"id":10422,"mutability":"mutable","name":"remainder","nameLocation":"10756:9:55","nodeType":"VariableDeclaration","scope":10500,"src":"10748:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10421,"name":"uint256","nodeType":"ElementaryTypeName","src":"10748:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10426,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10423,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10408,"src":"10768:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":10424,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10410,"src":"10772:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10768:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10748:25:55"},{"assignments":[10428],"declarations":[{"constant":false,"id":10428,"mutability":"mutable","name":"gcd","nameLocation":"10795:3:55","nodeType":"VariableDeclaration","scope":10500,"src":"10787:11:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10427,"name":"uint256","nodeType":"ElementaryTypeName","src":"10787:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10430,"initialValue":{"id":10429,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10410,"src":"10801:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10787:15:55"},{"assignments":[10432],"declarations":[{"constant":false,"id":10432,"mutability":"mutable","name":"x","nameLocation":"10945:1:55","nodeType":"VariableDeclaration","scope":10500,"src":"10938:8:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10431,"name":"int256","nodeType":"ElementaryTypeName","src":"10938:6:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":10434,"initialValue":{"hexValue":"30","id":10433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10949:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10938:12:55"},{"assignments":[10436],"declarations":[{"constant":false,"id":10436,"mutability":"mutable","name":"y","nameLocation":"10971:1:55","nodeType":"VariableDeclaration","scope":10500,"src":"10964:8:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10435,"name":"int256","nodeType":"ElementaryTypeName","src":"10964:6:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":10438,"initialValue":{"hexValue":"31","id":10437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10975:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"10964:12:55"},{"body":{"id":10475,"nodeType":"Block","src":"11014:882:55","statements":[{"assignments":[10443],"declarations":[{"constant":false,"id":10443,"mutability":"mutable","name":"quotient","nameLocation":"11040:8:55","nodeType":"VariableDeclaration","scope":10475,"src":"11032:16:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10442,"name":"uint256","nodeType":"ElementaryTypeName","src":"11032:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10447,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10444,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10428,"src":"11051:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10445,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"11057:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11051:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11032:34:55"},{"expression":{"id":10458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":10448,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10428,"src":"11086:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10449,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"11091:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10450,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11085:16:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":10451,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"11191:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10452,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10428,"src":"11436:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10453,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"11442:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10454,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10443,"src":"11454:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11442:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11436:26:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11104:376:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"11085:395:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10459,"nodeType":"ExpressionStatement","src":"11085:395:55"},{"expression":{"id":10473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":10460,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10432,"src":"11500:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":10461,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"11503:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":10462,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11499:6:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":10463,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"11585:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10464,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10432,"src":"11839:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10465,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10436,"src":"11843:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":10468,"name":"quotient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10443,"src":"11854:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11847:6:55","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":10466,"name":"int256","nodeType":"ElementaryTypeName","src":"11847:6:55","typeDescriptions":{}}},"id":10469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11847:16:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11843:20:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11839:24:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":10472,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11508:373:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_int256_$_t_int256_$","typeString":"tuple(int256,int256)"}},"src":"11499:382:55","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10474,"nodeType":"ExpressionStatement","src":"11499:382:55"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10439,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10422,"src":"10998:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11011:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10998:14:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10476,"nodeType":"WhileStatement","src":"10991:905:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10477,"name":"gcd","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10428,"src":"11914:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"31","id":10478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11921:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11914:8:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10482,"nodeType":"IfStatement","src":"11910:22:55","trueBody":{"expression":{"hexValue":"30","id":10480,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11931:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":10414,"id":10481,"nodeType":"Return","src":"11924:8:55"}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":10486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10484,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10432,"src":"11983:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":10485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11987:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11983:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10487,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10410,"src":"11990:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":10491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"12002:2:55","subExpression":{"id":10490,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10432,"src":"12003:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11994:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10488,"name":"uint256","nodeType":"ElementaryTypeName","src":"11994:7:55","typeDescriptions":{}}},"id":10492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11994:11:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11990:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":10496,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10432,"src":"12015:1:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":10495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12007:7:55","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":10494,"name":"uint256","nodeType":"ElementaryTypeName","src":"12007:7:55","typeDescriptions":{}}},"id":10497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12007:10:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10483,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10129,"src":"11975:7:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (bool,uint256,uint256) pure returns (uint256)"}},"id":10498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11975:43:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10414,"id":10499,"nodeType":"Return","src":"11968:50:55"}]}]},"documentation":{"id":10406,"nodeType":"StructuredDocumentation","src":"9595:553:55","text":" @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."},"id":10502,"implemented":true,"kind":"function","modifiers":[],"name":"invMod","nameLocation":"10162:6:55","nodeType":"FunctionDefinition","parameters":{"id":10411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10408,"mutability":"mutable","name":"a","nameLocation":"10177:1:55","nodeType":"VariableDeclaration","scope":10502,"src":"10169:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10407,"name":"uint256","nodeType":"ElementaryTypeName","src":"10169:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10410,"mutability":"mutable","name":"n","nameLocation":"10188:1:55","nodeType":"VariableDeclaration","scope":10502,"src":"10180:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10409,"name":"uint256","nodeType":"ElementaryTypeName","src":"10180:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10168:22:55"},"returnParameters":{"id":10414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10502,"src":"10214:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10412,"name":"uint256","nodeType":"ElementaryTypeName","src":"10214:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10213:9:55"},"scope":11538,"src":"10153:1919:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10522,"nodeType":"Block","src":"12672:82:55","statements":[{"id":10521,"nodeType":"UncheckedBlock","src":"12682:66:55","statements":[{"expression":{"arguments":[{"id":10514,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10505,"src":"12725:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10515,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10507,"src":"12728:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32","id":10516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12732:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12728:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10518,"name":"p","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10507,"src":"12735:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10512,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"12713:4:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":10513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12718:6:55","memberName":"modExp","nodeType":"MemberAccess","referencedDeclaration":10559,"src":"12713:11:55","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (uint256)"}},"id":10519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12713:24:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10511,"id":10520,"nodeType":"Return","src":"12706:31:55"}]}]},"documentation":{"id":10503,"nodeType":"StructuredDocumentation","src":"12078:514:55","text":" @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."},"id":10523,"implemented":true,"kind":"function","modifiers":[],"name":"invModPrime","nameLocation":"12606:11:55","nodeType":"FunctionDefinition","parameters":{"id":10508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10505,"mutability":"mutable","name":"a","nameLocation":"12626:1:55","nodeType":"VariableDeclaration","scope":10523,"src":"12618:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10504,"name":"uint256","nodeType":"ElementaryTypeName","src":"12618:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10507,"mutability":"mutable","name":"p","nameLocation":"12637:1:55","nodeType":"VariableDeclaration","scope":10523,"src":"12629:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10506,"name":"uint256","nodeType":"ElementaryTypeName","src":"12629:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12617:22:55"},"returnParameters":{"id":10511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10510,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10523,"src":"12663:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10509,"name":"uint256","nodeType":"ElementaryTypeName","src":"12663:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12662:9:55"},"scope":11538,"src":"12597:157:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10558,"nodeType":"Block","src":"13524:174:55","statements":[{"assignments":[10536,10538],"declarations":[{"constant":false,"id":10536,"mutability":"mutable","name":"success","nameLocation":"13540:7:55","nodeType":"VariableDeclaration","scope":10558,"src":"13535:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10535,"name":"bool","nodeType":"ElementaryTypeName","src":"13535:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10538,"mutability":"mutable","name":"result","nameLocation":"13557:6:55","nodeType":"VariableDeclaration","scope":10558,"src":"13549:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10537,"name":"uint256","nodeType":"ElementaryTypeName","src":"13549:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10544,"initialValue":{"arguments":[{"id":10540,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10526,"src":"13577:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10541,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10528,"src":"13580:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10542,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10530,"src":"13583:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10539,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[10583,10665],"referencedDeclaration":10583,"src":"13567:9:55","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) view returns (bool,uint256)"}},"id":10543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13567:18:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"13534:51:55"},{"condition":{"id":10546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"13599:8:55","subExpression":{"id":10545,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10536,"src":"13600:7:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10555,"nodeType":"IfStatement","src":"13595:74:55","trueBody":{"id":10554,"nodeType":"Block","src":"13609:60:55","statements":[{"expression":{"arguments":[{"expression":{"id":10550,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"13635:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13641:16:55","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":7673,"src":"13635:22:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10547,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"13623:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13629:5:55","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":7705,"src":"13623:11:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":10552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13623:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10553,"nodeType":"ExpressionStatement","src":"13623:35:55"}]}},{"expression":{"id":10556,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10538,"src":"13685:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10534,"id":10557,"nodeType":"Return","src":"13678:13:55"}]},"documentation":{"id":10524,"nodeType":"StructuredDocumentation","src":"12760:678:55","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."},"id":10559,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"13452:6:55","nodeType":"FunctionDefinition","parameters":{"id":10531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10526,"mutability":"mutable","name":"b","nameLocation":"13467:1:55","nodeType":"VariableDeclaration","scope":10559,"src":"13459:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10525,"name":"uint256","nodeType":"ElementaryTypeName","src":"13459:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10528,"mutability":"mutable","name":"e","nameLocation":"13478:1:55","nodeType":"VariableDeclaration","scope":10559,"src":"13470:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10527,"name":"uint256","nodeType":"ElementaryTypeName","src":"13470:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10530,"mutability":"mutable","name":"m","nameLocation":"13489:1:55","nodeType":"VariableDeclaration","scope":10559,"src":"13481:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10529,"name":"uint256","nodeType":"ElementaryTypeName","src":"13481:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13458:33:55"},"returnParameters":{"id":10534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10559,"src":"13515:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10532,"name":"uint256","nodeType":"ElementaryTypeName","src":"13515:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13514:9:55"},"scope":11538,"src":"13443:255:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10582,"nodeType":"Block","src":"14552:1493:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10573,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10566,"src":"14566:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14571:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14566:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10580,"nodeType":"IfStatement","src":"14562:29:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":10576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14582:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":10577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14589:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":10578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"14581:10:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":10572,"id":10579,"nodeType":"Return","src":"14574:17:55"}},{"AST":{"nativeSrc":"14626:1413:55","nodeType":"YulBlock","src":"14626:1413:55","statements":[{"nativeSrc":"14640:22:55","nodeType":"YulVariableDeclaration","src":"14640:22:55","value":{"arguments":[{"kind":"number","nativeSrc":"14657:4:55","nodeType":"YulLiteral","src":"14657:4:55","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"14651:5:55","nodeType":"YulIdentifier","src":"14651:5:55"},"nativeSrc":"14651:11:55","nodeType":"YulFunctionCall","src":"14651:11:55"},"variables":[{"name":"ptr","nativeSrc":"14644:3:55","nodeType":"YulTypedName","src":"14644:3:55","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"15570:3:55","nodeType":"YulIdentifier","src":"15570:3:55"},{"kind":"number","nativeSrc":"15575:4:55","nodeType":"YulLiteral","src":"15575:4:55","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"15563:6:55","nodeType":"YulIdentifier","src":"15563:6:55"},"nativeSrc":"15563:17:55","nodeType":"YulFunctionCall","src":"15563:17:55"},"nativeSrc":"15563:17:55","nodeType":"YulExpressionStatement","src":"15563:17:55"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"15604:3:55","nodeType":"YulIdentifier","src":"15604:3:55"},{"kind":"number","nativeSrc":"15609:4:55","nodeType":"YulLiteral","src":"15609:4:55","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"15600:3:55","nodeType":"YulIdentifier","src":"15600:3:55"},"nativeSrc":"15600:14:55","nodeType":"YulFunctionCall","src":"15600:14:55"},{"kind":"number","nativeSrc":"15616:4:55","nodeType":"YulLiteral","src":"15616:4:55","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"15593:6:55","nodeType":"YulIdentifier","src":"15593:6:55"},"nativeSrc":"15593:28:55","nodeType":"YulFunctionCall","src":"15593:28:55"},"nativeSrc":"15593:28:55","nodeType":"YulExpressionStatement","src":"15593:28:55"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"15645:3:55","nodeType":"YulIdentifier","src":"15645:3:55"},{"kind":"number","nativeSrc":"15650:4:55","nodeType":"YulLiteral","src":"15650:4:55","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"15641:3:55","nodeType":"YulIdentifier","src":"15641:3:55"},"nativeSrc":"15641:14:55","nodeType":"YulFunctionCall","src":"15641:14:55"},{"kind":"number","nativeSrc":"15657:4:55","nodeType":"YulLiteral","src":"15657:4:55","type":"","value":"0x20"}],"functionName":{"name":"mstore","nativeSrc":"15634:6:55","nodeType":"YulIdentifier","src":"15634:6:55"},"nativeSrc":"15634:28:55","nodeType":"YulFunctionCall","src":"15634:28:55"},"nativeSrc":"15634:28:55","nodeType":"YulExpressionStatement","src":"15634:28:55"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"15686:3:55","nodeType":"YulIdentifier","src":"15686:3:55"},{"kind":"number","nativeSrc":"15691:4:55","nodeType":"YulLiteral","src":"15691:4:55","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"15682:3:55","nodeType":"YulIdentifier","src":"15682:3:55"},"nativeSrc":"15682:14:55","nodeType":"YulFunctionCall","src":"15682:14:55"},{"name":"b","nativeSrc":"15698:1:55","nodeType":"YulIdentifier","src":"15698:1:55"}],"functionName":{"name":"mstore","nativeSrc":"15675:6:55","nodeType":"YulIdentifier","src":"15675:6:55"},"nativeSrc":"15675:25:55","nodeType":"YulFunctionCall","src":"15675:25:55"},"nativeSrc":"15675:25:55","nodeType":"YulExpressionStatement","src":"15675:25:55"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"15724:3:55","nodeType":"YulIdentifier","src":"15724:3:55"},{"kind":"number","nativeSrc":"15729:4:55","nodeType":"YulLiteral","src":"15729:4:55","type":"","value":"0x80"}],"functionName":{"name":"add","nativeSrc":"15720:3:55","nodeType":"YulIdentifier","src":"15720:3:55"},"nativeSrc":"15720:14:55","nodeType":"YulFunctionCall","src":"15720:14:55"},{"name":"e","nativeSrc":"15736:1:55","nodeType":"YulIdentifier","src":"15736:1:55"}],"functionName":{"name":"mstore","nativeSrc":"15713:6:55","nodeType":"YulIdentifier","src":"15713:6:55"},"nativeSrc":"15713:25:55","nodeType":"YulFunctionCall","src":"15713:25:55"},"nativeSrc":"15713:25:55","nodeType":"YulExpressionStatement","src":"15713:25:55"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"15762:3:55","nodeType":"YulIdentifier","src":"15762:3:55"},{"kind":"number","nativeSrc":"15767:4:55","nodeType":"YulLiteral","src":"15767:4:55","type":"","value":"0xa0"}],"functionName":{"name":"add","nativeSrc":"15758:3:55","nodeType":"YulIdentifier","src":"15758:3:55"},"nativeSrc":"15758:14:55","nodeType":"YulFunctionCall","src":"15758:14:55"},{"name":"m","nativeSrc":"15774:1:55","nodeType":"YulIdentifier","src":"15774:1:55"}],"functionName":{"name":"mstore","nativeSrc":"15751:6:55","nodeType":"YulIdentifier","src":"15751:6:55"},"nativeSrc":"15751:25:55","nodeType":"YulFunctionCall","src":"15751:25:55"},"nativeSrc":"15751:25:55","nodeType":"YulExpressionStatement","src":"15751:25:55"},{"nativeSrc":"15938:57:55","nodeType":"YulAssignment","src":"15938:57:55","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"15960:3:55","nodeType":"YulIdentifier","src":"15960:3:55"},"nativeSrc":"15960:5:55","nodeType":"YulFunctionCall","src":"15960:5:55"},{"kind":"number","nativeSrc":"15967:4:55","nodeType":"YulLiteral","src":"15967:4:55","type":"","value":"0x05"},{"name":"ptr","nativeSrc":"15973:3:55","nodeType":"YulIdentifier","src":"15973:3:55"},{"kind":"number","nativeSrc":"15978:4:55","nodeType":"YulLiteral","src":"15978:4:55","type":"","value":"0xc0"},{"kind":"number","nativeSrc":"15984:4:55","nodeType":"YulLiteral","src":"15984:4:55","type":"","value":"0x00"},{"kind":"number","nativeSrc":"15990:4:55","nodeType":"YulLiteral","src":"15990:4:55","type":"","value":"0x20"}],"functionName":{"name":"staticcall","nativeSrc":"15949:10:55","nodeType":"YulIdentifier","src":"15949:10:55"},"nativeSrc":"15949:46:55","nodeType":"YulFunctionCall","src":"15949:46:55"},"variableNames":[{"name":"success","nativeSrc":"15938:7:55","nodeType":"YulIdentifier","src":"15938:7:55"}]},{"nativeSrc":"16008:21:55","nodeType":"YulAssignment","src":"16008:21:55","value":{"arguments":[{"kind":"number","nativeSrc":"16024:4:55","nodeType":"YulLiteral","src":"16024:4:55","type":"","value":"0x00"}],"functionName":{"name":"mload","nativeSrc":"16018:5:55","nodeType":"YulIdentifier","src":"16018:5:55"},"nativeSrc":"16018:11:55","nodeType":"YulFunctionCall","src":"16018:11:55"},"variableNames":[{"name":"result","nativeSrc":"16008:6:55","nodeType":"YulIdentifier","src":"16008:6:55"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10562,"isOffset":false,"isSlot":false,"src":"15698:1:55","valueSize":1},{"declaration":10564,"isOffset":false,"isSlot":false,"src":"15736:1:55","valueSize":1},{"declaration":10566,"isOffset":false,"isSlot":false,"src":"15774:1:55","valueSize":1},{"declaration":10571,"isOffset":false,"isSlot":false,"src":"16008:6:55","valueSize":1},{"declaration":10569,"isOffset":false,"isSlot":false,"src":"15938:7:55","valueSize":1}],"flags":["memory-safe"],"id":10581,"nodeType":"InlineAssembly","src":"14601:1438:55"}]},"documentation":{"id":10560,"nodeType":"StructuredDocumentation","src":"13704:738:55","text":" @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."},"id":10583,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"14456:9:55","nodeType":"FunctionDefinition","parameters":{"id":10567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10562,"mutability":"mutable","name":"b","nameLocation":"14474:1:55","nodeType":"VariableDeclaration","scope":10583,"src":"14466:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10561,"name":"uint256","nodeType":"ElementaryTypeName","src":"14466:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10564,"mutability":"mutable","name":"e","nameLocation":"14485:1:55","nodeType":"VariableDeclaration","scope":10583,"src":"14477:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10563,"name":"uint256","nodeType":"ElementaryTypeName","src":"14477:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10566,"mutability":"mutable","name":"m","nameLocation":"14496:1:55","nodeType":"VariableDeclaration","scope":10583,"src":"14488:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10565,"name":"uint256","nodeType":"ElementaryTypeName","src":"14488:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14465:33:55"},"returnParameters":{"id":10572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10569,"mutability":"mutable","name":"success","nameLocation":"14527:7:55","nodeType":"VariableDeclaration","scope":10583,"src":"14522:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10568,"name":"bool","nodeType":"ElementaryTypeName","src":"14522:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10571,"mutability":"mutable","name":"result","nameLocation":"14544:6:55","nodeType":"VariableDeclaration","scope":10583,"src":"14536:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10570,"name":"uint256","nodeType":"ElementaryTypeName","src":"14536:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14521:30:55"},"scope":11538,"src":"14447:1598:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10618,"nodeType":"Block","src":"16242:179:55","statements":[{"assignments":[10596,10598],"declarations":[{"constant":false,"id":10596,"mutability":"mutable","name":"success","nameLocation":"16258:7:55","nodeType":"VariableDeclaration","scope":10618,"src":"16253:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10595,"name":"bool","nodeType":"ElementaryTypeName","src":"16253:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10598,"mutability":"mutable","name":"result","nameLocation":"16280:6:55","nodeType":"VariableDeclaration","scope":10618,"src":"16267:19:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10597,"name":"bytes","nodeType":"ElementaryTypeName","src":"16267:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":10604,"initialValue":{"arguments":[{"id":10600,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"16300:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":10601,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10588,"src":"16303:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":10602,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10590,"src":"16306:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10599,"name":"tryModExp","nodeType":"Identifier","overloadedDeclarations":[10583,10665],"referencedDeclaration":10665,"src":"16290:9:55","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"}},"id":10603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16290:18:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"16252:56:55"},{"condition":{"id":10606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16322:8:55","subExpression":{"id":10605,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10596,"src":"16323:7:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10615,"nodeType":"IfStatement","src":"16318:74:55","trueBody":{"id":10614,"nodeType":"Block","src":"16332:60:55","statements":[{"expression":{"arguments":[{"expression":{"id":10610,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"16358:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10611,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16364:16:55","memberName":"DIVISION_BY_ZERO","nodeType":"MemberAccess","referencedDeclaration":7673,"src":"16358:22:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10607,"name":"Panic","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7706,"src":"16346:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Panic_$7706_$","typeString":"type(library Panic)"}},"id":10609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16352:5:55","memberName":"panic","nodeType":"MemberAccess","referencedDeclaration":7705,"src":"16346:11:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":10612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16346:35:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10613,"nodeType":"ExpressionStatement","src":"16346:35:55"}]}},{"expression":{"id":10616,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10598,"src":"16408:6:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":10594,"id":10617,"nodeType":"Return","src":"16401:13:55"}]},"documentation":{"id":10584,"nodeType":"StructuredDocumentation","src":"16051:85:55","text":" @dev Variant of {modExp} that supports inputs of arbitrary length."},"id":10619,"implemented":true,"kind":"function","modifiers":[],"name":"modExp","nameLocation":"16150:6:55","nodeType":"FunctionDefinition","parameters":{"id":10591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10586,"mutability":"mutable","name":"b","nameLocation":"16170:1:55","nodeType":"VariableDeclaration","scope":10619,"src":"16157:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10585,"name":"bytes","nodeType":"ElementaryTypeName","src":"16157:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10588,"mutability":"mutable","name":"e","nameLocation":"16186:1:55","nodeType":"VariableDeclaration","scope":10619,"src":"16173:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10587,"name":"bytes","nodeType":"ElementaryTypeName","src":"16173:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10590,"mutability":"mutable","name":"m","nameLocation":"16202:1:55","nodeType":"VariableDeclaration","scope":10619,"src":"16189:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10589,"name":"bytes","nodeType":"ElementaryTypeName","src":"16189:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16156:48:55"},"returnParameters":{"id":10594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10619,"src":"16228:12:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10592,"name":"bytes","nodeType":"ElementaryTypeName","src":"16228:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16227:14:55"},"scope":11538,"src":"16141:280:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10664,"nodeType":"Block","src":"16675:771:55","statements":[{"condition":{"arguments":[{"id":10634,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10626,"src":"16700:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":10633,"name":"_zeroBytes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10698,"src":"16689:10:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (bytes memory) pure returns (bool)"}},"id":10635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16689:13:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10643,"nodeType":"IfStatement","src":"16685:47:55","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":10636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16712:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"arguments":[{"hexValue":"30","id":10639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16729:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":10638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16719:9:55","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":10637,"name":"bytes","nodeType":"ElementaryTypeName","src":"16723:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":10640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16719:12:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":10641,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16711:21:55","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"functionReturnParameters":10632,"id":10642,"nodeType":"Return","src":"16704:28:55"}},{"assignments":[10645],"declarations":[{"constant":false,"id":10645,"mutability":"mutable","name":"mLen","nameLocation":"16751:4:55","nodeType":"VariableDeclaration","scope":10664,"src":"16743:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10644,"name":"uint256","nodeType":"ElementaryTypeName","src":"16743:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10648,"initialValue":{"expression":{"id":10646,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10626,"src":"16758:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16760:6:55","memberName":"length","nodeType":"MemberAccess","src":"16758:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16743:23:55"},{"expression":{"id":10661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10649,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10631,"src":"16848:6:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":10652,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10622,"src":"16874:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16876:6:55","memberName":"length","nodeType":"MemberAccess","src":"16874:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":10654,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10624,"src":"16884:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16886:6:55","memberName":"length","nodeType":"MemberAccess","src":"16884:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10656,"name":"mLen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10645,"src":"16894:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10657,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10622,"src":"16900:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":10658,"name":"e","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10624,"src":"16903:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":10659,"name":"m","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10626,"src":"16906:1:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":10650,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16857:3:55","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":10651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16861:12:55","memberName":"encodePacked","nodeType":"MemberAccess","src":"16857:16:55","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":10660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16857:51:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"16848:60:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10662,"nodeType":"ExpressionStatement","src":"16848:60:55"},{"AST":{"nativeSrc":"16944:496:55","nodeType":"YulBlock","src":"16944:496:55","statements":[{"nativeSrc":"16958:32:55","nodeType":"YulVariableDeclaration","src":"16958:32:55","value":{"arguments":[{"name":"result","nativeSrc":"16977:6:55","nodeType":"YulIdentifier","src":"16977:6:55"},{"kind":"number","nativeSrc":"16985:4:55","nodeType":"YulLiteral","src":"16985:4:55","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"16973:3:55","nodeType":"YulIdentifier","src":"16973:3:55"},"nativeSrc":"16973:17:55","nodeType":"YulFunctionCall","src":"16973:17:55"},"variables":[{"name":"dataPtr","nativeSrc":"16962:7:55","nodeType":"YulTypedName","src":"16962:7:55","type":""}]},{"nativeSrc":"17080:73:55","nodeType":"YulAssignment","src":"17080:73:55","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"17102:3:55","nodeType":"YulIdentifier","src":"17102:3:55"},"nativeSrc":"17102:5:55","nodeType":"YulFunctionCall","src":"17102:5:55"},{"kind":"number","nativeSrc":"17109:4:55","nodeType":"YulLiteral","src":"17109:4:55","type":"","value":"0x05"},{"name":"dataPtr","nativeSrc":"17115:7:55","nodeType":"YulIdentifier","src":"17115:7:55"},{"arguments":[{"name":"result","nativeSrc":"17130:6:55","nodeType":"YulIdentifier","src":"17130:6:55"}],"functionName":{"name":"mload","nativeSrc":"17124:5:55","nodeType":"YulIdentifier","src":"17124:5:55"},"nativeSrc":"17124:13:55","nodeType":"YulFunctionCall","src":"17124:13:55"},{"name":"dataPtr","nativeSrc":"17139:7:55","nodeType":"YulIdentifier","src":"17139:7:55"},{"name":"mLen","nativeSrc":"17148:4:55","nodeType":"YulIdentifier","src":"17148:4:55"}],"functionName":{"name":"staticcall","nativeSrc":"17091:10:55","nodeType":"YulIdentifier","src":"17091:10:55"},"nativeSrc":"17091:62:55","nodeType":"YulFunctionCall","src":"17091:62:55"},"variableNames":[{"name":"success","nativeSrc":"17080:7:55","nodeType":"YulIdentifier","src":"17080:7:55"}]},{"expression":{"arguments":[{"name":"result","nativeSrc":"17309:6:55","nodeType":"YulIdentifier","src":"17309:6:55"},{"name":"mLen","nativeSrc":"17317:4:55","nodeType":"YulIdentifier","src":"17317:4:55"}],"functionName":{"name":"mstore","nativeSrc":"17302:6:55","nodeType":"YulIdentifier","src":"17302:6:55"},"nativeSrc":"17302:20:55","nodeType":"YulFunctionCall","src":"17302:20:55"},"nativeSrc":"17302:20:55","nodeType":"YulExpressionStatement","src":"17302:20:55"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"17405:4:55","nodeType":"YulLiteral","src":"17405:4:55","type":"","value":"0x40"},{"arguments":[{"name":"dataPtr","nativeSrc":"17415:7:55","nodeType":"YulIdentifier","src":"17415:7:55"},{"name":"mLen","nativeSrc":"17424:4:55","nodeType":"YulIdentifier","src":"17424:4:55"}],"functionName":{"name":"add","nativeSrc":"17411:3:55","nodeType":"YulIdentifier","src":"17411:3:55"},"nativeSrc":"17411:18:55","nodeType":"YulFunctionCall","src":"17411:18:55"}],"functionName":{"name":"mstore","nativeSrc":"17398:6:55","nodeType":"YulIdentifier","src":"17398:6:55"},"nativeSrc":"17398:32:55","nodeType":"YulFunctionCall","src":"17398:32:55"},"nativeSrc":"17398:32:55","nodeType":"YulExpressionStatement","src":"17398:32:55"}]},"evmVersion":"cancun","externalReferences":[{"declaration":10645,"isOffset":false,"isSlot":false,"src":"17148:4:55","valueSize":1},{"declaration":10645,"isOffset":false,"isSlot":false,"src":"17317:4:55","valueSize":1},{"declaration":10645,"isOffset":false,"isSlot":false,"src":"17424:4:55","valueSize":1},{"declaration":10631,"isOffset":false,"isSlot":false,"src":"16977:6:55","valueSize":1},{"declaration":10631,"isOffset":false,"isSlot":false,"src":"17130:6:55","valueSize":1},{"declaration":10631,"isOffset":false,"isSlot":false,"src":"17309:6:55","valueSize":1},{"declaration":10629,"isOffset":false,"isSlot":false,"src":"17080:7:55","valueSize":1}],"flags":["memory-safe"],"id":10663,"nodeType":"InlineAssembly","src":"16919:521:55"}]},"documentation":{"id":10620,"nodeType":"StructuredDocumentation","src":"16427:88:55","text":" @dev Variant of {tryModExp} that supports inputs of arbitrary length."},"id":10665,"implemented":true,"kind":"function","modifiers":[],"name":"tryModExp","nameLocation":"16529:9:55","nodeType":"FunctionDefinition","parameters":{"id":10627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10622,"mutability":"mutable","name":"b","nameLocation":"16561:1:55","nodeType":"VariableDeclaration","scope":10665,"src":"16548:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10621,"name":"bytes","nodeType":"ElementaryTypeName","src":"16548:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10624,"mutability":"mutable","name":"e","nameLocation":"16585:1:55","nodeType":"VariableDeclaration","scope":10665,"src":"16572:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10623,"name":"bytes","nodeType":"ElementaryTypeName","src":"16572:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":10626,"mutability":"mutable","name":"m","nameLocation":"16609:1:55","nodeType":"VariableDeclaration","scope":10665,"src":"16596:14:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10625,"name":"bytes","nodeType":"ElementaryTypeName","src":"16596:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16538:78:55"},"returnParameters":{"id":10632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10629,"mutability":"mutable","name":"success","nameLocation":"16645:7:55","nodeType":"VariableDeclaration","scope":10665,"src":"16640:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10628,"name":"bool","nodeType":"ElementaryTypeName","src":"16640:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":10631,"mutability":"mutable","name":"result","nameLocation":"16667:6:55","nodeType":"VariableDeclaration","scope":10665,"src":"16654:19:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10630,"name":"bytes","nodeType":"ElementaryTypeName","src":"16654:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16639:35:55"},"scope":11538,"src":"16520:926:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10697,"nodeType":"Block","src":"17601:176:55","statements":[{"body":{"id":10693,"nodeType":"Block","src":"17658:92:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"id":10688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":10684,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10668,"src":"17676:9:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10686,"indexExpression":{"id":10685,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"17686:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17676:12:55","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17692:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17676:17:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10692,"nodeType":"IfStatement","src":"17672:68:55","trueBody":{"id":10691,"nodeType":"Block","src":"17695:45:55","statements":[{"expression":{"hexValue":"66616c7365","id":10689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17720:5:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":10672,"id":10690,"nodeType":"Return","src":"17713:12:55"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10677,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"17631:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":10678,"name":"byteArray","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10668,"src":"17635:9:55","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":10679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17645:6:55","memberName":"length","nodeType":"MemberAccess","src":"17635:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17631:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10694,"initializationExpression":{"assignments":[10674],"declarations":[{"constant":false,"id":10674,"mutability":"mutable","name":"i","nameLocation":"17624:1:55","nodeType":"VariableDeclaration","scope":10694,"src":"17616:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10673,"name":"uint256","nodeType":"ElementaryTypeName","src":"17616:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10676,"initialValue":{"hexValue":"30","id":10675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17628:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17616:13:55"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":10682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"17653:3:55","subExpression":{"id":10681,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"17655:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10683,"nodeType":"ExpressionStatement","src":"17653:3:55"},"nodeType":"ForStatement","src":"17611:139:55"},{"expression":{"hexValue":"74727565","id":10695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17766:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10672,"id":10696,"nodeType":"Return","src":"17759:11:55"}]},"documentation":{"id":10666,"nodeType":"StructuredDocumentation","src":"17452:72:55","text":" @dev Returns whether the provided byte array is zero."},"id":10698,"implemented":true,"kind":"function","modifiers":[],"name":"_zeroBytes","nameLocation":"17538:10:55","nodeType":"FunctionDefinition","parameters":{"id":10669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10668,"mutability":"mutable","name":"byteArray","nameLocation":"17562:9:55","nodeType":"VariableDeclaration","scope":10698,"src":"17549:22:55","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10667,"name":"bytes","nodeType":"ElementaryTypeName","src":"17549:5:55","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17548:24:55"},"returnParameters":{"id":10672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10671,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10698,"src":"17595:4:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10670,"name":"bool","nodeType":"ElementaryTypeName","src":"17595:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17594:6:55"},"scope":11538,"src":"17529:248:55","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":10916,"nodeType":"Block","src":"18137:5124:55","statements":[{"id":10915,"nodeType":"UncheckedBlock","src":"18147:5108:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10706,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"18241:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"31","id":10707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18246:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18241:6:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10712,"nodeType":"IfStatement","src":"18237:53:55","trueBody":{"id":10711,"nodeType":"Block","src":"18249:41:55","statements":[{"expression":{"id":10709,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"18274:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10705,"id":10710,"nodeType":"Return","src":"18267:8:55"}]}},{"assignments":[10714],"declarations":[{"constant":false,"id":10714,"mutability":"mutable","name":"aa","nameLocation":"19225:2:55","nodeType":"VariableDeclaration","scope":10915,"src":"19217:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10713,"name":"uint256","nodeType":"ElementaryTypeName","src":"19217:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10716,"initialValue":{"id":10715,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"19230:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19217:14:55"},{"assignments":[10718],"declarations":[{"constant":false,"id":10718,"mutability":"mutable","name":"xn","nameLocation":"19253:2:55","nodeType":"VariableDeclaration","scope":10915,"src":"19245:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10717,"name":"uint256","nodeType":"ElementaryTypeName","src":"19245:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10720,"initialValue":{"hexValue":"31","id":10719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19258:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"19245:14:55"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10721,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19278:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":10724,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19285:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":10723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19290:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"19285:8:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":10725,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19284:10:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"src":"19278:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10736,"nodeType":"IfStatement","src":"19274:92:55","trueBody":{"id":10735,"nodeType":"Block","src":"19296:70:55","statements":[{"expression":{"id":10729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10727,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19314:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":10728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19321:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"19314:10:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10730,"nodeType":"ExpressionStatement","src":"19314:10:55"},{"expression":{"id":10733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10731,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19342:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3634","id":10732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19349:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"19342:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10734,"nodeType":"ExpressionStatement","src":"19342:9:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10737,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19383:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":10740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19390:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":10739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19395:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"19390:7:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":10741,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19389:9:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"src":"19383:15:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10752,"nodeType":"IfStatement","src":"19379:90:55","trueBody":{"id":10751,"nodeType":"Block","src":"19400:69:55","statements":[{"expression":{"id":10745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10743,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19418:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":10744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19425:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"19418:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10746,"nodeType":"ExpressionStatement","src":"19418:9:55"},{"expression":{"id":10749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10747,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19445:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3332","id":10748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19452:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"19445:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10750,"nodeType":"ExpressionStatement","src":"19445:9:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10753,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19486:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":10756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19493:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":10755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19498:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"19493:7:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":10757,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19492:9:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"src":"19486:15:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10768,"nodeType":"IfStatement","src":"19482:90:55","trueBody":{"id":10767,"nodeType":"Block","src":"19503:69:55","statements":[{"expression":{"id":10761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10759,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19521:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":10760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19528:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"19521:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10762,"nodeType":"ExpressionStatement","src":"19521:9:55"},{"expression":{"id":10765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10763,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19548:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"3136","id":10764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19555:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"19548:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10766,"nodeType":"ExpressionStatement","src":"19548:9:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10769,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19589:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":10772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19596:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":10771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19601:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"19596:7:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":10773,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19595:9:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"src":"19589:15:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10784,"nodeType":"IfStatement","src":"19585:89:55","trueBody":{"id":10783,"nodeType":"Block","src":"19606:68:55","statements":[{"expression":{"id":10777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10775,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19624:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":10776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19631:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"19624:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10778,"nodeType":"ExpressionStatement","src":"19624:9:55"},{"expression":{"id":10781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10779,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19651:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"38","id":10780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19658:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"19651:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10782,"nodeType":"ExpressionStatement","src":"19651:8:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10785,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19691:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":10788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19698:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":10787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19703:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"19698:6:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":10789,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19697:8:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"src":"19691:14:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10800,"nodeType":"IfStatement","src":"19687:87:55","trueBody":{"id":10799,"nodeType":"Block","src":"19707:67:55","statements":[{"expression":{"id":10793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10791,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19725:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":10792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19732:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"19725:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10794,"nodeType":"ExpressionStatement","src":"19725:8:55"},{"expression":{"id":10797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10795,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19751:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"34","id":10796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19758:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"19751:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10798,"nodeType":"ExpressionStatement","src":"19751:8:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10801,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19791:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":10804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19798:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":10803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19803:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"19798:6:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":10805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19797:8:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"src":"19791:14:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10816,"nodeType":"IfStatement","src":"19787:87:55","trueBody":{"id":10815,"nodeType":"Block","src":"19807:67:55","statements":[{"expression":{"id":10809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10807,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19825:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":10808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19832:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"19825:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10810,"nodeType":"ExpressionStatement","src":"19825:8:55"},{"expression":{"id":10813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10811,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19851:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"32","id":10812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19858:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19851:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10814,"nodeType":"ExpressionStatement","src":"19851:8:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10817,"name":"aa","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10714,"src":"19891:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":10820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19898:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":10819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19903:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19898:6:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":10821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"19897:8:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"src":"19891:14:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10828,"nodeType":"IfStatement","src":"19887:61:55","trueBody":{"id":10827,"nodeType":"Block","src":"19907:41:55","statements":[{"expression":{"id":10825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10823,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"19925:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"<<=","rightHandSide":{"hexValue":"31","id":10824,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19932:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19925:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10826,"nodeType":"ExpressionStatement","src":"19925:8:55"}]}},{"expression":{"id":10836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10829,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"20368:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":10830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20374:1:55","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10831,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"20378:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20374:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10833,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20373:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20385:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20373:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20368:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10837,"nodeType":"ExpressionStatement","src":"20368:18:55"},{"expression":{"id":10847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10838,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22273:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10839,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22279:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10840,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22284:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10841,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22288:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22284:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22279:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10844,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22278:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22295:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22278:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22273:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10848,"nodeType":"ExpressionStatement","src":"22273:23:55"},{"expression":{"id":10858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10849,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22382:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10850,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22388:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10851,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22393:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10852,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22397:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22393:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22388:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10855,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22387:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22404:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22387:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22382:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10859,"nodeType":"ExpressionStatement","src":"22382:23:55"},{"expression":{"id":10869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10860,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22493:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10861,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22499:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10862,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22504:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10863,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22508:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22504:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22499:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10866,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22498:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22515:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22498:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22493:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10870,"nodeType":"ExpressionStatement","src":"22493:23:55"},{"expression":{"id":10880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10871,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22602:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10872,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22608:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10873,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22613:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10874,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22617:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22613:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22608:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10877,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22607:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10878,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22624:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22607:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22602:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10881,"nodeType":"ExpressionStatement","src":"22602:23:55"},{"expression":{"id":10891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10882,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22712:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10883,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22718:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10884,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22723:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10885,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22727:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22723:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22718:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10888,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22717:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22734:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22717:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22712:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10892,"nodeType":"ExpressionStatement","src":"22712:23:55"},{"expression":{"id":10902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10893,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22822:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10894,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22828:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10895,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"22833:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10896,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"22837:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22833:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22828:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":10899,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22827:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":10900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22844:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"22827:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22822:23:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10903,"nodeType":"ExpressionStatement","src":"22822:23:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10904,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"23211:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10907,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"23232:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10908,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10701,"src":"23237:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":10909,"name":"xn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10718,"src":"23241:2:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23237:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23232:11:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10905,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"23216:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23225:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"23216:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23216:28:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23211:33:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10705,"id":10914,"nodeType":"Return","src":"23204:40:55"}]}]},"documentation":{"id":10699,"nodeType":"StructuredDocumentation","src":"17783:292:55","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."},"id":10917,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"18089:4:55","nodeType":"FunctionDefinition","parameters":{"id":10702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10701,"mutability":"mutable","name":"a","nameLocation":"18102:1:55","nodeType":"VariableDeclaration","scope":10917,"src":"18094:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10700,"name":"uint256","nodeType":"ElementaryTypeName","src":"18094:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18093:11:55"},"returnParameters":{"id":10705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10704,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10917,"src":"18128:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10703,"name":"uint256","nodeType":"ElementaryTypeName","src":"18128:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18127:9:55"},"scope":11538,"src":"18080:5181:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10950,"nodeType":"Block","src":"23434:171:55","statements":[{"id":10949,"nodeType":"UncheckedBlock","src":"23444:155:55","statements":[{"assignments":[10929],"declarations":[{"constant":false,"id":10929,"mutability":"mutable","name":"result","nameLocation":"23476:6:55","nodeType":"VariableDeclaration","scope":10949,"src":"23468:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23468:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10933,"initialValue":{"arguments":[{"id":10931,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10920,"src":"23490:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10930,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[10917,10951],"referencedDeclaration":10917,"src":"23485:4:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":10932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23485:7:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23468:24:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10934,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10929,"src":"23513:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":10945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10938,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10923,"src":"23555:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":10937,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"23538:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$9944_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":10939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23538:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10940,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10929,"src":"23568:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":10941,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10929,"src":"23577:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23568:15:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10943,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10920,"src":"23586:1:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23568:19:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23538:49:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10935,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"23522:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23531:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"23522:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23522:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23513:75:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10927,"id":10948,"nodeType":"Return","src":"23506:82:55"}]}]},"documentation":{"id":10918,"nodeType":"StructuredDocumentation","src":"23267:86:55","text":" @dev Calculates sqrt(a), following the selected rounding direction."},"id":10951,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"23367:4:55","nodeType":"FunctionDefinition","parameters":{"id":10924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10920,"mutability":"mutable","name":"a","nameLocation":"23380:1:55","nodeType":"VariableDeclaration","scope":10951,"src":"23372:9:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10919,"name":"uint256","nodeType":"ElementaryTypeName","src":"23372:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10923,"mutability":"mutable","name":"rounding","nameLocation":"23392:8:55","nodeType":"VariableDeclaration","scope":10951,"src":"23383:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":10922,"nodeType":"UserDefinedTypeName","pathNode":{"id":10921,"name":"Rounding","nameLocations":["23383:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"23383:8:55"},"referencedDeclaration":9944,"src":"23383:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"23371:30:55"},"returnParameters":{"id":10927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10951,"src":"23425:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10925,"name":"uint256","nodeType":"ElementaryTypeName","src":"23425:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23424:9:55"},"scope":11538,"src":"23358:247:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11146,"nodeType":"Block","src":"23796:981:55","statements":[{"assignments":[10960],"declarations":[{"constant":false,"id":10960,"mutability":"mutable","name":"result","nameLocation":"23814:6:55","nodeType":"VariableDeclaration","scope":11146,"src":"23806:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10959,"name":"uint256","nodeType":"ElementaryTypeName","src":"23806:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10962,"initialValue":{"hexValue":"30","id":10961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23823:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23806:18:55"},{"assignments":[10964],"declarations":[{"constant":false,"id":10964,"mutability":"mutable","name":"exp","nameLocation":"23842:3:55","nodeType":"VariableDeclaration","scope":11146,"src":"23834:11:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10963,"name":"uint256","nodeType":"ElementaryTypeName","src":"23834:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10965,"nodeType":"VariableDeclarationStatement","src":"23834:11:55"},{"id":11143,"nodeType":"UncheckedBlock","src":"23855:893:55","statements":[{"expression":{"id":10980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10966,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"23879:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"313238","id":10967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23885:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10970,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"23907:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":10976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":10973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23916:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":10972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23921:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"23916:8:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":10974,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"23915:10:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23928:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23915:14:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"src":"23907:22:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10968,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"23891:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23900:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"23891:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":10978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23891:39:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23885:45:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23879:51:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10981,"nodeType":"ExpressionStatement","src":"23879:51:55"},{"expression":{"id":10984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"23944:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":10983,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"23954:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23944:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10985,"nodeType":"ExpressionStatement","src":"23944:13:55"},{"expression":{"id":10988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10986,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"23971:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":10987,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"23981:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23971:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10989,"nodeType":"ExpressionStatement","src":"23971:13:55"},{"expression":{"id":11004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10990,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"23999:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3634","id":10991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24005:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24026:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"id":11000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":10997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":10995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24035:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":10996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24040:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"24035:7:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":10998,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24034:9:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24046:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24034:13:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"}},"src":"24026:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":10992,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24010:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":10993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24019:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24010:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24010:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24005:43:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23999:49:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11005,"nodeType":"ExpressionStatement","src":"23999:49:55"},{"expression":{"id":11008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11006,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24062:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11007,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24072:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24062:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11009,"nodeType":"ExpressionStatement","src":"24062:13:55"},{"expression":{"id":11012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11010,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24089:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11011,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24099:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24089:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11013,"nodeType":"ExpressionStatement","src":"24089:13:55"},{"expression":{"id":11028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11014,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24117:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3332","id":11015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24123:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24144:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"id":11024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":11021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24153:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":11020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24158:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"24153:7:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":11022,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24152:9:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24164:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24152:13:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"}},"src":"24144:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11016,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24128:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24137:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24128:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24128:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24123:43:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24117:49:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11029,"nodeType":"ExpressionStatement","src":"24117:49:55"},{"expression":{"id":11032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11030,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24180:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11031,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24190:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24180:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11033,"nodeType":"ExpressionStatement","src":"24180:13:55"},{"expression":{"id":11036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11034,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24207:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11035,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24217:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24207:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11037,"nodeType":"ExpressionStatement","src":"24207:13:55"},{"expression":{"id":11052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11038,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24235:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3136","id":11039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24241:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11042,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24262:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"id":11048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":11045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24271:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":11044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24276:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"24271:7:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":11046,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24270:9:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24282:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24270:13:55","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"}},"src":"24262:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11040,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24246:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24255:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24246:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24246:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24241:43:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24235:49:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11053,"nodeType":"ExpressionStatement","src":"24235:49:55"},{"expression":{"id":11056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11054,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24298:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11055,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24308:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24298:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11057,"nodeType":"ExpressionStatement","src":"24298:13:55"},{"expression":{"id":11060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11058,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24325:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11059,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24335:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24325:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11061,"nodeType":"ExpressionStatement","src":"24325:13:55"},{"expression":{"id":11076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11062,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24353:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"38","id":11063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24359:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11066,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24379:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"id":11072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":11069,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24388:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":11068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24393:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"24388:6:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":11070,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24387:8:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24398:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24387:12:55","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}},"src":"24379:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11064,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24363:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24372:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24363:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24363:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24359:41:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24353:47:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11077,"nodeType":"ExpressionStatement","src":"24353:47:55"},{"expression":{"id":11080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11078,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24414:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11079,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24424:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24414:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11081,"nodeType":"ExpressionStatement","src":"24414:13:55"},{"expression":{"id":11084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11082,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24441:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11083,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24451:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24441:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11085,"nodeType":"ExpressionStatement","src":"24441:13:55"},{"expression":{"id":11100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11086,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24469:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":11087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24475:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11090,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24495:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"id":11096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"id":11093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24504:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":11092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24509:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"24504:6:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}}],"id":11094,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24503:8:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24514:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24503:12:55","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"}},"src":"24495:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11088,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24479:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24488:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24479:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24479:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24475:41:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24469:47:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11101,"nodeType":"ExpressionStatement","src":"24469:47:55"},{"expression":{"id":11104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11102,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24530:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11103,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24540:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24530:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11105,"nodeType":"ExpressionStatement","src":"24530:13:55"},{"expression":{"id":11108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11106,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24557:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11107,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24567:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24557:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11109,"nodeType":"ExpressionStatement","src":"24557:13:55"},{"expression":{"id":11124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11110,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24585:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":11111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24591:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11114,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24611:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"id":11120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"id":11117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24620:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"32","id":11116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24625:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"24620:6:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}}],"id":11118,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24619:8:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24630:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24619:12:55","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"}},"src":"24611:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11112,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24595:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24604:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24595:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24595:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24591:41:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24585:47:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11125,"nodeType":"ExpressionStatement","src":"24585:47:55"},{"expression":{"id":11128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24646:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"id":11127,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24656:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24646:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11129,"nodeType":"ExpressionStatement","src":"24646:13:55"},{"expression":{"id":11132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11130,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24673:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":11131,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"24683:3:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24673:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11133,"nodeType":"ExpressionStatement","src":"24673:13:55"},{"expression":{"id":11141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11134,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24701:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11137,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10954,"src":"24727:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":11138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24735:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"24727:9:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11135,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"24711:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24720:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"24711:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24711:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24701:36:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11142,"nodeType":"ExpressionStatement","src":"24701:36:55"}]},{"expression":{"id":11144,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"24764:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10958,"id":11145,"nodeType":"Return","src":"24757:13:55"}]},"documentation":{"id":10952,"nodeType":"StructuredDocumentation","src":"23611:119:55","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":11147,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"23744:4:55","nodeType":"FunctionDefinition","parameters":{"id":10955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10954,"mutability":"mutable","name":"value","nameLocation":"23757:5:55","nodeType":"VariableDeclaration","scope":11147,"src":"23749:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10953,"name":"uint256","nodeType":"ElementaryTypeName","src":"23749:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23748:15:55"},"returnParameters":{"id":10958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11147,"src":"23787:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10956,"name":"uint256","nodeType":"ElementaryTypeName","src":"23787:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23786:9:55"},"scope":11538,"src":"23735:1042:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11180,"nodeType":"Block","src":"25010:175:55","statements":[{"id":11179,"nodeType":"UncheckedBlock","src":"25020:159:55","statements":[{"assignments":[11159],"declarations":[{"constant":false,"id":11159,"mutability":"mutable","name":"result","nameLocation":"25052:6:55","nodeType":"VariableDeclaration","scope":11179,"src":"25044:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11158,"name":"uint256","nodeType":"ElementaryTypeName","src":"25044:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11163,"initialValue":{"arguments":[{"id":11161,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11150,"src":"25066:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11160,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[11147,11181],"referencedDeclaration":11147,"src":"25061:4:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25061:11:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"25044:28:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11164,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11159,"src":"25093:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11168,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11153,"src":"25135:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":11167,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"25118:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$9944_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":11169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25118:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25148:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":11171,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11159,"src":"25153:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25148:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11173,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11150,"src":"25162:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25148:19:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25118:49:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11165,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"25102:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25111:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"25102:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25102:66:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25093:75:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11157,"id":11178,"nodeType":"Return","src":"25086:82:55"}]}]},"documentation":{"id":11148,"nodeType":"StructuredDocumentation","src":"24783:142:55","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":11181,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"24939:4:55","nodeType":"FunctionDefinition","parameters":{"id":11154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11150,"mutability":"mutable","name":"value","nameLocation":"24952:5:55","nodeType":"VariableDeclaration","scope":11181,"src":"24944:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11149,"name":"uint256","nodeType":"ElementaryTypeName","src":"24944:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11153,"mutability":"mutable","name":"rounding","nameLocation":"24968:8:55","nodeType":"VariableDeclaration","scope":11181,"src":"24959:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":11152,"nodeType":"UserDefinedTypeName","pathNode":{"id":11151,"name":"Rounding","nameLocations":["24959:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"24959:8:55"},"referencedDeclaration":9944,"src":"24959:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"24943:34:55"},"returnParameters":{"id":11157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11156,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11181,"src":"25001:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11155,"name":"uint256","nodeType":"ElementaryTypeName","src":"25001:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25000:9:55"},"scope":11538,"src":"24930:255:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11309,"nodeType":"Block","src":"25378:854:55","statements":[{"assignments":[11190],"declarations":[{"constant":false,"id":11190,"mutability":"mutable","name":"result","nameLocation":"25396:6:55","nodeType":"VariableDeclaration","scope":11309,"src":"25388:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11189,"name":"uint256","nodeType":"ElementaryTypeName","src":"25388:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11192,"initialValue":{"hexValue":"30","id":11191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25405:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"25388:18:55"},{"id":11306,"nodeType":"UncheckedBlock","src":"25416:787:55","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25444:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":11196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25453:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":11195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25459:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"25453:8:55","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"25444:17:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11209,"nodeType":"IfStatement","src":"25440:103:55","trueBody":{"id":11208,"nodeType":"Block","src":"25463:80:55","statements":[{"expression":{"id":11202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25481:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":11201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25490:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":11200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25496:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"25490:8:55","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"25481:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11203,"nodeType":"ExpressionStatement","src":"25481:17:55"},{"expression":{"id":11206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11204,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"25516:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":11205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25526:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"25516:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11207,"nodeType":"ExpressionStatement","src":"25516:12:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11210,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25560:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":11213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25569:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":11212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25575:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"25569:8:55","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"25560:17:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11226,"nodeType":"IfStatement","src":"25556:103:55","trueBody":{"id":11225,"nodeType":"Block","src":"25579:80:55","statements":[{"expression":{"id":11219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11215,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25597:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":11218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25606:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":11217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25612:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"25606:8:55","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"25597:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11220,"nodeType":"ExpressionStatement","src":"25597:17:55"},{"expression":{"id":11223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11221,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"25632:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":11222,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25642:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"25632:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11224,"nodeType":"ExpressionStatement","src":"25632:12:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11227,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25676:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":11230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25685:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":11229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25691:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"25685:8:55","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"25676:17:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11243,"nodeType":"IfStatement","src":"25672:103:55","trueBody":{"id":11242,"nodeType":"Block","src":"25695:80:55","statements":[{"expression":{"id":11236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11232,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25713:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":11235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25722:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":11234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25728:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"25722:8:55","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"25713:17:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11237,"nodeType":"ExpressionStatement","src":"25713:17:55"},{"expression":{"id":11240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11238,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"25748:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":11239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25758:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"25748:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11241,"nodeType":"ExpressionStatement","src":"25748:12:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11244,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25792:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":11247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25801:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":11246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25807:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"25801:7:55","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"25792:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11260,"nodeType":"IfStatement","src":"25788:100:55","trueBody":{"id":11259,"nodeType":"Block","src":"25810:78:55","statements":[{"expression":{"id":11253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11249,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25828:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":11252,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25837:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":11251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25843:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"25837:7:55","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"25828:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11254,"nodeType":"ExpressionStatement","src":"25828:16:55"},{"expression":{"id":11257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11255,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"25862:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":11256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25872:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"25862:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11258,"nodeType":"ExpressionStatement","src":"25862:11:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25905:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":11264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25914:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":11263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25920:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"25914:7:55","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"25905:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11277,"nodeType":"IfStatement","src":"25901:100:55","trueBody":{"id":11276,"nodeType":"Block","src":"25923:78:55","statements":[{"expression":{"id":11270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"25941:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":11269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25950:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":11268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25956:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"25950:7:55","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"25941:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11271,"nodeType":"ExpressionStatement","src":"25941:16:55"},{"expression":{"id":11274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11272,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"25975:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":11273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25985:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"25975:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11275,"nodeType":"ExpressionStatement","src":"25975:11:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11278,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"26018:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":11281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26027:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":11280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26033:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26027:7:55","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"26018:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11294,"nodeType":"IfStatement","src":"26014:100:55","trueBody":{"id":11293,"nodeType":"Block","src":"26036:78:55","statements":[{"expression":{"id":11287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11283,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"26054:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":11286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26063:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":11285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26069:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26063:7:55","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"26054:16:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11288,"nodeType":"ExpressionStatement","src":"26054:16:55"},{"expression":{"id":11291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11289,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"26088:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":11290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26098:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"26088:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11292,"nodeType":"ExpressionStatement","src":"26088:11:55"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11295,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11184,"src":"26131:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":11298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26140:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":11297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26146:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26140:7:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"26131:16:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11305,"nodeType":"IfStatement","src":"26127:66:55","trueBody":{"id":11304,"nodeType":"Block","src":"26149:44:55","statements":[{"expression":{"id":11302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11300,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"26167:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":11301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26177:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26167:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11303,"nodeType":"ExpressionStatement","src":"26167:11:55"}]}}]},{"expression":{"id":11307,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11190,"src":"26219:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11188,"id":11308,"nodeType":"Return","src":"26212:13:55"}]},"documentation":{"id":11182,"nodeType":"StructuredDocumentation","src":"25191:120:55","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":11310,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"25325:5:55","nodeType":"FunctionDefinition","parameters":{"id":11185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11184,"mutability":"mutable","name":"value","nameLocation":"25339:5:55","nodeType":"VariableDeclaration","scope":11310,"src":"25331:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11183,"name":"uint256","nodeType":"ElementaryTypeName","src":"25331:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25330:15:55"},"returnParameters":{"id":11188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11310,"src":"25369:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11186,"name":"uint256","nodeType":"ElementaryTypeName","src":"25369:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25368:9:55"},"scope":11538,"src":"25316:916:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11343,"nodeType":"Block","src":"26467:177:55","statements":[{"id":11342,"nodeType":"UncheckedBlock","src":"26477:161:55","statements":[{"assignments":[11322],"declarations":[{"constant":false,"id":11322,"mutability":"mutable","name":"result","nameLocation":"26509:6:55","nodeType":"VariableDeclaration","scope":11342,"src":"26501:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11321,"name":"uint256","nodeType":"ElementaryTypeName","src":"26501:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11326,"initialValue":{"arguments":[{"id":11324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11313,"src":"26524:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11323,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[11310,11344],"referencedDeclaration":11310,"src":"26518:5:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26518:12:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26501:29:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11327,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11322,"src":"26551:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11331,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11316,"src":"26593:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":11330,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"26576:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$9944_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":11332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26576:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":11333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26606:2:55","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":11334,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11322,"src":"26612:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26606:12:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11336,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11313,"src":"26621:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26606:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26576:50:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11328,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"26560:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26569:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"26560:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26560:67:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26551:76:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11320,"id":11341,"nodeType":"Return","src":"26544:83:55"}]}]},"documentation":{"id":11311,"nodeType":"StructuredDocumentation","src":"26238:143:55","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":11344,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"26395:5:55","nodeType":"FunctionDefinition","parameters":{"id":11317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11313,"mutability":"mutable","name":"value","nameLocation":"26409:5:55","nodeType":"VariableDeclaration","scope":11344,"src":"26401:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11312,"name":"uint256","nodeType":"ElementaryTypeName","src":"26401:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11316,"mutability":"mutable","name":"rounding","nameLocation":"26425:8:55","nodeType":"VariableDeclaration","scope":11344,"src":"26416:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":11315,"nodeType":"UserDefinedTypeName","pathNode":{"id":11314,"name":"Rounding","nameLocations":["26416:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"26416:8:55"},"referencedDeclaration":9944,"src":"26416:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"26400:34:55"},"returnParameters":{"id":11320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11344,"src":"26458:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11318,"name":"uint256","nodeType":"ElementaryTypeName","src":"26458:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26457:9:55"},"scope":11538,"src":"26386:258:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11480,"nodeType":"Block","src":"26964:674:55","statements":[{"assignments":[11353],"declarations":[{"constant":false,"id":11353,"mutability":"mutable","name":"result","nameLocation":"26982:6:55","nodeType":"VariableDeclaration","scope":11480,"src":"26974:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11352,"name":"uint256","nodeType":"ElementaryTypeName","src":"26974:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11355,"initialValue":{"hexValue":"30","id":11354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26991:1:55","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26974:18:55"},{"assignments":[11357],"declarations":[{"constant":false,"id":11357,"mutability":"mutable","name":"isGt","nameLocation":"27010:4:55","nodeType":"VariableDeclaration","scope":11480,"src":"27002:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11356,"name":"uint256","nodeType":"ElementaryTypeName","src":"27002:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11358,"nodeType":"VariableDeclarationStatement","src":"27002:12:55"},{"id":11477,"nodeType":"UncheckedBlock","src":"27024:585:55","statements":[{"expression":{"id":11371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11359,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27048:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11362,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27071:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":11368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":11365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27080:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":11364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27085:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"27080:8:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}}],"id":11366,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27079:10:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27092:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27079:14:55","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"src":"27071:22:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11360,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27055:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27064:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27055:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27055:39:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27048:46:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11372,"nodeType":"ExpressionStatement","src":"27048:46:55"},{"expression":{"id":11377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27108:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11374,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27118:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"313238","id":11375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27125:3:55","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"27118:10:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27108:20:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11378,"nodeType":"ExpressionStatement","src":"27108:20:55"},{"expression":{"id":11383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11379,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27142:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11380,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27152:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":11381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27159:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"27152:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27142:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11384,"nodeType":"ExpressionStatement","src":"27142:19:55"},{"expression":{"id":11397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11385,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27176:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11388,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27199:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"},"id":11394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"},"id":11391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27208:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3634","id":11390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27213:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"27208:7:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}}],"id":11392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27207:9:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551616_by_1","typeString":"int_const 18446744073709551616"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27219:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27207:13:55","typeDescriptions":{"typeIdentifier":"t_rational_18446744073709551615_by_1","typeString":"int_const 18446744073709551615"}},"src":"27199:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11386,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27183:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27192:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27183:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27183:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27176:45:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11398,"nodeType":"ExpressionStatement","src":"27176:45:55"},{"expression":{"id":11403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27235:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11400,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27245:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3634","id":11401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27252:2:55","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"27245:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27235:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11404,"nodeType":"ExpressionStatement","src":"27235:19:55"},{"expression":{"id":11409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11405,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27268:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11406,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27278:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":11407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27285:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"27278:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27268:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11410,"nodeType":"ExpressionStatement","src":"27268:18:55"},{"expression":{"id":11423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11411,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27301:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11414,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27324:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"},"id":11420,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"},"id":11417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27333:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3332","id":11416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27338:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"27333:7:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}}],"id":11418,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27332:9:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967296_by_1","typeString":"int_const 4294967296"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27344:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27332:13:55","typeDescriptions":{"typeIdentifier":"t_rational_4294967295_by_1","typeString":"int_const 4294967295"}},"src":"27324:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11412,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27308:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27317:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27308:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27308:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27301:45:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11424,"nodeType":"ExpressionStatement","src":"27301:45:55"},{"expression":{"id":11429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11425,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27360:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11426,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27370:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":11427,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27377:2:55","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"27370:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27360:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11430,"nodeType":"ExpressionStatement","src":"27360:19:55"},{"expression":{"id":11435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11431,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27393:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11432,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27403:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"34","id":11433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27410:1:55","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"27403:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27393:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11436,"nodeType":"ExpressionStatement","src":"27393:18:55"},{"expression":{"id":11449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11437,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27426:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11440,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27449:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"},"id":11446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"},"id":11443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27458:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"3136","id":11442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27463:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"27458:7:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}}],"id":11444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27457:9:55","typeDescriptions":{"typeIdentifier":"t_rational_65536_by_1","typeString":"int_const 65536"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27469:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27457:13:55","typeDescriptions":{"typeIdentifier":"t_rational_65535_by_1","typeString":"int_const 65535"}},"src":"27449:21:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11438,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27433:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27442:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27433:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27433:38:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27426:45:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11450,"nodeType":"ExpressionStatement","src":"27426:45:55"},{"expression":{"id":11455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11451,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27485:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11452,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27495:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3136","id":11453,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27502:2:55","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"27495:9:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27485:19:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11456,"nodeType":"ExpressionStatement","src":"27485:19:55"},{"expression":{"id":11461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11457,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27518:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11458,"name":"isGt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11357,"src":"27528:4:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":11459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27535:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"27528:8:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27518:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11462,"nodeType":"ExpressionStatement","src":"27518:18:55"},{"expression":{"id":11475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11463,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27551:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11466,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11347,"src":"27577:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"commonType":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"id":11472,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"id":11469,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27586:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"38","id":11468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27591:1:55","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"27586:6:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}}],"id":11470,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27585:8:55","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27596:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27585:12:55","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}},"src":"27577:20:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11464,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27561:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27570:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27561:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27561:37:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27551:47:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11476,"nodeType":"ExpressionStatement","src":"27551:47:55"}]},{"expression":{"id":11478,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11353,"src":"27625:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11351,"id":11479,"nodeType":"Return","src":"27618:13:55"}]},"documentation":{"id":11345,"nodeType":"StructuredDocumentation","src":"26650:246:55","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":11481,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"26910:6:55","nodeType":"FunctionDefinition","parameters":{"id":11348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11347,"mutability":"mutable","name":"value","nameLocation":"26925:5:55","nodeType":"VariableDeclaration","scope":11481,"src":"26917:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11346,"name":"uint256","nodeType":"ElementaryTypeName","src":"26917:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26916:15:55"},"returnParameters":{"id":11351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11350,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11481,"src":"26955:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11349,"name":"uint256","nodeType":"ElementaryTypeName","src":"26955:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26954:9:55"},"scope":11538,"src":"26901:737:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11517,"nodeType":"Block","src":"27875:184:55","statements":[{"id":11516,"nodeType":"UncheckedBlock","src":"27885:168:55","statements":[{"assignments":[11493],"declarations":[{"constant":false,"id":11493,"mutability":"mutable","name":"result","nameLocation":"27917:6:55","nodeType":"VariableDeclaration","scope":11516,"src":"27909:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11492,"name":"uint256","nodeType":"ElementaryTypeName","src":"27909:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11497,"initialValue":{"arguments":[{"id":11495,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"27933:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11494,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[11481,11518],"referencedDeclaration":11481,"src":"27926:6:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27926:13:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27909:30:55"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11498,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"27960:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":11512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11502,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11487,"src":"28002:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":11501,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11537,"src":"27985:16:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$9944_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":11503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27985:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":11504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28015:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11505,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"28021:6:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":11506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28031:1:55","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"28021:11:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11508,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28020:13:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28015:18:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11510,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"28036:5:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28015:26:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27985:56:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":11499,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"27969:8:55","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":11500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27978:6:55","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"27969:15:55","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":11513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27969:73:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27960:82:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11491,"id":11515,"nodeType":"Return","src":"27953:89:55"}]}]},"documentation":{"id":11482,"nodeType":"StructuredDocumentation","src":"27644:144:55","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":11518,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"27802:6:55","nodeType":"FunctionDefinition","parameters":{"id":11488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11484,"mutability":"mutable","name":"value","nameLocation":"27817:5:55","nodeType":"VariableDeclaration","scope":11518,"src":"27809:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11483,"name":"uint256","nodeType":"ElementaryTypeName","src":"27809:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11487,"mutability":"mutable","name":"rounding","nameLocation":"27833:8:55","nodeType":"VariableDeclaration","scope":11518,"src":"27824:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":11486,"nodeType":"UserDefinedTypeName","pathNode":{"id":11485,"name":"Rounding","nameLocations":["27824:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"27824:8:55"},"referencedDeclaration":9944,"src":"27824:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"27808:34:55"},"returnParameters":{"id":11491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11490,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11518,"src":"27866:7:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11489,"name":"uint256","nodeType":"ElementaryTypeName","src":"27866:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27865:9:55"},"scope":11538,"src":"27793:266:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11536,"nodeType":"Block","src":"28257:48:55","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":11534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":11532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":11529,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11522,"src":"28280:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}],"id":11528,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28274:5:55","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":11527,"name":"uint8","nodeType":"ElementaryTypeName","src":"28274:5:55","typeDescriptions":{}}},"id":11530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28274:15:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":11531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28292:1:55","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"28274:19:55","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":11533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28297:1:55","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"28274:24:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":11526,"id":11535,"nodeType":"Return","src":"28267:31:55"}]},"documentation":{"id":11519,"nodeType":"StructuredDocumentation","src":"28065:113:55","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":11537,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"28192:16:55","nodeType":"FunctionDefinition","parameters":{"id":11523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11522,"mutability":"mutable","name":"rounding","nameLocation":"28218:8:55","nodeType":"VariableDeclaration","scope":11537,"src":"28209:17:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"},"typeName":{"id":11521,"nodeType":"UserDefinedTypeName","pathNode":{"id":11520,"name":"Rounding","nameLocations":["28209:8:55"],"nodeType":"IdentifierPath","referencedDeclaration":9944,"src":"28209:8:55"},"referencedDeclaration":9944,"src":"28209:8:55","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$9944","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"28208:19:55"},"returnParameters":{"id":11526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11537,"src":"28251:4:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11524,"name":"bool","nodeType":"ElementaryTypeName","src":"28251:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28250:6:55"},"scope":11538,"src":"28183:122:55","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":11539,"src":"281:28026:55","usedErrors":[],"usedEvents":[]}],"src":"103:28205:55"},"id":55},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[13303]},"id":13304,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":11540,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:56"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":11541,"nodeType":"StructuredDocumentation","src":"218:550:56","text":" @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":13303,"linearizedBaseContracts":[13303],"name":"SafeCast","nameLocation":"777:8:56","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":11542,"nodeType":"StructuredDocumentation","src":"792:68:56","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":11548,"name":"SafeCastOverflowedUintDowncast","nameLocation":"871:30:56","nodeType":"ErrorDefinition","parameters":{"id":11547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11544,"mutability":"mutable","name":"bits","nameLocation":"908:4:56","nodeType":"VariableDeclaration","scope":11548,"src":"902:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11543,"name":"uint8","nodeType":"ElementaryTypeName","src":"902:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":11546,"mutability":"mutable","name":"value","nameLocation":"922:5:56","nodeType":"VariableDeclaration","scope":11548,"src":"914:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11545,"name":"uint256","nodeType":"ElementaryTypeName","src":"914:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:27:56"},"src":"865:64:56"},{"documentation":{"id":11549,"nodeType":"StructuredDocumentation","src":"935:75:56","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":11553,"name":"SafeCastOverflowedIntToUint","nameLocation":"1021:27:56","nodeType":"ErrorDefinition","parameters":{"id":11552,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11551,"mutability":"mutable","name":"value","nameLocation":"1056:5:56","nodeType":"VariableDeclaration","scope":11553,"src":"1049:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11550,"name":"int256","nodeType":"ElementaryTypeName","src":"1049:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1048:14:56"},"src":"1015:48:56"},{"documentation":{"id":11554,"nodeType":"StructuredDocumentation","src":"1069:67:56","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":11560,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1147:29:56","nodeType":"ErrorDefinition","parameters":{"id":11559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11556,"mutability":"mutable","name":"bits","nameLocation":"1183:4:56","nodeType":"VariableDeclaration","scope":11560,"src":"1177:10:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":11555,"name":"uint8","nodeType":"ElementaryTypeName","src":"1177:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":11558,"mutability":"mutable","name":"value","nameLocation":"1196:5:56","nodeType":"VariableDeclaration","scope":11560,"src":"1189:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":11557,"name":"int256","nodeType":"ElementaryTypeName","src":"1189:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1176:26:56"},"src":"1141:62:56"},{"documentation":{"id":11561,"nodeType":"StructuredDocumentation","src":"1209:75:56","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":11565,"name":"SafeCastOverflowedUintToInt","nameLocation":"1295:27:56","nodeType":"ErrorDefinition","parameters":{"id":11564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11563,"mutability":"mutable","name":"value","nameLocation":"1331:5:56","nodeType":"VariableDeclaration","scope":11565,"src":"1323:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11562,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1322:15:56"},"src":"1289:49:56"},{"body":{"id":11592,"nodeType":"Block","src":"1695:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11568,"src":"1709:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1722:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":11575,"name":"uint248","nodeType":"ElementaryTypeName","src":"1722:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":11574,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1717:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11577,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1717:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":11578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1731:3:56","memberName":"max","nodeType":"MemberAccess","src":"1717:17:56","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1709:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11586,"nodeType":"IfStatement","src":"1705:105:56","trueBody":{"id":11585,"nodeType":"Block","src":"1736:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":11581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1788:3:56","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":11582,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11568,"src":"1793:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11580,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"1757:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1757:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11584,"nodeType":"RevertStatement","src":"1750:49:56"}]}},{"expression":{"arguments":[{"id":11589,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11568,"src":"1834:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1826:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":11587,"name":"uint248","nodeType":"ElementaryTypeName","src":"1826:7:56","typeDescriptions":{}}},"id":11590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1826:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":11572,"id":11591,"nodeType":"Return","src":"1819:21:56"}]},"documentation":{"id":11566,"nodeType":"StructuredDocumentation","src":"1344:280:56","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":11593,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1638:9:56","nodeType":"FunctionDefinition","parameters":{"id":11569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11568,"mutability":"mutable","name":"value","nameLocation":"1656:5:56","nodeType":"VariableDeclaration","scope":11593,"src":"1648:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11567,"name":"uint256","nodeType":"ElementaryTypeName","src":"1648:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1647:15:56"},"returnParameters":{"id":11572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11571,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11593,"src":"1686:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":11570,"name":"uint248","nodeType":"ElementaryTypeName","src":"1686:7:56","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1685:9:56"},"scope":13303,"src":"1629:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11620,"nodeType":"Block","src":"2204:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11601,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11596,"src":"2218:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2231:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":11603,"name":"uint240","nodeType":"ElementaryTypeName","src":"2231:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":11602,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2226:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2226:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":11606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:3:56","memberName":"max","nodeType":"MemberAccess","src":"2226:17:56","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2218:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11614,"nodeType":"IfStatement","src":"2214:105:56","trueBody":{"id":11613,"nodeType":"Block","src":"2245:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":11609,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2297:3:56","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":11610,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11596,"src":"2302:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11608,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"2266:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2266:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11612,"nodeType":"RevertStatement","src":"2259:49:56"}]}},{"expression":{"arguments":[{"id":11617,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11596,"src":"2343:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2335:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":11615,"name":"uint240","nodeType":"ElementaryTypeName","src":"2335:7:56","typeDescriptions":{}}},"id":11618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2335:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":11600,"id":11619,"nodeType":"Return","src":"2328:21:56"}]},"documentation":{"id":11594,"nodeType":"StructuredDocumentation","src":"1853:280:56","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":11621,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2147:9:56","nodeType":"FunctionDefinition","parameters":{"id":11597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11596,"mutability":"mutable","name":"value","nameLocation":"2165:5:56","nodeType":"VariableDeclaration","scope":11621,"src":"2157:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11595,"name":"uint256","nodeType":"ElementaryTypeName","src":"2157:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2156:15:56"},"returnParameters":{"id":11600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11621,"src":"2195:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":11598,"name":"uint240","nodeType":"ElementaryTypeName","src":"2195:7:56","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2194:9:56"},"scope":13303,"src":"2138:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11648,"nodeType":"Block","src":"2713:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11629,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11624,"src":"2727:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":11631,"name":"uint232","nodeType":"ElementaryTypeName","src":"2740:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":11630,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2735:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":11634,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2749:3:56","memberName":"max","nodeType":"MemberAccess","src":"2735:17:56","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2727:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11642,"nodeType":"IfStatement","src":"2723:105:56","trueBody":{"id":11641,"nodeType":"Block","src":"2754:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":11637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2806:3:56","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":11638,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11624,"src":"2811:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11636,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"2775:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2775:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11640,"nodeType":"RevertStatement","src":"2768:49:56"}]}},{"expression":{"arguments":[{"id":11645,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11624,"src":"2852:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2844:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":11643,"name":"uint232","nodeType":"ElementaryTypeName","src":"2844:7:56","typeDescriptions":{}}},"id":11646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2844:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":11628,"id":11647,"nodeType":"Return","src":"2837:21:56"}]},"documentation":{"id":11622,"nodeType":"StructuredDocumentation","src":"2362:280:56","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":11649,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2656:9:56","nodeType":"FunctionDefinition","parameters":{"id":11625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11624,"mutability":"mutable","name":"value","nameLocation":"2674:5:56","nodeType":"VariableDeclaration","scope":11649,"src":"2666:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11623,"name":"uint256","nodeType":"ElementaryTypeName","src":"2666:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2665:15:56"},"returnParameters":{"id":11628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11649,"src":"2704:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":11626,"name":"uint232","nodeType":"ElementaryTypeName","src":"2704:7:56","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2703:9:56"},"scope":13303,"src":"2647:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11676,"nodeType":"Block","src":"3222:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11657,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11652,"src":"3236:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3249:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":11659,"name":"uint224","nodeType":"ElementaryTypeName","src":"3249:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":11658,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3244:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11661,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3244:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":11662,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3258:3:56","memberName":"max","nodeType":"MemberAccess","src":"3244:17:56","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3236:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11670,"nodeType":"IfStatement","src":"3232:105:56","trueBody":{"id":11669,"nodeType":"Block","src":"3263:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":11665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3315:3:56","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":11666,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11652,"src":"3320:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11664,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"3284:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3284:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11668,"nodeType":"RevertStatement","src":"3277:49:56"}]}},{"expression":{"arguments":[{"id":11673,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11652,"src":"3361:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3353:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":11671,"name":"uint224","nodeType":"ElementaryTypeName","src":"3353:7:56","typeDescriptions":{}}},"id":11674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3353:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":11656,"id":11675,"nodeType":"Return","src":"3346:21:56"}]},"documentation":{"id":11650,"nodeType":"StructuredDocumentation","src":"2871:280:56","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":11677,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3165:9:56","nodeType":"FunctionDefinition","parameters":{"id":11653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11652,"mutability":"mutable","name":"value","nameLocation":"3183:5:56","nodeType":"VariableDeclaration","scope":11677,"src":"3175:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11651,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3174:15:56"},"returnParameters":{"id":11656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11677,"src":"3213:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":11654,"name":"uint224","nodeType":"ElementaryTypeName","src":"3213:7:56","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3212:9:56"},"scope":13303,"src":"3156:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11704,"nodeType":"Block","src":"3731:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11685,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11680,"src":"3745:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3758:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":11687,"name":"uint216","nodeType":"ElementaryTypeName","src":"3758:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":11686,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3753:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11689,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3753:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":11690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3767:3:56","memberName":"max","nodeType":"MemberAccess","src":"3753:17:56","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3745:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11698,"nodeType":"IfStatement","src":"3741:105:56","trueBody":{"id":11697,"nodeType":"Block","src":"3772:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":11693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3824:3:56","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":11694,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11680,"src":"3829:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11692,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"3793:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3793:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11696,"nodeType":"RevertStatement","src":"3786:49:56"}]}},{"expression":{"arguments":[{"id":11701,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11680,"src":"3870:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3862:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":11699,"name":"uint216","nodeType":"ElementaryTypeName","src":"3862:7:56","typeDescriptions":{}}},"id":11702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3862:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":11684,"id":11703,"nodeType":"Return","src":"3855:21:56"}]},"documentation":{"id":11678,"nodeType":"StructuredDocumentation","src":"3380:280:56","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":11705,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3674:9:56","nodeType":"FunctionDefinition","parameters":{"id":11681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11680,"mutability":"mutable","name":"value","nameLocation":"3692:5:56","nodeType":"VariableDeclaration","scope":11705,"src":"3684:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11679,"name":"uint256","nodeType":"ElementaryTypeName","src":"3684:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3683:15:56"},"returnParameters":{"id":11684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11705,"src":"3722:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":11682,"name":"uint216","nodeType":"ElementaryTypeName","src":"3722:7:56","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3721:9:56"},"scope":13303,"src":"3665:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11732,"nodeType":"Block","src":"4240:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11713,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11708,"src":"4254:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4267:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":11715,"name":"uint208","nodeType":"ElementaryTypeName","src":"4267:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":11714,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4262:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4262:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":11718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4276:3:56","memberName":"max","nodeType":"MemberAccess","src":"4262:17:56","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4254:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11726,"nodeType":"IfStatement","src":"4250:105:56","trueBody":{"id":11725,"nodeType":"Block","src":"4281:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":11721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4333:3:56","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":11722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11708,"src":"4338:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11720,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"4302:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4302:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11724,"nodeType":"RevertStatement","src":"4295:49:56"}]}},{"expression":{"arguments":[{"id":11729,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11708,"src":"4379:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4371:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":11727,"name":"uint208","nodeType":"ElementaryTypeName","src":"4371:7:56","typeDescriptions":{}}},"id":11730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4371:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":11712,"id":11731,"nodeType":"Return","src":"4364:21:56"}]},"documentation":{"id":11706,"nodeType":"StructuredDocumentation","src":"3889:280:56","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":11733,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4183:9:56","nodeType":"FunctionDefinition","parameters":{"id":11709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11708,"mutability":"mutable","name":"value","nameLocation":"4201:5:56","nodeType":"VariableDeclaration","scope":11733,"src":"4193:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4193:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4192:15:56"},"returnParameters":{"id":11712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11733,"src":"4231:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":11710,"name":"uint208","nodeType":"ElementaryTypeName","src":"4231:7:56","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4230:9:56"},"scope":13303,"src":"4174:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11760,"nodeType":"Block","src":"4749:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11741,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11736,"src":"4763:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4776:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":11743,"name":"uint200","nodeType":"ElementaryTypeName","src":"4776:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":11742,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4771:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":11746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4785:3:56","memberName":"max","nodeType":"MemberAccess","src":"4771:17:56","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4763:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11754,"nodeType":"IfStatement","src":"4759:105:56","trueBody":{"id":11753,"nodeType":"Block","src":"4790:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":11749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4842:3:56","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":11750,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11736,"src":"4847:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11748,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"4811:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4811:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11752,"nodeType":"RevertStatement","src":"4804:49:56"}]}},{"expression":{"arguments":[{"id":11757,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11736,"src":"4888:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4880:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":11755,"name":"uint200","nodeType":"ElementaryTypeName","src":"4880:7:56","typeDescriptions":{}}},"id":11758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4880:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":11740,"id":11759,"nodeType":"Return","src":"4873:21:56"}]},"documentation":{"id":11734,"nodeType":"StructuredDocumentation","src":"4398:280:56","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":11761,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4692:9:56","nodeType":"FunctionDefinition","parameters":{"id":11737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11736,"mutability":"mutable","name":"value","nameLocation":"4710:5:56","nodeType":"VariableDeclaration","scope":11761,"src":"4702:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11735,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4701:15:56"},"returnParameters":{"id":11740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11739,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11761,"src":"4740:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":11738,"name":"uint200","nodeType":"ElementaryTypeName","src":"4740:7:56","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4739:9:56"},"scope":13303,"src":"4683:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11788,"nodeType":"Block","src":"5258:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11769,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"5272:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5285:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":11771,"name":"uint192","nodeType":"ElementaryTypeName","src":"5285:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":11770,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5280:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5280:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":11774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5294:3:56","memberName":"max","nodeType":"MemberAccess","src":"5280:17:56","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5272:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11782,"nodeType":"IfStatement","src":"5268:105:56","trueBody":{"id":11781,"nodeType":"Block","src":"5299:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":11777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5351:3:56","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":11778,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"5356:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11776,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"5320:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5320:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11780,"nodeType":"RevertStatement","src":"5313:49:56"}]}},{"expression":{"arguments":[{"id":11785,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11764,"src":"5397:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5389:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":11783,"name":"uint192","nodeType":"ElementaryTypeName","src":"5389:7:56","typeDescriptions":{}}},"id":11786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5389:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":11768,"id":11787,"nodeType":"Return","src":"5382:21:56"}]},"documentation":{"id":11762,"nodeType":"StructuredDocumentation","src":"4907:280:56","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":11789,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5201:9:56","nodeType":"FunctionDefinition","parameters":{"id":11765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11764,"mutability":"mutable","name":"value","nameLocation":"5219:5:56","nodeType":"VariableDeclaration","scope":11789,"src":"5211:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11763,"name":"uint256","nodeType":"ElementaryTypeName","src":"5211:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5210:15:56"},"returnParameters":{"id":11768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11789,"src":"5249:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":11766,"name":"uint192","nodeType":"ElementaryTypeName","src":"5249:7:56","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5248:9:56"},"scope":13303,"src":"5192:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11816,"nodeType":"Block","src":"5767:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11797,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11792,"src":"5781:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5794:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":11799,"name":"uint184","nodeType":"ElementaryTypeName","src":"5794:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":11798,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5789:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":11802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5803:3:56","memberName":"max","nodeType":"MemberAccess","src":"5789:17:56","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5781:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11810,"nodeType":"IfStatement","src":"5777:105:56","trueBody":{"id":11809,"nodeType":"Block","src":"5808:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":11805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5860:3:56","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":11806,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11792,"src":"5865:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11804,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"5829:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5829:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11808,"nodeType":"RevertStatement","src":"5822:49:56"}]}},{"expression":{"arguments":[{"id":11813,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11792,"src":"5906:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5898:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":11811,"name":"uint184","nodeType":"ElementaryTypeName","src":"5898:7:56","typeDescriptions":{}}},"id":11814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5898:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":11796,"id":11815,"nodeType":"Return","src":"5891:21:56"}]},"documentation":{"id":11790,"nodeType":"StructuredDocumentation","src":"5416:280:56","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":11817,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5710:9:56","nodeType":"FunctionDefinition","parameters":{"id":11793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11792,"mutability":"mutable","name":"value","nameLocation":"5728:5:56","nodeType":"VariableDeclaration","scope":11817,"src":"5720:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11791,"name":"uint256","nodeType":"ElementaryTypeName","src":"5720:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5719:15:56"},"returnParameters":{"id":11796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11795,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11817,"src":"5758:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":11794,"name":"uint184","nodeType":"ElementaryTypeName","src":"5758:7:56","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5757:9:56"},"scope":13303,"src":"5701:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11844,"nodeType":"Block","src":"6276:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11825,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"6290:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6303:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":11827,"name":"uint176","nodeType":"ElementaryTypeName","src":"6303:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":11826,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6298:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6298:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":11830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6312:3:56","memberName":"max","nodeType":"MemberAccess","src":"6298:17:56","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6290:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11838,"nodeType":"IfStatement","src":"6286:105:56","trueBody":{"id":11837,"nodeType":"Block","src":"6317:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":11833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6369:3:56","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":11834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"6374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11832,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"6338:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6338:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11836,"nodeType":"RevertStatement","src":"6331:49:56"}]}},{"expression":{"arguments":[{"id":11841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11820,"src":"6415:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6407:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":11839,"name":"uint176","nodeType":"ElementaryTypeName","src":"6407:7:56","typeDescriptions":{}}},"id":11842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6407:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":11824,"id":11843,"nodeType":"Return","src":"6400:21:56"}]},"documentation":{"id":11818,"nodeType":"StructuredDocumentation","src":"5925:280:56","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":11845,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6219:9:56","nodeType":"FunctionDefinition","parameters":{"id":11821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11820,"mutability":"mutable","name":"value","nameLocation":"6237:5:56","nodeType":"VariableDeclaration","scope":11845,"src":"6229:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11819,"name":"uint256","nodeType":"ElementaryTypeName","src":"6229:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6228:15:56"},"returnParameters":{"id":11824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11823,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11845,"src":"6267:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":11822,"name":"uint176","nodeType":"ElementaryTypeName","src":"6267:7:56","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6266:9:56"},"scope":13303,"src":"6210:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11872,"nodeType":"Block","src":"6785:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11848,"src":"6799:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6812:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":11855,"name":"uint168","nodeType":"ElementaryTypeName","src":"6812:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":11854,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6807:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6807:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":11858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6821:3:56","memberName":"max","nodeType":"MemberAccess","src":"6807:17:56","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6799:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11866,"nodeType":"IfStatement","src":"6795:105:56","trueBody":{"id":11865,"nodeType":"Block","src":"6826:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":11861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6878:3:56","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":11862,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11848,"src":"6883:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11860,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"6847:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6847:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11864,"nodeType":"RevertStatement","src":"6840:49:56"}]}},{"expression":{"arguments":[{"id":11869,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11848,"src":"6924:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6916:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":11867,"name":"uint168","nodeType":"ElementaryTypeName","src":"6916:7:56","typeDescriptions":{}}},"id":11870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6916:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":11852,"id":11871,"nodeType":"Return","src":"6909:21:56"}]},"documentation":{"id":11846,"nodeType":"StructuredDocumentation","src":"6434:280:56","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":11873,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6728:9:56","nodeType":"FunctionDefinition","parameters":{"id":11849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11848,"mutability":"mutable","name":"value","nameLocation":"6746:5:56","nodeType":"VariableDeclaration","scope":11873,"src":"6738:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11847,"name":"uint256","nodeType":"ElementaryTypeName","src":"6738:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6737:15:56"},"returnParameters":{"id":11852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11873,"src":"6776:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":11850,"name":"uint168","nodeType":"ElementaryTypeName","src":"6776:7:56","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6775:9:56"},"scope":13303,"src":"6719:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11900,"nodeType":"Block","src":"7294:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11881,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"7308:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7321:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":11883,"name":"uint160","nodeType":"ElementaryTypeName","src":"7321:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":11882,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7316:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7316:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":11886,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7330:3:56","memberName":"max","nodeType":"MemberAccess","src":"7316:17:56","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7308:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11894,"nodeType":"IfStatement","src":"7304:105:56","trueBody":{"id":11893,"nodeType":"Block","src":"7335:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":11889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7387:3:56","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":11890,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"7392:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11888,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"7356:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7356:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11892,"nodeType":"RevertStatement","src":"7349:49:56"}]}},{"expression":{"arguments":[{"id":11897,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11876,"src":"7433:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7425:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":11895,"name":"uint160","nodeType":"ElementaryTypeName","src":"7425:7:56","typeDescriptions":{}}},"id":11898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7425:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":11880,"id":11899,"nodeType":"Return","src":"7418:21:56"}]},"documentation":{"id":11874,"nodeType":"StructuredDocumentation","src":"6943:280:56","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":11901,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7237:9:56","nodeType":"FunctionDefinition","parameters":{"id":11877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11876,"mutability":"mutable","name":"value","nameLocation":"7255:5:56","nodeType":"VariableDeclaration","scope":11901,"src":"7247:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11875,"name":"uint256","nodeType":"ElementaryTypeName","src":"7247:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7246:15:56"},"returnParameters":{"id":11880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11901,"src":"7285:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":11878,"name":"uint160","nodeType":"ElementaryTypeName","src":"7285:7:56","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7284:9:56"},"scope":13303,"src":"7228:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11928,"nodeType":"Block","src":"7803:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11909,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11904,"src":"7817:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7830:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":11911,"name":"uint152","nodeType":"ElementaryTypeName","src":"7830:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":11910,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7825:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7825:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":11914,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7839:3:56","memberName":"max","nodeType":"MemberAccess","src":"7825:17:56","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7817:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11922,"nodeType":"IfStatement","src":"7813:105:56","trueBody":{"id":11921,"nodeType":"Block","src":"7844:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":11917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7896:3:56","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":11918,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11904,"src":"7901:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11916,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"7865:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7865:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11920,"nodeType":"RevertStatement","src":"7858:49:56"}]}},{"expression":{"arguments":[{"id":11925,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11904,"src":"7942:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11924,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7934:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":11923,"name":"uint152","nodeType":"ElementaryTypeName","src":"7934:7:56","typeDescriptions":{}}},"id":11926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7934:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":11908,"id":11927,"nodeType":"Return","src":"7927:21:56"}]},"documentation":{"id":11902,"nodeType":"StructuredDocumentation","src":"7452:280:56","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":11929,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7746:9:56","nodeType":"FunctionDefinition","parameters":{"id":11905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11904,"mutability":"mutable","name":"value","nameLocation":"7764:5:56","nodeType":"VariableDeclaration","scope":11929,"src":"7756:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11903,"name":"uint256","nodeType":"ElementaryTypeName","src":"7756:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7755:15:56"},"returnParameters":{"id":11908,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11907,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11929,"src":"7794:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":11906,"name":"uint152","nodeType":"ElementaryTypeName","src":"7794:7:56","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7793:9:56"},"scope":13303,"src":"7737:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11956,"nodeType":"Block","src":"8312:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11932,"src":"8326:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8339:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":11939,"name":"uint144","nodeType":"ElementaryTypeName","src":"8339:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":11938,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8334:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8334:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":11942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8348:3:56","memberName":"max","nodeType":"MemberAccess","src":"8334:17:56","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8326:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11950,"nodeType":"IfStatement","src":"8322:105:56","trueBody":{"id":11949,"nodeType":"Block","src":"8353:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":11945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8405:3:56","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":11946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11932,"src":"8410:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11944,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"8374:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8374:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11948,"nodeType":"RevertStatement","src":"8367:49:56"}]}},{"expression":{"arguments":[{"id":11953,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11932,"src":"8451:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8443:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":11951,"name":"uint144","nodeType":"ElementaryTypeName","src":"8443:7:56","typeDescriptions":{}}},"id":11954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":11936,"id":11955,"nodeType":"Return","src":"8436:21:56"}]},"documentation":{"id":11930,"nodeType":"StructuredDocumentation","src":"7961:280:56","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":11957,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8255:9:56","nodeType":"FunctionDefinition","parameters":{"id":11933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11932,"mutability":"mutable","name":"value","nameLocation":"8273:5:56","nodeType":"VariableDeclaration","scope":11957,"src":"8265:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11931,"name":"uint256","nodeType":"ElementaryTypeName","src":"8265:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8264:15:56"},"returnParameters":{"id":11936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11957,"src":"8303:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":11934,"name":"uint144","nodeType":"ElementaryTypeName","src":"8303:7:56","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8302:9:56"},"scope":13303,"src":"8246:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11984,"nodeType":"Block","src":"8821:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11965,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11960,"src":"8835:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8848:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":11967,"name":"uint136","nodeType":"ElementaryTypeName","src":"8848:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":11966,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8843:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8843:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":11970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8857:3:56","memberName":"max","nodeType":"MemberAccess","src":"8843:17:56","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8835:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11978,"nodeType":"IfStatement","src":"8831:105:56","trueBody":{"id":11977,"nodeType":"Block","src":"8862:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":11973,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8914:3:56","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":11974,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11960,"src":"8919:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11972,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"8883:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":11975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8883:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11976,"nodeType":"RevertStatement","src":"8876:49:56"}]}},{"expression":{"arguments":[{"id":11981,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11960,"src":"8960:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11980,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8952:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":11979,"name":"uint136","nodeType":"ElementaryTypeName","src":"8952:7:56","typeDescriptions":{}}},"id":11982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8952:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":11964,"id":11983,"nodeType":"Return","src":"8945:21:56"}]},"documentation":{"id":11958,"nodeType":"StructuredDocumentation","src":"8470:280:56","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":11985,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8764:9:56","nodeType":"FunctionDefinition","parameters":{"id":11961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11960,"mutability":"mutable","name":"value","nameLocation":"8782:5:56","nodeType":"VariableDeclaration","scope":11985,"src":"8774:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11959,"name":"uint256","nodeType":"ElementaryTypeName","src":"8774:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8773:15:56"},"returnParameters":{"id":11964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11985,"src":"8812:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":11962,"name":"uint136","nodeType":"ElementaryTypeName","src":"8812:7:56","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8811:9:56"},"scope":13303,"src":"8755:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12012,"nodeType":"Block","src":"9330:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11993,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"9344:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":11996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9357:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":11995,"name":"uint128","nodeType":"ElementaryTypeName","src":"9357:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":11994,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9352:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":11997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9352:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":11998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9366:3:56","memberName":"max","nodeType":"MemberAccess","src":"9352:17:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9344:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12006,"nodeType":"IfStatement","src":"9340:105:56","trueBody":{"id":12005,"nodeType":"Block","src":"9371:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":12001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9423:3:56","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":12002,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"9428:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12000,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"9392:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9392:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12004,"nodeType":"RevertStatement","src":"9385:49:56"}]}},{"expression":{"arguments":[{"id":12009,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11988,"src":"9469:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9461:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":12007,"name":"uint128","nodeType":"ElementaryTypeName","src":"9461:7:56","typeDescriptions":{}}},"id":12010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9461:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":11992,"id":12011,"nodeType":"Return","src":"9454:21:56"}]},"documentation":{"id":11986,"nodeType":"StructuredDocumentation","src":"8979:280:56","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":12013,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9273:9:56","nodeType":"FunctionDefinition","parameters":{"id":11989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11988,"mutability":"mutable","name":"value","nameLocation":"9291:5:56","nodeType":"VariableDeclaration","scope":12013,"src":"9283:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11987,"name":"uint256","nodeType":"ElementaryTypeName","src":"9283:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9282:15:56"},"returnParameters":{"id":11992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12013,"src":"9321:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":11990,"name":"uint128","nodeType":"ElementaryTypeName","src":"9321:7:56","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9320:9:56"},"scope":13303,"src":"9264:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12040,"nodeType":"Block","src":"9839:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12021,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"9853:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9866:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":12023,"name":"uint120","nodeType":"ElementaryTypeName","src":"9866:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":12022,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9861:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9861:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":12026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9875:3:56","memberName":"max","nodeType":"MemberAccess","src":"9861:17:56","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9853:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12034,"nodeType":"IfStatement","src":"9849:105:56","trueBody":{"id":12033,"nodeType":"Block","src":"9880:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":12029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9932:3:56","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":12030,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"9937:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12028,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"9901:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9901:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12032,"nodeType":"RevertStatement","src":"9894:49:56"}]}},{"expression":{"arguments":[{"id":12037,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12016,"src":"9978:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9970:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":12035,"name":"uint120","nodeType":"ElementaryTypeName","src":"9970:7:56","typeDescriptions":{}}},"id":12038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9970:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":12020,"id":12039,"nodeType":"Return","src":"9963:21:56"}]},"documentation":{"id":12014,"nodeType":"StructuredDocumentation","src":"9488:280:56","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":12041,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9782:9:56","nodeType":"FunctionDefinition","parameters":{"id":12017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12016,"mutability":"mutable","name":"value","nameLocation":"9800:5:56","nodeType":"VariableDeclaration","scope":12041,"src":"9792:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12015,"name":"uint256","nodeType":"ElementaryTypeName","src":"9792:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9791:15:56"},"returnParameters":{"id":12020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12019,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12041,"src":"9830:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":12018,"name":"uint120","nodeType":"ElementaryTypeName","src":"9830:7:56","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9829:9:56"},"scope":13303,"src":"9773:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12068,"nodeType":"Block","src":"10348:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12049,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12044,"src":"10362:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10375:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":12051,"name":"uint112","nodeType":"ElementaryTypeName","src":"10375:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":12050,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10370:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10370:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":12054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10384:3:56","memberName":"max","nodeType":"MemberAccess","src":"10370:17:56","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10362:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12062,"nodeType":"IfStatement","src":"10358:105:56","trueBody":{"id":12061,"nodeType":"Block","src":"10389:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":12057,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10441:3:56","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":12058,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12044,"src":"10446:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12056,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"10410:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10410:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12060,"nodeType":"RevertStatement","src":"10403:49:56"}]}},{"expression":{"arguments":[{"id":12065,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12044,"src":"10487:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10479:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":12063,"name":"uint112","nodeType":"ElementaryTypeName","src":"10479:7:56","typeDescriptions":{}}},"id":12066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10479:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":12048,"id":12067,"nodeType":"Return","src":"10472:21:56"}]},"documentation":{"id":12042,"nodeType":"StructuredDocumentation","src":"9997:280:56","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":12069,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10291:9:56","nodeType":"FunctionDefinition","parameters":{"id":12045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12044,"mutability":"mutable","name":"value","nameLocation":"10309:5:56","nodeType":"VariableDeclaration","scope":12069,"src":"10301:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12043,"name":"uint256","nodeType":"ElementaryTypeName","src":"10301:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10300:15:56"},"returnParameters":{"id":12048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12047,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12069,"src":"10339:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":12046,"name":"uint112","nodeType":"ElementaryTypeName","src":"10339:7:56","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10338:9:56"},"scope":13303,"src":"10282:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12096,"nodeType":"Block","src":"10857:152:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12077,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12072,"src":"10871:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10884:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":12079,"name":"uint104","nodeType":"ElementaryTypeName","src":"10884:7:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":12078,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10879:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10879:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":12082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10893:3:56","memberName":"max","nodeType":"MemberAccess","src":"10879:17:56","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10871:25:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12090,"nodeType":"IfStatement","src":"10867:105:56","trueBody":{"id":12089,"nodeType":"Block","src":"10898:74:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":12085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10950:3:56","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":12086,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12072,"src":"10955:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12084,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"10919:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10919:42:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12088,"nodeType":"RevertStatement","src":"10912:49:56"}]}},{"expression":{"arguments":[{"id":12093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12072,"src":"10996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10988:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":12091,"name":"uint104","nodeType":"ElementaryTypeName","src":"10988:7:56","typeDescriptions":{}}},"id":12094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10988:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":12076,"id":12095,"nodeType":"Return","src":"10981:21:56"}]},"documentation":{"id":12070,"nodeType":"StructuredDocumentation","src":"10506:280:56","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":12097,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10800:9:56","nodeType":"FunctionDefinition","parameters":{"id":12073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12072,"mutability":"mutable","name":"value","nameLocation":"10818:5:56","nodeType":"VariableDeclaration","scope":12097,"src":"10810:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12071,"name":"uint256","nodeType":"ElementaryTypeName","src":"10810:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10809:15:56"},"returnParameters":{"id":12076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12097,"src":"10848:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":12074,"name":"uint104","nodeType":"ElementaryTypeName","src":"10848:7:56","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10847:9:56"},"scope":13303,"src":"10791:218:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12124,"nodeType":"Block","src":"11360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12105,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12100,"src":"11374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":12107,"name":"uint96","nodeType":"ElementaryTypeName","src":"11387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":12106,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":12110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11395:3:56","memberName":"max","nodeType":"MemberAccess","src":"11382:16:56","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12118,"nodeType":"IfStatement","src":"11370:103:56","trueBody":{"id":12117,"nodeType":"Block","src":"11400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":12113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":12114,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12100,"src":"11456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12112,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"11421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12116,"nodeType":"RevertStatement","src":"11414:48:56"}]}},{"expression":{"arguments":[{"id":12121,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12100,"src":"11496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":12119,"name":"uint96","nodeType":"ElementaryTypeName","src":"11489:6:56","typeDescriptions":{}}},"id":12122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":12104,"id":12123,"nodeType":"Return","src":"11482:20:56"}]},"documentation":{"id":12098,"nodeType":"StructuredDocumentation","src":"11015:276:56","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":12125,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12100,"mutability":"mutable","name":"value","nameLocation":"11322:5:56","nodeType":"VariableDeclaration","scope":12125,"src":"11314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12099,"name":"uint256","nodeType":"ElementaryTypeName","src":"11314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11313:15:56"},"returnParameters":{"id":12104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12103,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12125,"src":"11352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":12102,"name":"uint96","nodeType":"ElementaryTypeName","src":"11352:6:56","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11351:8:56"},"scope":13303,"src":"11296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12152,"nodeType":"Block","src":"11860:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12128,"src":"11874:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11887:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":12135,"name":"uint88","nodeType":"ElementaryTypeName","src":"11887:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":12134,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11882:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11882:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":12138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11895:3:56","memberName":"max","nodeType":"MemberAccess","src":"11882:16:56","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11874:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12146,"nodeType":"IfStatement","src":"11870:103:56","trueBody":{"id":12145,"nodeType":"Block","src":"11900:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":12141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11952:2:56","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":12142,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12128,"src":"11956:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12140,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"11921:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11921:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12144,"nodeType":"RevertStatement","src":"11914:48:56"}]}},{"expression":{"arguments":[{"id":12149,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12128,"src":"11996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":12147,"name":"uint88","nodeType":"ElementaryTypeName","src":"11989:6:56","typeDescriptions":{}}},"id":12150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":12132,"id":12151,"nodeType":"Return","src":"11982:20:56"}]},"documentation":{"id":12126,"nodeType":"StructuredDocumentation","src":"11515:276:56","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":12153,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11805:8:56","nodeType":"FunctionDefinition","parameters":{"id":12129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12128,"mutability":"mutable","name":"value","nameLocation":"11822:5:56","nodeType":"VariableDeclaration","scope":12153,"src":"11814:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12127,"name":"uint256","nodeType":"ElementaryTypeName","src":"11814:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11813:15:56"},"returnParameters":{"id":12132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12131,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12153,"src":"11852:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":12130,"name":"uint88","nodeType":"ElementaryTypeName","src":"11852:6:56","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11851:8:56"},"scope":13303,"src":"11796:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12180,"nodeType":"Block","src":"12360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12161,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12156,"src":"12374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":12163,"name":"uint80","nodeType":"ElementaryTypeName","src":"12387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":12162,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":12166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12395:3:56","memberName":"max","nodeType":"MemberAccess","src":"12382:16:56","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12174,"nodeType":"IfStatement","src":"12370:103:56","trueBody":{"id":12173,"nodeType":"Block","src":"12400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":12169,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":12170,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12156,"src":"12456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12168,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"12421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12172,"nodeType":"RevertStatement","src":"12414:48:56"}]}},{"expression":{"arguments":[{"id":12177,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12156,"src":"12496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":12175,"name":"uint80","nodeType":"ElementaryTypeName","src":"12489:6:56","typeDescriptions":{}}},"id":12178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":12160,"id":12179,"nodeType":"Return","src":"12482:20:56"}]},"documentation":{"id":12154,"nodeType":"StructuredDocumentation","src":"12015:276:56","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":12181,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12156,"mutability":"mutable","name":"value","nameLocation":"12322:5:56","nodeType":"VariableDeclaration","scope":12181,"src":"12314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12155,"name":"uint256","nodeType":"ElementaryTypeName","src":"12314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12313:15:56"},"returnParameters":{"id":12160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12159,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12181,"src":"12352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":12158,"name":"uint80","nodeType":"ElementaryTypeName","src":"12352:6:56","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12351:8:56"},"scope":13303,"src":"12296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12208,"nodeType":"Block","src":"12860:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12189,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12184,"src":"12874:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12192,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12887:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":12191,"name":"uint72","nodeType":"ElementaryTypeName","src":"12887:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":12190,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12882:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12882:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":12194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12895:3:56","memberName":"max","nodeType":"MemberAccess","src":"12882:16:56","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12874:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12202,"nodeType":"IfStatement","src":"12870:103:56","trueBody":{"id":12201,"nodeType":"Block","src":"12900:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":12197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12952:2:56","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":12198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12184,"src":"12956:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12196,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"12921:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12921:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12200,"nodeType":"RevertStatement","src":"12914:48:56"}]}},{"expression":{"arguments":[{"id":12205,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12184,"src":"12996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":12203,"name":"uint72","nodeType":"ElementaryTypeName","src":"12989:6:56","typeDescriptions":{}}},"id":12206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":12188,"id":12207,"nodeType":"Return","src":"12982:20:56"}]},"documentation":{"id":12182,"nodeType":"StructuredDocumentation","src":"12515:276:56","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":12209,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12805:8:56","nodeType":"FunctionDefinition","parameters":{"id":12185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12184,"mutability":"mutable","name":"value","nameLocation":"12822:5:56","nodeType":"VariableDeclaration","scope":12209,"src":"12814:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12183,"name":"uint256","nodeType":"ElementaryTypeName","src":"12814:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12813:15:56"},"returnParameters":{"id":12188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12187,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12209,"src":"12852:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":12186,"name":"uint72","nodeType":"ElementaryTypeName","src":"12852:6:56","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12851:8:56"},"scope":13303,"src":"12796:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12236,"nodeType":"Block","src":"13360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12217,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12212,"src":"13374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":12219,"name":"uint64","nodeType":"ElementaryTypeName","src":"13387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":12218,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":12222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13395:3:56","memberName":"max","nodeType":"MemberAccess","src":"13382:16:56","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12230,"nodeType":"IfStatement","src":"13370:103:56","trueBody":{"id":12229,"nodeType":"Block","src":"13400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":12225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":12226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12212,"src":"13456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12224,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"13421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12228,"nodeType":"RevertStatement","src":"13414:48:56"}]}},{"expression":{"arguments":[{"id":12233,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12212,"src":"13496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":12231,"name":"uint64","nodeType":"ElementaryTypeName","src":"13489:6:56","typeDescriptions":{}}},"id":12234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":12216,"id":12235,"nodeType":"Return","src":"13482:20:56"}]},"documentation":{"id":12210,"nodeType":"StructuredDocumentation","src":"13015:276:56","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":12237,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12212,"mutability":"mutable","name":"value","nameLocation":"13322:5:56","nodeType":"VariableDeclaration","scope":12237,"src":"13314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12211,"name":"uint256","nodeType":"ElementaryTypeName","src":"13314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13313:15:56"},"returnParameters":{"id":12216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12237,"src":"13352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":12214,"name":"uint64","nodeType":"ElementaryTypeName","src":"13352:6:56","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13351:8:56"},"scope":13303,"src":"13296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12264,"nodeType":"Block","src":"13860:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12245,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12240,"src":"13874:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13887:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":12247,"name":"uint56","nodeType":"ElementaryTypeName","src":"13887:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":12246,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13882:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13882:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":12250,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13895:3:56","memberName":"max","nodeType":"MemberAccess","src":"13882:16:56","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13874:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12258,"nodeType":"IfStatement","src":"13870:103:56","trueBody":{"id":12257,"nodeType":"Block","src":"13900:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":12253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13952:2:56","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":12254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12240,"src":"13956:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12252,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"13921:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13921:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12256,"nodeType":"RevertStatement","src":"13914:48:56"}]}},{"expression":{"arguments":[{"id":12261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12240,"src":"13996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":12259,"name":"uint56","nodeType":"ElementaryTypeName","src":"13989:6:56","typeDescriptions":{}}},"id":12262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":12244,"id":12263,"nodeType":"Return","src":"13982:20:56"}]},"documentation":{"id":12238,"nodeType":"StructuredDocumentation","src":"13515:276:56","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":12265,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13805:8:56","nodeType":"FunctionDefinition","parameters":{"id":12241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12240,"mutability":"mutable","name":"value","nameLocation":"13822:5:56","nodeType":"VariableDeclaration","scope":12265,"src":"13814:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12239,"name":"uint256","nodeType":"ElementaryTypeName","src":"13814:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13813:15:56"},"returnParameters":{"id":12244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12243,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12265,"src":"13852:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":12242,"name":"uint56","nodeType":"ElementaryTypeName","src":"13852:6:56","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13851:8:56"},"scope":13303,"src":"13796:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12292,"nodeType":"Block","src":"14360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12273,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12268,"src":"14374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12276,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":12275,"name":"uint48","nodeType":"ElementaryTypeName","src":"14387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":12274,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":12278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14395:3:56","memberName":"max","nodeType":"MemberAccess","src":"14382:16:56","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12286,"nodeType":"IfStatement","src":"14370:103:56","trueBody":{"id":12285,"nodeType":"Block","src":"14400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":12281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":12282,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12268,"src":"14456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12280,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"14421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12284,"nodeType":"RevertStatement","src":"14414:48:56"}]}},{"expression":{"arguments":[{"id":12289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12268,"src":"14496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":12287,"name":"uint48","nodeType":"ElementaryTypeName","src":"14489:6:56","typeDescriptions":{}}},"id":12290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":12272,"id":12291,"nodeType":"Return","src":"14482:20:56"}]},"documentation":{"id":12266,"nodeType":"StructuredDocumentation","src":"14015:276:56","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":12293,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12268,"mutability":"mutable","name":"value","nameLocation":"14322:5:56","nodeType":"VariableDeclaration","scope":12293,"src":"14314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12267,"name":"uint256","nodeType":"ElementaryTypeName","src":"14314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14313:15:56"},"returnParameters":{"id":12272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12293,"src":"14352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":12270,"name":"uint48","nodeType":"ElementaryTypeName","src":"14352:6:56","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14351:8:56"},"scope":13303,"src":"14296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12320,"nodeType":"Block","src":"14860:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12301,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"14874:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14887:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":12303,"name":"uint40","nodeType":"ElementaryTypeName","src":"14887:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":12302,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14882:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14882:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":12306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14895:3:56","memberName":"max","nodeType":"MemberAccess","src":"14882:16:56","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14874:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12314,"nodeType":"IfStatement","src":"14870:103:56","trueBody":{"id":12313,"nodeType":"Block","src":"14900:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":12309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14952:2:56","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":12310,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"14956:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12308,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"14921:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14921:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12312,"nodeType":"RevertStatement","src":"14914:48:56"}]}},{"expression":{"arguments":[{"id":12317,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12296,"src":"14996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12316,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":12315,"name":"uint40","nodeType":"ElementaryTypeName","src":"14989:6:56","typeDescriptions":{}}},"id":12318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":12300,"id":12319,"nodeType":"Return","src":"14982:20:56"}]},"documentation":{"id":12294,"nodeType":"StructuredDocumentation","src":"14515:276:56","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":12321,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14805:8:56","nodeType":"FunctionDefinition","parameters":{"id":12297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12296,"mutability":"mutable","name":"value","nameLocation":"14822:5:56","nodeType":"VariableDeclaration","scope":12321,"src":"14814:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12295,"name":"uint256","nodeType":"ElementaryTypeName","src":"14814:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14813:15:56"},"returnParameters":{"id":12300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12321,"src":"14852:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":12298,"name":"uint40","nodeType":"ElementaryTypeName","src":"14852:6:56","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14851:8:56"},"scope":13303,"src":"14796:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12348,"nodeType":"Block","src":"15360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12329,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"15374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":12331,"name":"uint32","nodeType":"ElementaryTypeName","src":"15387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":12330,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":12334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15395:3:56","memberName":"max","nodeType":"MemberAccess","src":"15382:16:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12342,"nodeType":"IfStatement","src":"15370:103:56","trueBody":{"id":12341,"nodeType":"Block","src":"15400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":12337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":12338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"15456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12336,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"15421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12340,"nodeType":"RevertStatement","src":"15414:48:56"}]}},{"expression":{"arguments":[{"id":12345,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12324,"src":"15496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12344,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":12343,"name":"uint32","nodeType":"ElementaryTypeName","src":"15489:6:56","typeDescriptions":{}}},"id":12346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":12328,"id":12347,"nodeType":"Return","src":"15482:20:56"}]},"documentation":{"id":12322,"nodeType":"StructuredDocumentation","src":"15015:276:56","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":12349,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12324,"mutability":"mutable","name":"value","nameLocation":"15322:5:56","nodeType":"VariableDeclaration","scope":12349,"src":"15314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12323,"name":"uint256","nodeType":"ElementaryTypeName","src":"15314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15313:15:56"},"returnParameters":{"id":12328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12349,"src":"15352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":12326,"name":"uint32","nodeType":"ElementaryTypeName","src":"15352:6:56","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15351:8:56"},"scope":13303,"src":"15296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12376,"nodeType":"Block","src":"15860:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12357,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12352,"src":"15874:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15887:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":12359,"name":"uint24","nodeType":"ElementaryTypeName","src":"15887:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":12358,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15882:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12361,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15882:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":12362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15895:3:56","memberName":"max","nodeType":"MemberAccess","src":"15882:16:56","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15874:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12370,"nodeType":"IfStatement","src":"15870:103:56","trueBody":{"id":12369,"nodeType":"Block","src":"15900:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":12365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15952:2:56","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":12366,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12352,"src":"15956:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12364,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"15921:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15921:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12368,"nodeType":"RevertStatement","src":"15914:48:56"}]}},{"expression":{"arguments":[{"id":12373,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12352,"src":"15996:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12372,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":12371,"name":"uint24","nodeType":"ElementaryTypeName","src":"15989:6:56","typeDescriptions":{}}},"id":12374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":12356,"id":12375,"nodeType":"Return","src":"15982:20:56"}]},"documentation":{"id":12350,"nodeType":"StructuredDocumentation","src":"15515:276:56","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":12377,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15805:8:56","nodeType":"FunctionDefinition","parameters":{"id":12353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12352,"mutability":"mutable","name":"value","nameLocation":"15822:5:56","nodeType":"VariableDeclaration","scope":12377,"src":"15814:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12351,"name":"uint256","nodeType":"ElementaryTypeName","src":"15814:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15813:15:56"},"returnParameters":{"id":12356,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12355,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12377,"src":"15852:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":12354,"name":"uint24","nodeType":"ElementaryTypeName","src":"15852:6:56","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15851:8:56"},"scope":13303,"src":"15796:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12404,"nodeType":"Block","src":"16360:149:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12385,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"16374:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16387:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":12387,"name":"uint16","nodeType":"ElementaryTypeName","src":"16387:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":12386,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16382:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12389,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16382:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":12390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16395:3:56","memberName":"max","nodeType":"MemberAccess","src":"16382:16:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16374:24:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12398,"nodeType":"IfStatement","src":"16370:103:56","trueBody":{"id":12397,"nodeType":"Block","src":"16400:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":12393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16452:2:56","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":12394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"16456:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12392,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"16421:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16421:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12396,"nodeType":"RevertStatement","src":"16414:48:56"}]}},{"expression":{"arguments":[{"id":12401,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12380,"src":"16496:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16489:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":12399,"name":"uint16","nodeType":"ElementaryTypeName","src":"16489:6:56","typeDescriptions":{}}},"id":12402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16489:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":12384,"id":12403,"nodeType":"Return","src":"16482:20:56"}]},"documentation":{"id":12378,"nodeType":"StructuredDocumentation","src":"16015:276:56","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":12405,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16305:8:56","nodeType":"FunctionDefinition","parameters":{"id":12381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12380,"mutability":"mutable","name":"value","nameLocation":"16322:5:56","nodeType":"VariableDeclaration","scope":12405,"src":"16314:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12379,"name":"uint256","nodeType":"ElementaryTypeName","src":"16314:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16313:15:56"},"returnParameters":{"id":12384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12383,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12405,"src":"16352:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":12382,"name":"uint16","nodeType":"ElementaryTypeName","src":"16352:6:56","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16351:8:56"},"scope":13303,"src":"16296:213:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12432,"nodeType":"Block","src":"16854:146:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12413,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"16868:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":12416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16881:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":12415,"name":"uint8","nodeType":"ElementaryTypeName","src":"16881:5:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":12414,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16876:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":12417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16876:11:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":12418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16888:3:56","memberName":"max","nodeType":"MemberAccess","src":"16876:15:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16868:23:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12426,"nodeType":"IfStatement","src":"16864:101:56","trueBody":{"id":12425,"nodeType":"Block","src":"16893:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":12421,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16945:1:56","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":12422,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"16948:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12420,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11548,"src":"16914:30:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":12423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16914:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12424,"nodeType":"RevertStatement","src":"16907:47:56"}]}},{"expression":{"arguments":[{"id":12429,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12408,"src":"16987:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16981:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":12427,"name":"uint8","nodeType":"ElementaryTypeName","src":"16981:5:56","typeDescriptions":{}}},"id":12430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16981:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":12412,"id":12431,"nodeType":"Return","src":"16974:19:56"}]},"documentation":{"id":12406,"nodeType":"StructuredDocumentation","src":"16515:272:56","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":12433,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16801:7:56","nodeType":"FunctionDefinition","parameters":{"id":12409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12408,"mutability":"mutable","name":"value","nameLocation":"16817:5:56","nodeType":"VariableDeclaration","scope":12433,"src":"16809:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12407,"name":"uint256","nodeType":"ElementaryTypeName","src":"16809:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16808:15:56"},"returnParameters":{"id":12412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12433,"src":"16847:5:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":12410,"name":"uint8","nodeType":"ElementaryTypeName","src":"16847:5:56","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16846:7:56"},"scope":13303,"src":"16792:208:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12455,"nodeType":"Block","src":"17236:128:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12436,"src":"17250:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":12442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17258:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17250:9:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12449,"nodeType":"IfStatement","src":"17246:81:56","trueBody":{"id":12448,"nodeType":"Block","src":"17261:66:56","statements":[{"errorCall":{"arguments":[{"id":12445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12436,"src":"17310:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12444,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11553,"src":"17282:27:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":12446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17282:34:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12447,"nodeType":"RevertStatement","src":"17275:41:56"}]}},{"expression":{"arguments":[{"id":12452,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12436,"src":"17351:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17343:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12450,"name":"uint256","nodeType":"ElementaryTypeName","src":"17343:7:56","typeDescriptions":{}}},"id":12453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17343:14:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":12440,"id":12454,"nodeType":"Return","src":"17336:21:56"}]},"documentation":{"id":12434,"nodeType":"StructuredDocumentation","src":"17006:160:56","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":12456,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17180:9:56","nodeType":"FunctionDefinition","parameters":{"id":12437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12436,"mutability":"mutable","name":"value","nameLocation":"17197:5:56","nodeType":"VariableDeclaration","scope":12456,"src":"17190:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12435,"name":"int256","nodeType":"ElementaryTypeName","src":"17190:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17189:14:56"},"returnParameters":{"id":12440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":12456,"src":"17227:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12438,"name":"uint256","nodeType":"ElementaryTypeName","src":"17227:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17226:9:56"},"scope":13303,"src":"17171:193:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12481,"nodeType":"Block","src":"17761:150:56","statements":[{"expression":{"id":12469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12464,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12462,"src":"17771:10:56","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12467,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12459,"src":"17791:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17784:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":12465,"name":"int248","nodeType":"ElementaryTypeName","src":"17784:6:56","typeDescriptions":{}}},"id":12468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17784:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17771:26:56","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":12470,"nodeType":"ExpressionStatement","src":"17771:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12471,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12462,"src":"17811:10:56","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12472,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12459,"src":"17825:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17811:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12480,"nodeType":"IfStatement","src":"17807:98:56","trueBody":{"id":12479,"nodeType":"Block","src":"17832:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":12475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17883:3:56","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":12476,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12459,"src":"17888:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12474,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"17853:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17853:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12478,"nodeType":"RevertStatement","src":"17846:48:56"}]}}]},"documentation":{"id":12457,"nodeType":"StructuredDocumentation","src":"17370:312:56","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":12482,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17696:8:56","nodeType":"FunctionDefinition","parameters":{"id":12460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12459,"mutability":"mutable","name":"value","nameLocation":"17712:5:56","nodeType":"VariableDeclaration","scope":12482,"src":"17705:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12458,"name":"int256","nodeType":"ElementaryTypeName","src":"17705:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17704:14:56"},"returnParameters":{"id":12463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12462,"mutability":"mutable","name":"downcasted","nameLocation":"17749:10:56","nodeType":"VariableDeclaration","scope":12482,"src":"17742:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":12461,"name":"int248","nodeType":"ElementaryTypeName","src":"17742:6:56","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17741:19:56"},"scope":13303,"src":"17687:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12507,"nodeType":"Block","src":"18308:150:56","statements":[{"expression":{"id":12495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12490,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12488,"src":"18318:10:56","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12485,"src":"18338:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18331:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":12491,"name":"int240","nodeType":"ElementaryTypeName","src":"18331:6:56","typeDescriptions":{}}},"id":12494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18331:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18318:26:56","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":12496,"nodeType":"ExpressionStatement","src":"18318:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12497,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12488,"src":"18358:10:56","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12498,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12485,"src":"18372:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18358:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12506,"nodeType":"IfStatement","src":"18354:98:56","trueBody":{"id":12505,"nodeType":"Block","src":"18379:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":12501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18430:3:56","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":12502,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12485,"src":"18435:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12500,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"18400:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18400:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12504,"nodeType":"RevertStatement","src":"18393:48:56"}]}}]},"documentation":{"id":12483,"nodeType":"StructuredDocumentation","src":"17917:312:56","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":12508,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18243:8:56","nodeType":"FunctionDefinition","parameters":{"id":12486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12485,"mutability":"mutable","name":"value","nameLocation":"18259:5:56","nodeType":"VariableDeclaration","scope":12508,"src":"18252:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12484,"name":"int256","nodeType":"ElementaryTypeName","src":"18252:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18251:14:56"},"returnParameters":{"id":12489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12488,"mutability":"mutable","name":"downcasted","nameLocation":"18296:10:56","nodeType":"VariableDeclaration","scope":12508,"src":"18289:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":12487,"name":"int240","nodeType":"ElementaryTypeName","src":"18289:6:56","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18288:19:56"},"scope":13303,"src":"18234:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12533,"nodeType":"Block","src":"18855:150:56","statements":[{"expression":{"id":12521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12516,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12514,"src":"18865:10:56","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12519,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12511,"src":"18885:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18878:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":12517,"name":"int232","nodeType":"ElementaryTypeName","src":"18878:6:56","typeDescriptions":{}}},"id":12520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18878:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18865:26:56","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":12522,"nodeType":"ExpressionStatement","src":"18865:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12523,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12514,"src":"18905:10:56","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12511,"src":"18919:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18905:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12532,"nodeType":"IfStatement","src":"18901:98:56","trueBody":{"id":12531,"nodeType":"Block","src":"18926:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":12527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18977:3:56","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":12528,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12511,"src":"18982:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12526,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"18947:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18947:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12530,"nodeType":"RevertStatement","src":"18940:48:56"}]}}]},"documentation":{"id":12509,"nodeType":"StructuredDocumentation","src":"18464:312:56","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":12534,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18790:8:56","nodeType":"FunctionDefinition","parameters":{"id":12512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12511,"mutability":"mutable","name":"value","nameLocation":"18806:5:56","nodeType":"VariableDeclaration","scope":12534,"src":"18799:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12510,"name":"int256","nodeType":"ElementaryTypeName","src":"18799:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18798:14:56"},"returnParameters":{"id":12515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12514,"mutability":"mutable","name":"downcasted","nameLocation":"18843:10:56","nodeType":"VariableDeclaration","scope":12534,"src":"18836:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":12513,"name":"int232","nodeType":"ElementaryTypeName","src":"18836:6:56","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18835:19:56"},"scope":13303,"src":"18781:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12559,"nodeType":"Block","src":"19402:150:56","statements":[{"expression":{"id":12547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12542,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12540,"src":"19412:10:56","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12537,"src":"19432:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19425:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":12543,"name":"int224","nodeType":"ElementaryTypeName","src":"19425:6:56","typeDescriptions":{}}},"id":12546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19425:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19412:26:56","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":12548,"nodeType":"ExpressionStatement","src":"19412:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12549,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12540,"src":"19452:10:56","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12550,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12537,"src":"19466:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19452:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12558,"nodeType":"IfStatement","src":"19448:98:56","trueBody":{"id":12557,"nodeType":"Block","src":"19473:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":12553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19524:3:56","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":12554,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12537,"src":"19529:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12552,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"19494:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19494:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12556,"nodeType":"RevertStatement","src":"19487:48:56"}]}}]},"documentation":{"id":12535,"nodeType":"StructuredDocumentation","src":"19011:312:56","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":12560,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19337:8:56","nodeType":"FunctionDefinition","parameters":{"id":12538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12537,"mutability":"mutable","name":"value","nameLocation":"19353:5:56","nodeType":"VariableDeclaration","scope":12560,"src":"19346:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12536,"name":"int256","nodeType":"ElementaryTypeName","src":"19346:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19345:14:56"},"returnParameters":{"id":12541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12540,"mutability":"mutable","name":"downcasted","nameLocation":"19390:10:56","nodeType":"VariableDeclaration","scope":12560,"src":"19383:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":12539,"name":"int224","nodeType":"ElementaryTypeName","src":"19383:6:56","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19382:19:56"},"scope":13303,"src":"19328:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12585,"nodeType":"Block","src":"19949:150:56","statements":[{"expression":{"id":12573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12568,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12566,"src":"19959:10:56","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12563,"src":"19979:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19972:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":12569,"name":"int216","nodeType":"ElementaryTypeName","src":"19972:6:56","typeDescriptions":{}}},"id":12572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19972:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19959:26:56","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":12574,"nodeType":"ExpressionStatement","src":"19959:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12575,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12566,"src":"19999:10:56","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12576,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12563,"src":"20013:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19999:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12584,"nodeType":"IfStatement","src":"19995:98:56","trueBody":{"id":12583,"nodeType":"Block","src":"20020:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":12579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20071:3:56","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":12580,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12563,"src":"20076:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12578,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"20041:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20041:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12582,"nodeType":"RevertStatement","src":"20034:48:56"}]}}]},"documentation":{"id":12561,"nodeType":"StructuredDocumentation","src":"19558:312:56","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":12586,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19884:8:56","nodeType":"FunctionDefinition","parameters":{"id":12564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12563,"mutability":"mutable","name":"value","nameLocation":"19900:5:56","nodeType":"VariableDeclaration","scope":12586,"src":"19893:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12562,"name":"int256","nodeType":"ElementaryTypeName","src":"19893:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19892:14:56"},"returnParameters":{"id":12567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12566,"mutability":"mutable","name":"downcasted","nameLocation":"19937:10:56","nodeType":"VariableDeclaration","scope":12586,"src":"19930:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":12565,"name":"int216","nodeType":"ElementaryTypeName","src":"19930:6:56","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19929:19:56"},"scope":13303,"src":"19875:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12611,"nodeType":"Block","src":"20496:150:56","statements":[{"expression":{"id":12599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12594,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12592,"src":"20506:10:56","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12589,"src":"20526:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20519:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":12595,"name":"int208","nodeType":"ElementaryTypeName","src":"20519:6:56","typeDescriptions":{}}},"id":12598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20519:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20506:26:56","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":12600,"nodeType":"ExpressionStatement","src":"20506:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12601,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12592,"src":"20546:10:56","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12589,"src":"20560:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20546:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12610,"nodeType":"IfStatement","src":"20542:98:56","trueBody":{"id":12609,"nodeType":"Block","src":"20567:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":12605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20618:3:56","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":12606,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12589,"src":"20623:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12604,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"20588:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20588:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12608,"nodeType":"RevertStatement","src":"20581:48:56"}]}}]},"documentation":{"id":12587,"nodeType":"StructuredDocumentation","src":"20105:312:56","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":12612,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20431:8:56","nodeType":"FunctionDefinition","parameters":{"id":12590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12589,"mutability":"mutable","name":"value","nameLocation":"20447:5:56","nodeType":"VariableDeclaration","scope":12612,"src":"20440:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12588,"name":"int256","nodeType":"ElementaryTypeName","src":"20440:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20439:14:56"},"returnParameters":{"id":12593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12592,"mutability":"mutable","name":"downcasted","nameLocation":"20484:10:56","nodeType":"VariableDeclaration","scope":12612,"src":"20477:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":12591,"name":"int208","nodeType":"ElementaryTypeName","src":"20477:6:56","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20476:19:56"},"scope":13303,"src":"20422:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12637,"nodeType":"Block","src":"21043:150:56","statements":[{"expression":{"id":12625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12620,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12618,"src":"21053:10:56","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12615,"src":"21073:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21066:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":12621,"name":"int200","nodeType":"ElementaryTypeName","src":"21066:6:56","typeDescriptions":{}}},"id":12624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21066:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21053:26:56","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":12626,"nodeType":"ExpressionStatement","src":"21053:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12627,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12618,"src":"21093:10:56","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12628,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12615,"src":"21107:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21093:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12636,"nodeType":"IfStatement","src":"21089:98:56","trueBody":{"id":12635,"nodeType":"Block","src":"21114:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":12631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21165:3:56","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":12632,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12615,"src":"21170:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12630,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"21135:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12634,"nodeType":"RevertStatement","src":"21128:48:56"}]}}]},"documentation":{"id":12613,"nodeType":"StructuredDocumentation","src":"20652:312:56","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":12638,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20978:8:56","nodeType":"FunctionDefinition","parameters":{"id":12616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12615,"mutability":"mutable","name":"value","nameLocation":"20994:5:56","nodeType":"VariableDeclaration","scope":12638,"src":"20987:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12614,"name":"int256","nodeType":"ElementaryTypeName","src":"20987:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20986:14:56"},"returnParameters":{"id":12619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12618,"mutability":"mutable","name":"downcasted","nameLocation":"21031:10:56","nodeType":"VariableDeclaration","scope":12638,"src":"21024:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":12617,"name":"int200","nodeType":"ElementaryTypeName","src":"21024:6:56","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21023:19:56"},"scope":13303,"src":"20969:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12663,"nodeType":"Block","src":"21590:150:56","statements":[{"expression":{"id":12651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12646,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12644,"src":"21600:10:56","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12649,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12641,"src":"21620:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21613:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":12647,"name":"int192","nodeType":"ElementaryTypeName","src":"21613:6:56","typeDescriptions":{}}},"id":12650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21613:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21600:26:56","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":12652,"nodeType":"ExpressionStatement","src":"21600:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12653,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12644,"src":"21640:10:56","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12641,"src":"21654:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21640:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12662,"nodeType":"IfStatement","src":"21636:98:56","trueBody":{"id":12661,"nodeType":"Block","src":"21661:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":12657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21712:3:56","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":12658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12641,"src":"21717:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12656,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"21682:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21682:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12660,"nodeType":"RevertStatement","src":"21675:48:56"}]}}]},"documentation":{"id":12639,"nodeType":"StructuredDocumentation","src":"21199:312:56","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":12664,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21525:8:56","nodeType":"FunctionDefinition","parameters":{"id":12642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12641,"mutability":"mutable","name":"value","nameLocation":"21541:5:56","nodeType":"VariableDeclaration","scope":12664,"src":"21534:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12640,"name":"int256","nodeType":"ElementaryTypeName","src":"21534:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21533:14:56"},"returnParameters":{"id":12645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12644,"mutability":"mutable","name":"downcasted","nameLocation":"21578:10:56","nodeType":"VariableDeclaration","scope":12664,"src":"21571:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":12643,"name":"int192","nodeType":"ElementaryTypeName","src":"21571:6:56","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21570:19:56"},"scope":13303,"src":"21516:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12689,"nodeType":"Block","src":"22137:150:56","statements":[{"expression":{"id":12677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12672,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12670,"src":"22147:10:56","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12675,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12667,"src":"22167:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12674,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22160:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":12673,"name":"int184","nodeType":"ElementaryTypeName","src":"22160:6:56","typeDescriptions":{}}},"id":12676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22160:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22147:26:56","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":12678,"nodeType":"ExpressionStatement","src":"22147:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12679,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12670,"src":"22187:10:56","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12667,"src":"22201:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22187:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12688,"nodeType":"IfStatement","src":"22183:98:56","trueBody":{"id":12687,"nodeType":"Block","src":"22208:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":12683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22259:3:56","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":12684,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12667,"src":"22264:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12682,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"22229:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22229:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12686,"nodeType":"RevertStatement","src":"22222:48:56"}]}}]},"documentation":{"id":12665,"nodeType":"StructuredDocumentation","src":"21746:312:56","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":12690,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22072:8:56","nodeType":"FunctionDefinition","parameters":{"id":12668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12667,"mutability":"mutable","name":"value","nameLocation":"22088:5:56","nodeType":"VariableDeclaration","scope":12690,"src":"22081:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12666,"name":"int256","nodeType":"ElementaryTypeName","src":"22081:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22080:14:56"},"returnParameters":{"id":12671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12670,"mutability":"mutable","name":"downcasted","nameLocation":"22125:10:56","nodeType":"VariableDeclaration","scope":12690,"src":"22118:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":12669,"name":"int184","nodeType":"ElementaryTypeName","src":"22118:6:56","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22117:19:56"},"scope":13303,"src":"22063:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12715,"nodeType":"Block","src":"22684:150:56","statements":[{"expression":{"id":12703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12698,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12696,"src":"22694:10:56","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12701,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12693,"src":"22714:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22707:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":12699,"name":"int176","nodeType":"ElementaryTypeName","src":"22707:6:56","typeDescriptions":{}}},"id":12702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22707:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22694:26:56","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":12704,"nodeType":"ExpressionStatement","src":"22694:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12705,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12696,"src":"22734:10:56","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12706,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12693,"src":"22748:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22734:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12714,"nodeType":"IfStatement","src":"22730:98:56","trueBody":{"id":12713,"nodeType":"Block","src":"22755:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":12709,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22806:3:56","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":12710,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12693,"src":"22811:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12708,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"22776:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22776:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12712,"nodeType":"RevertStatement","src":"22769:48:56"}]}}]},"documentation":{"id":12691,"nodeType":"StructuredDocumentation","src":"22293:312:56","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":12716,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22619:8:56","nodeType":"FunctionDefinition","parameters":{"id":12694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12693,"mutability":"mutable","name":"value","nameLocation":"22635:5:56","nodeType":"VariableDeclaration","scope":12716,"src":"22628:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12692,"name":"int256","nodeType":"ElementaryTypeName","src":"22628:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22627:14:56"},"returnParameters":{"id":12697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12696,"mutability":"mutable","name":"downcasted","nameLocation":"22672:10:56","nodeType":"VariableDeclaration","scope":12716,"src":"22665:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":12695,"name":"int176","nodeType":"ElementaryTypeName","src":"22665:6:56","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22664:19:56"},"scope":13303,"src":"22610:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12741,"nodeType":"Block","src":"23231:150:56","statements":[{"expression":{"id":12729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12724,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12722,"src":"23241:10:56","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12727,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12719,"src":"23261:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23254:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":12725,"name":"int168","nodeType":"ElementaryTypeName","src":"23254:6:56","typeDescriptions":{}}},"id":12728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23254:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23241:26:56","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":12730,"nodeType":"ExpressionStatement","src":"23241:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12731,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12722,"src":"23281:10:56","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12732,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12719,"src":"23295:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23281:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12740,"nodeType":"IfStatement","src":"23277:98:56","trueBody":{"id":12739,"nodeType":"Block","src":"23302:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":12735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23353:3:56","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":12736,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12719,"src":"23358:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12734,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"23323:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23323:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12738,"nodeType":"RevertStatement","src":"23316:48:56"}]}}]},"documentation":{"id":12717,"nodeType":"StructuredDocumentation","src":"22840:312:56","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":12742,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23166:8:56","nodeType":"FunctionDefinition","parameters":{"id":12720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12719,"mutability":"mutable","name":"value","nameLocation":"23182:5:56","nodeType":"VariableDeclaration","scope":12742,"src":"23175:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12718,"name":"int256","nodeType":"ElementaryTypeName","src":"23175:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23174:14:56"},"returnParameters":{"id":12723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12722,"mutability":"mutable","name":"downcasted","nameLocation":"23219:10:56","nodeType":"VariableDeclaration","scope":12742,"src":"23212:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":12721,"name":"int168","nodeType":"ElementaryTypeName","src":"23212:6:56","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23211:19:56"},"scope":13303,"src":"23157:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12767,"nodeType":"Block","src":"23778:150:56","statements":[{"expression":{"id":12755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12750,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12748,"src":"23788:10:56","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12745,"src":"23808:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23801:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":12751,"name":"int160","nodeType":"ElementaryTypeName","src":"23801:6:56","typeDescriptions":{}}},"id":12754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23801:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23788:26:56","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":12756,"nodeType":"ExpressionStatement","src":"23788:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12757,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12748,"src":"23828:10:56","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12758,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12745,"src":"23842:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23828:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12766,"nodeType":"IfStatement","src":"23824:98:56","trueBody":{"id":12765,"nodeType":"Block","src":"23849:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":12761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23900:3:56","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":12762,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12745,"src":"23905:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12760,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"23870:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23870:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12764,"nodeType":"RevertStatement","src":"23863:48:56"}]}}]},"documentation":{"id":12743,"nodeType":"StructuredDocumentation","src":"23387:312:56","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":12768,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23713:8:56","nodeType":"FunctionDefinition","parameters":{"id":12746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12745,"mutability":"mutable","name":"value","nameLocation":"23729:5:56","nodeType":"VariableDeclaration","scope":12768,"src":"23722:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12744,"name":"int256","nodeType":"ElementaryTypeName","src":"23722:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23721:14:56"},"returnParameters":{"id":12749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12748,"mutability":"mutable","name":"downcasted","nameLocation":"23766:10:56","nodeType":"VariableDeclaration","scope":12768,"src":"23759:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":12747,"name":"int160","nodeType":"ElementaryTypeName","src":"23759:6:56","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23758:19:56"},"scope":13303,"src":"23704:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12793,"nodeType":"Block","src":"24325:150:56","statements":[{"expression":{"id":12781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12776,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12774,"src":"24335:10:56","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"24355:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24348:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":12777,"name":"int152","nodeType":"ElementaryTypeName","src":"24348:6:56","typeDescriptions":{}}},"id":12780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24348:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24335:26:56","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":12782,"nodeType":"ExpressionStatement","src":"24335:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12783,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12774,"src":"24375:10:56","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"24389:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24375:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12792,"nodeType":"IfStatement","src":"24371:98:56","trueBody":{"id":12791,"nodeType":"Block","src":"24396:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":12787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24447:3:56","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":12788,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12771,"src":"24452:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12786,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"24417:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24417:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12790,"nodeType":"RevertStatement","src":"24410:48:56"}]}}]},"documentation":{"id":12769,"nodeType":"StructuredDocumentation","src":"23934:312:56","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":12794,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24260:8:56","nodeType":"FunctionDefinition","parameters":{"id":12772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12771,"mutability":"mutable","name":"value","nameLocation":"24276:5:56","nodeType":"VariableDeclaration","scope":12794,"src":"24269:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12770,"name":"int256","nodeType":"ElementaryTypeName","src":"24269:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24268:14:56"},"returnParameters":{"id":12775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12774,"mutability":"mutable","name":"downcasted","nameLocation":"24313:10:56","nodeType":"VariableDeclaration","scope":12794,"src":"24306:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":12773,"name":"int152","nodeType":"ElementaryTypeName","src":"24306:6:56","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24305:19:56"},"scope":13303,"src":"24251:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12819,"nodeType":"Block","src":"24872:150:56","statements":[{"expression":{"id":12807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12802,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12800,"src":"24882:10:56","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12805,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12797,"src":"24902:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24895:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":12803,"name":"int144","nodeType":"ElementaryTypeName","src":"24895:6:56","typeDescriptions":{}}},"id":12806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24895:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24882:26:56","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":12808,"nodeType":"ExpressionStatement","src":"24882:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12809,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12800,"src":"24922:10:56","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12797,"src":"24936:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24922:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12818,"nodeType":"IfStatement","src":"24918:98:56","trueBody":{"id":12817,"nodeType":"Block","src":"24943:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":12813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24994:3:56","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":12814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12797,"src":"24999:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12812,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"24964:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24964:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12816,"nodeType":"RevertStatement","src":"24957:48:56"}]}}]},"documentation":{"id":12795,"nodeType":"StructuredDocumentation","src":"24481:312:56","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":12820,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24807:8:56","nodeType":"FunctionDefinition","parameters":{"id":12798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12797,"mutability":"mutable","name":"value","nameLocation":"24823:5:56","nodeType":"VariableDeclaration","scope":12820,"src":"24816:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12796,"name":"int256","nodeType":"ElementaryTypeName","src":"24816:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24815:14:56"},"returnParameters":{"id":12801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12800,"mutability":"mutable","name":"downcasted","nameLocation":"24860:10:56","nodeType":"VariableDeclaration","scope":12820,"src":"24853:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":12799,"name":"int144","nodeType":"ElementaryTypeName","src":"24853:6:56","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24852:19:56"},"scope":13303,"src":"24798:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12845,"nodeType":"Block","src":"25419:150:56","statements":[{"expression":{"id":12833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12828,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12826,"src":"25429:10:56","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12831,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12823,"src":"25449:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25442:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":12829,"name":"int136","nodeType":"ElementaryTypeName","src":"25442:6:56","typeDescriptions":{}}},"id":12832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25442:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25429:26:56","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":12834,"nodeType":"ExpressionStatement","src":"25429:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12835,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12826,"src":"25469:10:56","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12823,"src":"25483:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25469:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12844,"nodeType":"IfStatement","src":"25465:98:56","trueBody":{"id":12843,"nodeType":"Block","src":"25490:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":12839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25541:3:56","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":12840,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12823,"src":"25546:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12838,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"25511:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25511:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12842,"nodeType":"RevertStatement","src":"25504:48:56"}]}}]},"documentation":{"id":12821,"nodeType":"StructuredDocumentation","src":"25028:312:56","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":12846,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25354:8:56","nodeType":"FunctionDefinition","parameters":{"id":12824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12823,"mutability":"mutable","name":"value","nameLocation":"25370:5:56","nodeType":"VariableDeclaration","scope":12846,"src":"25363:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12822,"name":"int256","nodeType":"ElementaryTypeName","src":"25363:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25362:14:56"},"returnParameters":{"id":12827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12826,"mutability":"mutable","name":"downcasted","nameLocation":"25407:10:56","nodeType":"VariableDeclaration","scope":12846,"src":"25400:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":12825,"name":"int136","nodeType":"ElementaryTypeName","src":"25400:6:56","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25399:19:56"},"scope":13303,"src":"25345:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12871,"nodeType":"Block","src":"25966:150:56","statements":[{"expression":{"id":12859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12854,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12852,"src":"25976:10:56","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12857,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12849,"src":"25996:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25989:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":12855,"name":"int128","nodeType":"ElementaryTypeName","src":"25989:6:56","typeDescriptions":{}}},"id":12858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25989:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25976:26:56","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":12860,"nodeType":"ExpressionStatement","src":"25976:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12861,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12852,"src":"26016:10:56","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12862,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12849,"src":"26030:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26016:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12870,"nodeType":"IfStatement","src":"26012:98:56","trueBody":{"id":12869,"nodeType":"Block","src":"26037:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":12865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26088:3:56","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":12866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12849,"src":"26093:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12864,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"26058:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26058:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12868,"nodeType":"RevertStatement","src":"26051:48:56"}]}}]},"documentation":{"id":12847,"nodeType":"StructuredDocumentation","src":"25575:312:56","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":12872,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25901:8:56","nodeType":"FunctionDefinition","parameters":{"id":12850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12849,"mutability":"mutable","name":"value","nameLocation":"25917:5:56","nodeType":"VariableDeclaration","scope":12872,"src":"25910:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12848,"name":"int256","nodeType":"ElementaryTypeName","src":"25910:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25909:14:56"},"returnParameters":{"id":12853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12852,"mutability":"mutable","name":"downcasted","nameLocation":"25954:10:56","nodeType":"VariableDeclaration","scope":12872,"src":"25947:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":12851,"name":"int128","nodeType":"ElementaryTypeName","src":"25947:6:56","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25946:19:56"},"scope":13303,"src":"25892:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12897,"nodeType":"Block","src":"26513:150:56","statements":[{"expression":{"id":12885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12880,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"26523:10:56","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12883,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"26543:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12882,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26536:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":12881,"name":"int120","nodeType":"ElementaryTypeName","src":"26536:6:56","typeDescriptions":{}}},"id":12884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26536:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26523:26:56","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":12886,"nodeType":"ExpressionStatement","src":"26523:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12887,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12878,"src":"26563:10:56","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12888,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"26577:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26563:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12896,"nodeType":"IfStatement","src":"26559:98:56","trueBody":{"id":12895,"nodeType":"Block","src":"26584:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":12891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26635:3:56","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":12892,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12875,"src":"26640:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12890,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"26605:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26605:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12894,"nodeType":"RevertStatement","src":"26598:48:56"}]}}]},"documentation":{"id":12873,"nodeType":"StructuredDocumentation","src":"26122:312:56","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":12898,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26448:8:56","nodeType":"FunctionDefinition","parameters":{"id":12876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12875,"mutability":"mutable","name":"value","nameLocation":"26464:5:56","nodeType":"VariableDeclaration","scope":12898,"src":"26457:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12874,"name":"int256","nodeType":"ElementaryTypeName","src":"26457:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26456:14:56"},"returnParameters":{"id":12879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12878,"mutability":"mutable","name":"downcasted","nameLocation":"26501:10:56","nodeType":"VariableDeclaration","scope":12898,"src":"26494:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":12877,"name":"int120","nodeType":"ElementaryTypeName","src":"26494:6:56","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26493:19:56"},"scope":13303,"src":"26439:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12923,"nodeType":"Block","src":"27060:150:56","statements":[{"expression":{"id":12911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12906,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12904,"src":"27070:10:56","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12909,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12901,"src":"27090:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27083:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":12907,"name":"int112","nodeType":"ElementaryTypeName","src":"27083:6:56","typeDescriptions":{}}},"id":12910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27083:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27070:26:56","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":12912,"nodeType":"ExpressionStatement","src":"27070:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12913,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12904,"src":"27110:10:56","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12914,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12901,"src":"27124:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27110:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12922,"nodeType":"IfStatement","src":"27106:98:56","trueBody":{"id":12921,"nodeType":"Block","src":"27131:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":12917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27182:3:56","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":12918,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12901,"src":"27187:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12916,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"27152:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27152:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12920,"nodeType":"RevertStatement","src":"27145:48:56"}]}}]},"documentation":{"id":12899,"nodeType":"StructuredDocumentation","src":"26669:312:56","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":12924,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26995:8:56","nodeType":"FunctionDefinition","parameters":{"id":12902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12901,"mutability":"mutable","name":"value","nameLocation":"27011:5:56","nodeType":"VariableDeclaration","scope":12924,"src":"27004:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12900,"name":"int256","nodeType":"ElementaryTypeName","src":"27004:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27003:14:56"},"returnParameters":{"id":12905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12904,"mutability":"mutable","name":"downcasted","nameLocation":"27048:10:56","nodeType":"VariableDeclaration","scope":12924,"src":"27041:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":12903,"name":"int112","nodeType":"ElementaryTypeName","src":"27041:6:56","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27040:19:56"},"scope":13303,"src":"26986:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12949,"nodeType":"Block","src":"27607:150:56","statements":[{"expression":{"id":12937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12932,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12930,"src":"27617:10:56","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12935,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12927,"src":"27637:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27630:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":12933,"name":"int104","nodeType":"ElementaryTypeName","src":"27630:6:56","typeDescriptions":{}}},"id":12936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27617:26:56","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":12938,"nodeType":"ExpressionStatement","src":"27617:26:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12939,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12930,"src":"27657:10:56","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12940,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12927,"src":"27671:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27657:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12948,"nodeType":"IfStatement","src":"27653:98:56","trueBody":{"id":12947,"nodeType":"Block","src":"27678:73:56","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":12943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27729:3:56","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":12944,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12927,"src":"27734:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12942,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"27699:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27699:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12946,"nodeType":"RevertStatement","src":"27692:48:56"}]}}]},"documentation":{"id":12925,"nodeType":"StructuredDocumentation","src":"27216:312:56","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":12950,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27542:8:56","nodeType":"FunctionDefinition","parameters":{"id":12928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12927,"mutability":"mutable","name":"value","nameLocation":"27558:5:56","nodeType":"VariableDeclaration","scope":12950,"src":"27551:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12926,"name":"int256","nodeType":"ElementaryTypeName","src":"27551:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27550:14:56"},"returnParameters":{"id":12931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12930,"mutability":"mutable","name":"downcasted","nameLocation":"27595:10:56","nodeType":"VariableDeclaration","scope":12950,"src":"27588:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":12929,"name":"int104","nodeType":"ElementaryTypeName","src":"27588:6:56","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27587:19:56"},"scope":13303,"src":"27533:224:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":12975,"nodeType":"Block","src":"28147:148:56","statements":[{"expression":{"id":12963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12958,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"28157:10:56","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12953,"src":"28176:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28170:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":12959,"name":"int96","nodeType":"ElementaryTypeName","src":"28170:5:56","typeDescriptions":{}}},"id":12962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28170:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28157:25:56","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":12964,"nodeType":"ExpressionStatement","src":"28157:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12965,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12956,"src":"28196:10:56","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12953,"src":"28210:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28196:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12974,"nodeType":"IfStatement","src":"28192:97:56","trueBody":{"id":12973,"nodeType":"Block","src":"28217:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":12969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28268:2:56","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":12970,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12953,"src":"28272:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12968,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"28238:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28238:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12972,"nodeType":"RevertStatement","src":"28231:47:56"}]}}]},"documentation":{"id":12951,"nodeType":"StructuredDocumentation","src":"27763:307:56","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":12976,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28084:7:56","nodeType":"FunctionDefinition","parameters":{"id":12954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12953,"mutability":"mutable","name":"value","nameLocation":"28099:5:56","nodeType":"VariableDeclaration","scope":12976,"src":"28092:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12952,"name":"int256","nodeType":"ElementaryTypeName","src":"28092:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28091:14:56"},"returnParameters":{"id":12957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12956,"mutability":"mutable","name":"downcasted","nameLocation":"28135:10:56","nodeType":"VariableDeclaration","scope":12976,"src":"28129:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":12955,"name":"int96","nodeType":"ElementaryTypeName","src":"28129:5:56","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28128:18:56"},"scope":13303,"src":"28075:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13001,"nodeType":"Block","src":"28685:148:56","statements":[{"expression":{"id":12989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12984,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12982,"src":"28695:10:56","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12979,"src":"28714:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28708:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":12985,"name":"int88","nodeType":"ElementaryTypeName","src":"28708:5:56","typeDescriptions":{}}},"id":12988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28708:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28695:25:56","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":12990,"nodeType":"ExpressionStatement","src":"28695:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":12993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12991,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12982,"src":"28734:10:56","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":12992,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12979,"src":"28748:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28734:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13000,"nodeType":"IfStatement","src":"28730:97:56","trueBody":{"id":12999,"nodeType":"Block","src":"28755:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":12995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28806:2:56","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":12996,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12979,"src":"28810:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":12994,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"28776:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":12997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28776:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12998,"nodeType":"RevertStatement","src":"28769:47:56"}]}}]},"documentation":{"id":12977,"nodeType":"StructuredDocumentation","src":"28301:307:56","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":13002,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28622:7:56","nodeType":"FunctionDefinition","parameters":{"id":12980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12979,"mutability":"mutable","name":"value","nameLocation":"28637:5:56","nodeType":"VariableDeclaration","scope":13002,"src":"28630:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":12978,"name":"int256","nodeType":"ElementaryTypeName","src":"28630:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28629:14:56"},"returnParameters":{"id":12983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12982,"mutability":"mutable","name":"downcasted","nameLocation":"28673:10:56","nodeType":"VariableDeclaration","scope":13002,"src":"28667:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":12981,"name":"int88","nodeType":"ElementaryTypeName","src":"28667:5:56","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28666:18:56"},"scope":13303,"src":"28613:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13027,"nodeType":"Block","src":"29223:148:56","statements":[{"expression":{"id":13015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13010,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13008,"src":"29233:10:56","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13013,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13005,"src":"29252:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29246:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":13011,"name":"int80","nodeType":"ElementaryTypeName","src":"29246:5:56","typeDescriptions":{}}},"id":13014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29246:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29233:25:56","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":13016,"nodeType":"ExpressionStatement","src":"29233:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13017,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13008,"src":"29272:10:56","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13018,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13005,"src":"29286:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29272:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13026,"nodeType":"IfStatement","src":"29268:97:56","trueBody":{"id":13025,"nodeType":"Block","src":"29293:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":13021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29344:2:56","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":13022,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13005,"src":"29348:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13020,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"29314:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29314:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13024,"nodeType":"RevertStatement","src":"29307:47:56"}]}}]},"documentation":{"id":13003,"nodeType":"StructuredDocumentation","src":"28839:307:56","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":13028,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29160:7:56","nodeType":"FunctionDefinition","parameters":{"id":13006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13005,"mutability":"mutable","name":"value","nameLocation":"29175:5:56","nodeType":"VariableDeclaration","scope":13028,"src":"29168:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13004,"name":"int256","nodeType":"ElementaryTypeName","src":"29168:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29167:14:56"},"returnParameters":{"id":13009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13008,"mutability":"mutable","name":"downcasted","nameLocation":"29211:10:56","nodeType":"VariableDeclaration","scope":13028,"src":"29205:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":13007,"name":"int80","nodeType":"ElementaryTypeName","src":"29205:5:56","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29204:18:56"},"scope":13303,"src":"29151:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13053,"nodeType":"Block","src":"29761:148:56","statements":[{"expression":{"id":13041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13036,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13034,"src":"29771:10:56","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13039,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13031,"src":"29790:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29784:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":13037,"name":"int72","nodeType":"ElementaryTypeName","src":"29784:5:56","typeDescriptions":{}}},"id":13040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29784:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29771:25:56","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":13042,"nodeType":"ExpressionStatement","src":"29771:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13043,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13034,"src":"29810:10:56","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13044,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13031,"src":"29824:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29810:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13052,"nodeType":"IfStatement","src":"29806:97:56","trueBody":{"id":13051,"nodeType":"Block","src":"29831:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":13047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29882:2:56","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":13048,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13031,"src":"29886:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13046,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"29852:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29852:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13050,"nodeType":"RevertStatement","src":"29845:47:56"}]}}]},"documentation":{"id":13029,"nodeType":"StructuredDocumentation","src":"29377:307:56","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":13054,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29698:7:56","nodeType":"FunctionDefinition","parameters":{"id":13032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13031,"mutability":"mutable","name":"value","nameLocation":"29713:5:56","nodeType":"VariableDeclaration","scope":13054,"src":"29706:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13030,"name":"int256","nodeType":"ElementaryTypeName","src":"29706:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29705:14:56"},"returnParameters":{"id":13035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13034,"mutability":"mutable","name":"downcasted","nameLocation":"29749:10:56","nodeType":"VariableDeclaration","scope":13054,"src":"29743:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":13033,"name":"int72","nodeType":"ElementaryTypeName","src":"29743:5:56","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29742:18:56"},"scope":13303,"src":"29689:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13079,"nodeType":"Block","src":"30299:148:56","statements":[{"expression":{"id":13067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13062,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13060,"src":"30309:10:56","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13065,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13057,"src":"30328:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30322:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":13063,"name":"int64","nodeType":"ElementaryTypeName","src":"30322:5:56","typeDescriptions":{}}},"id":13066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30322:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30309:25:56","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":13068,"nodeType":"ExpressionStatement","src":"30309:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13069,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13060,"src":"30348:10:56","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13070,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13057,"src":"30362:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30348:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13078,"nodeType":"IfStatement","src":"30344:97:56","trueBody":{"id":13077,"nodeType":"Block","src":"30369:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":13073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30420:2:56","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":13074,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13057,"src":"30424:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13072,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"30390:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30390:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13076,"nodeType":"RevertStatement","src":"30383:47:56"}]}}]},"documentation":{"id":13055,"nodeType":"StructuredDocumentation","src":"29915:307:56","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":13080,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30236:7:56","nodeType":"FunctionDefinition","parameters":{"id":13058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13057,"mutability":"mutable","name":"value","nameLocation":"30251:5:56","nodeType":"VariableDeclaration","scope":13080,"src":"30244:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13056,"name":"int256","nodeType":"ElementaryTypeName","src":"30244:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30243:14:56"},"returnParameters":{"id":13061,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13060,"mutability":"mutable","name":"downcasted","nameLocation":"30287:10:56","nodeType":"VariableDeclaration","scope":13080,"src":"30281:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":13059,"name":"int64","nodeType":"ElementaryTypeName","src":"30281:5:56","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30280:18:56"},"scope":13303,"src":"30227:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13105,"nodeType":"Block","src":"30837:148:56","statements":[{"expression":{"id":13093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13088,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"30847:10:56","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13091,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13083,"src":"30866:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30860:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":13089,"name":"int56","nodeType":"ElementaryTypeName","src":"30860:5:56","typeDescriptions":{}}},"id":13092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30860:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30847:25:56","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":13094,"nodeType":"ExpressionStatement","src":"30847:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13095,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"30886:10:56","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13096,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13083,"src":"30900:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30886:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13104,"nodeType":"IfStatement","src":"30882:97:56","trueBody":{"id":13103,"nodeType":"Block","src":"30907:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":13099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30958:2:56","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":13100,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13083,"src":"30962:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13098,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"30928:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30928:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13102,"nodeType":"RevertStatement","src":"30921:47:56"}]}}]},"documentation":{"id":13081,"nodeType":"StructuredDocumentation","src":"30453:307:56","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":13106,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30774:7:56","nodeType":"FunctionDefinition","parameters":{"id":13084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13083,"mutability":"mutable","name":"value","nameLocation":"30789:5:56","nodeType":"VariableDeclaration","scope":13106,"src":"30782:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13082,"name":"int256","nodeType":"ElementaryTypeName","src":"30782:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30781:14:56"},"returnParameters":{"id":13087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13086,"mutability":"mutable","name":"downcasted","nameLocation":"30825:10:56","nodeType":"VariableDeclaration","scope":13106,"src":"30819:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":13085,"name":"int56","nodeType":"ElementaryTypeName","src":"30819:5:56","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30818:18:56"},"scope":13303,"src":"30765:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13131,"nodeType":"Block","src":"31375:148:56","statements":[{"expression":{"id":13119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13114,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"31385:10:56","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13117,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13109,"src":"31404:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31398:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":13115,"name":"int48","nodeType":"ElementaryTypeName","src":"31398:5:56","typeDescriptions":{}}},"id":13118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31398:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31385:25:56","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":13120,"nodeType":"ExpressionStatement","src":"31385:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13121,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13112,"src":"31424:10:56","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13122,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13109,"src":"31438:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31424:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13130,"nodeType":"IfStatement","src":"31420:97:56","trueBody":{"id":13129,"nodeType":"Block","src":"31445:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":13125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31496:2:56","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":13126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13109,"src":"31500:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13124,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"31466:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31466:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13128,"nodeType":"RevertStatement","src":"31459:47:56"}]}}]},"documentation":{"id":13107,"nodeType":"StructuredDocumentation","src":"30991:307:56","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":13132,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31312:7:56","nodeType":"FunctionDefinition","parameters":{"id":13110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13109,"mutability":"mutable","name":"value","nameLocation":"31327:5:56","nodeType":"VariableDeclaration","scope":13132,"src":"31320:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13108,"name":"int256","nodeType":"ElementaryTypeName","src":"31320:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31319:14:56"},"returnParameters":{"id":13113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13112,"mutability":"mutable","name":"downcasted","nameLocation":"31363:10:56","nodeType":"VariableDeclaration","scope":13132,"src":"31357:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":13111,"name":"int48","nodeType":"ElementaryTypeName","src":"31357:5:56","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31356:18:56"},"scope":13303,"src":"31303:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13157,"nodeType":"Block","src":"31913:148:56","statements":[{"expression":{"id":13145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13140,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13138,"src":"31923:10:56","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13135,"src":"31942:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31936:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":13141,"name":"int40","nodeType":"ElementaryTypeName","src":"31936:5:56","typeDescriptions":{}}},"id":13144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31936:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31923:25:56","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":13146,"nodeType":"ExpressionStatement","src":"31923:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13147,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13138,"src":"31962:10:56","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13148,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13135,"src":"31976:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31962:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13156,"nodeType":"IfStatement","src":"31958:97:56","trueBody":{"id":13155,"nodeType":"Block","src":"31983:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":13151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32034:2:56","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":13152,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13135,"src":"32038:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13150,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"32004:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32004:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13154,"nodeType":"RevertStatement","src":"31997:47:56"}]}}]},"documentation":{"id":13133,"nodeType":"StructuredDocumentation","src":"31529:307:56","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":13158,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31850:7:56","nodeType":"FunctionDefinition","parameters":{"id":13136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13135,"mutability":"mutable","name":"value","nameLocation":"31865:5:56","nodeType":"VariableDeclaration","scope":13158,"src":"31858:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13134,"name":"int256","nodeType":"ElementaryTypeName","src":"31858:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31857:14:56"},"returnParameters":{"id":13139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13138,"mutability":"mutable","name":"downcasted","nameLocation":"31901:10:56","nodeType":"VariableDeclaration","scope":13158,"src":"31895:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":13137,"name":"int40","nodeType":"ElementaryTypeName","src":"31895:5:56","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31894:18:56"},"scope":13303,"src":"31841:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13183,"nodeType":"Block","src":"32451:148:56","statements":[{"expression":{"id":13171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13166,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13164,"src":"32461:10:56","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13169,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13161,"src":"32480:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32474:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":13167,"name":"int32","nodeType":"ElementaryTypeName","src":"32474:5:56","typeDescriptions":{}}},"id":13170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32474:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32461:25:56","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":13172,"nodeType":"ExpressionStatement","src":"32461:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13173,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13164,"src":"32500:10:56","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13174,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13161,"src":"32514:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32500:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13182,"nodeType":"IfStatement","src":"32496:97:56","trueBody":{"id":13181,"nodeType":"Block","src":"32521:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":13177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32572:2:56","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":13178,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13161,"src":"32576:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13176,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"32542:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32542:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13180,"nodeType":"RevertStatement","src":"32535:47:56"}]}}]},"documentation":{"id":13159,"nodeType":"StructuredDocumentation","src":"32067:307:56","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":13184,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32388:7:56","nodeType":"FunctionDefinition","parameters":{"id":13162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13161,"mutability":"mutable","name":"value","nameLocation":"32403:5:56","nodeType":"VariableDeclaration","scope":13184,"src":"32396:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13160,"name":"int256","nodeType":"ElementaryTypeName","src":"32396:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32395:14:56"},"returnParameters":{"id":13165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13164,"mutability":"mutable","name":"downcasted","nameLocation":"32439:10:56","nodeType":"VariableDeclaration","scope":13184,"src":"32433:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":13163,"name":"int32","nodeType":"ElementaryTypeName","src":"32433:5:56","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32432:18:56"},"scope":13303,"src":"32379:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13209,"nodeType":"Block","src":"32989:148:56","statements":[{"expression":{"id":13197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13192,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13190,"src":"32999:10:56","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13195,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13187,"src":"33018:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33012:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":13193,"name":"int24","nodeType":"ElementaryTypeName","src":"33012:5:56","typeDescriptions":{}}},"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33012:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32999:25:56","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":13198,"nodeType":"ExpressionStatement","src":"32999:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13199,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13190,"src":"33038:10:56","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13200,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13187,"src":"33052:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33038:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13208,"nodeType":"IfStatement","src":"33034:97:56","trueBody":{"id":13207,"nodeType":"Block","src":"33059:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":13203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33110:2:56","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":13204,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13187,"src":"33114:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13202,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"33080:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33080:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13206,"nodeType":"RevertStatement","src":"33073:47:56"}]}}]},"documentation":{"id":13185,"nodeType":"StructuredDocumentation","src":"32605:307:56","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":13210,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32926:7:56","nodeType":"FunctionDefinition","parameters":{"id":13188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13187,"mutability":"mutable","name":"value","nameLocation":"32941:5:56","nodeType":"VariableDeclaration","scope":13210,"src":"32934:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13186,"name":"int256","nodeType":"ElementaryTypeName","src":"32934:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32933:14:56"},"returnParameters":{"id":13191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13190,"mutability":"mutable","name":"downcasted","nameLocation":"32977:10:56","nodeType":"VariableDeclaration","scope":13210,"src":"32971:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":13189,"name":"int24","nodeType":"ElementaryTypeName","src":"32971:5:56","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32970:18:56"},"scope":13303,"src":"32917:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13235,"nodeType":"Block","src":"33527:148:56","statements":[{"expression":{"id":13223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13218,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13216,"src":"33537:10:56","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13221,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13213,"src":"33556:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13220,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33550:5:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":13219,"name":"int16","nodeType":"ElementaryTypeName","src":"33550:5:56","typeDescriptions":{}}},"id":13222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33550:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33537:25:56","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":13224,"nodeType":"ExpressionStatement","src":"33537:25:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13225,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13216,"src":"33576:10:56","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13213,"src":"33590:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33576:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13234,"nodeType":"IfStatement","src":"33572:97:56","trueBody":{"id":13233,"nodeType":"Block","src":"33597:72:56","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":13229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33648:2:56","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":13230,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13213,"src":"33652:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13228,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"33618:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33618:40:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13232,"nodeType":"RevertStatement","src":"33611:47:56"}]}}]},"documentation":{"id":13211,"nodeType":"StructuredDocumentation","src":"33143:307:56","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":13236,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33464:7:56","nodeType":"FunctionDefinition","parameters":{"id":13214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13213,"mutability":"mutable","name":"value","nameLocation":"33479:5:56","nodeType":"VariableDeclaration","scope":13236,"src":"33472:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13212,"name":"int256","nodeType":"ElementaryTypeName","src":"33472:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33471:14:56"},"returnParameters":{"id":13217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13216,"mutability":"mutable","name":"downcasted","nameLocation":"33515:10:56","nodeType":"VariableDeclaration","scope":13236,"src":"33509:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":13215,"name":"int16","nodeType":"ElementaryTypeName","src":"33509:5:56","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33508:18:56"},"scope":13303,"src":"33455:220:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13261,"nodeType":"Block","src":"34058:146:56","statements":[{"expression":{"id":13249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13244,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13242,"src":"34068:10:56","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13247,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13239,"src":"34086:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34081:4:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":13245,"name":"int8","nodeType":"ElementaryTypeName","src":"34081:4:56","typeDescriptions":{}}},"id":13248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:11:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34068:24:56","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":13250,"nodeType":"ExpressionStatement","src":"34068:24:56"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13251,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13242,"src":"34106:10:56","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":13252,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13239,"src":"34120:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34106:19:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13260,"nodeType":"IfStatement","src":"34102:96:56","trueBody":{"id":13259,"nodeType":"Block","src":"34127:71:56","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":13255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34178:1:56","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":13256,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13239,"src":"34181:5:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13254,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11560,"src":"34148:29:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":13257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34148:39:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13258,"nodeType":"RevertStatement","src":"34141:46:56"}]}}]},"documentation":{"id":13237,"nodeType":"StructuredDocumentation","src":"33681:302:56","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":13262,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33997:6:56","nodeType":"FunctionDefinition","parameters":{"id":13240,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13239,"mutability":"mutable","name":"value","nameLocation":"34011:5:56","nodeType":"VariableDeclaration","scope":13262,"src":"34004:12:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13238,"name":"int256","nodeType":"ElementaryTypeName","src":"34004:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34003:14:56"},"returnParameters":{"id":13243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13242,"mutability":"mutable","name":"downcasted","nameLocation":"34046:10:56","nodeType":"VariableDeclaration","scope":13262,"src":"34041:15:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":13241,"name":"int8","nodeType":"ElementaryTypeName","src":"34041:4:56","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34040:17:56"},"scope":13303,"src":"33988:216:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13291,"nodeType":"Block","src":"34444:250:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13265,"src":"34557:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":13275,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34578:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13274,"name":"int256","nodeType":"ElementaryTypeName","src":"34578:6:56","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":13273,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34573:4:56","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34573:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":13277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34586:3:56","memberName":"max","nodeType":"MemberAccess","src":"34573:16:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34565:7:56","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13271,"name":"uint256","nodeType":"ElementaryTypeName","src":"34565:7:56","typeDescriptions":{}}},"id":13278,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34565:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34557:33:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13285,"nodeType":"IfStatement","src":"34553:105:56","trueBody":{"id":13284,"nodeType":"Block","src":"34592:66:56","statements":[{"errorCall":{"arguments":[{"id":13281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13265,"src":"34641:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13280,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11565,"src":"34613:27:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":13282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34613:34:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13283,"nodeType":"RevertStatement","src":"34606:41:56"}]}},{"expression":{"arguments":[{"id":13288,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13265,"src":"34681:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13287,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34674:6:56","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13286,"name":"int256","nodeType":"ElementaryTypeName","src":"34674:6:56","typeDescriptions":{}}},"id":13289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34674:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":13269,"id":13290,"nodeType":"Return","src":"34667:20:56"}]},"documentation":{"id":13263,"nodeType":"StructuredDocumentation","src":"34210:165:56","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":13292,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34389:8:56","nodeType":"FunctionDefinition","parameters":{"id":13266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13265,"mutability":"mutable","name":"value","nameLocation":"34406:5:56","nodeType":"VariableDeclaration","scope":13292,"src":"34398:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13264,"name":"uint256","nodeType":"ElementaryTypeName","src":"34398:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34397:15:56"},"returnParameters":{"id":13269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13292,"src":"34436:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13267,"name":"int256","nodeType":"ElementaryTypeName","src":"34436:6:56","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34435:8:56"},"scope":13303,"src":"34380:314:56","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13301,"nodeType":"Block","src":"34853:87:56","statements":[{"AST":{"nativeSrc":"34888:46:56","nodeType":"YulBlock","src":"34888:46:56","statements":[{"nativeSrc":"34902:22:56","nodeType":"YulAssignment","src":"34902:22:56","value":{"arguments":[{"arguments":[{"name":"b","nativeSrc":"34921:1:56","nodeType":"YulIdentifier","src":"34921:1:56"}],"functionName":{"name":"iszero","nativeSrc":"34914:6:56","nodeType":"YulIdentifier","src":"34914:6:56"},"nativeSrc":"34914:9:56","nodeType":"YulFunctionCall","src":"34914:9:56"}],"functionName":{"name":"iszero","nativeSrc":"34907:6:56","nodeType":"YulIdentifier","src":"34907:6:56"},"nativeSrc":"34907:17:56","nodeType":"YulFunctionCall","src":"34907:17:56"},"variableNames":[{"name":"u","nativeSrc":"34902:1:56","nodeType":"YulIdentifier","src":"34902:1:56"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13295,"isOffset":false,"isSlot":false,"src":"34921:1:56","valueSize":1},{"declaration":13298,"isOffset":false,"isSlot":false,"src":"34902:1:56","valueSize":1}],"flags":["memory-safe"],"id":13300,"nodeType":"InlineAssembly","src":"34863:71:56"}]},"documentation":{"id":13293,"nodeType":"StructuredDocumentation","src":"34700:90:56","text":" @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."},"id":13302,"implemented":true,"kind":"function","modifiers":[],"name":"toUint","nameLocation":"34804:6:56","nodeType":"FunctionDefinition","parameters":{"id":13296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13295,"mutability":"mutable","name":"b","nameLocation":"34816:1:56","nodeType":"VariableDeclaration","scope":13302,"src":"34811:6:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13294,"name":"bool","nodeType":"ElementaryTypeName","src":"34811:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34810:8:56"},"returnParameters":{"id":13299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13298,"mutability":"mutable","name":"u","nameLocation":"34850:1:56","nodeType":"VariableDeclaration","scope":13302,"src":"34842:9:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13297,"name":"uint256","nodeType":"ElementaryTypeName","src":"34842:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34841:11:56"},"scope":13303,"src":"34795:145:56","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":13304,"src":"769:34173:56","usedErrors":[11548,11553,11560,11565],"usedEvents":[]}],"src":"192:34751:56"},"id":56},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","exportedSymbols":{"SafeCast":[13303],"SignedMath":[13447]},"id":13448,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":13305,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:57"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"./SafeCast.sol","id":13307,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13448,"sourceUnit":13304,"src":"135:40:57","symbolAliases":[{"foreign":{"id":13306,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"143:8:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SignedMath","contractDependencies":[],"contractKind":"library","documentation":{"id":13308,"nodeType":"StructuredDocumentation","src":"177:80:57","text":" @dev Standard signed math utilities missing in the Solidity language."},"fullyImplemented":true,"id":13447,"linearizedBaseContracts":[13447],"name":"SignedMath","nameLocation":"266:10:57","nodeType":"ContractDefinition","nodes":[{"body":{"id":13337,"nodeType":"Block","src":"746:215:57","statements":[{"id":13336,"nodeType":"UncheckedBlock","src":"756:199:57","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13320,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"894:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13321,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13313,"src":"900:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13322,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13315,"src":"904:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"900:5:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13324,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"899:7:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"arguments":[{"id":13329,"name":"condition","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13311,"src":"932:9:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":13327,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"916:8:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SafeCast_$13303_$","typeString":"type(library SafeCast)"}},"id":13328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"925:6:57","memberName":"toUint","nodeType":"MemberAccess","referencedDeclaration":13302,"src":"916:15:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$returns$_t_uint256_$","typeString":"function (bool) pure returns (uint256)"}},"id":13330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:26:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13326,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"909:6:57","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13325,"name":"int256","nodeType":"ElementaryTypeName","src":"909:6:57","typeDescriptions":{}}},"id":13331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"909:34:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"899:44:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13333,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"898:46:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"894:50:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":13319,"id":13335,"nodeType":"Return","src":"887:57:57"}]}]},"documentation":{"id":13309,"nodeType":"StructuredDocumentation","src":"283:374:57","text":" @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."},"id":13338,"implemented":true,"kind":"function","modifiers":[],"name":"ternary","nameLocation":"671:7:57","nodeType":"FunctionDefinition","parameters":{"id":13316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13311,"mutability":"mutable","name":"condition","nameLocation":"684:9:57","nodeType":"VariableDeclaration","scope":13338,"src":"679:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13310,"name":"bool","nodeType":"ElementaryTypeName","src":"679:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":13313,"mutability":"mutable","name":"a","nameLocation":"702:1:57","nodeType":"VariableDeclaration","scope":13338,"src":"695:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13312,"name":"int256","nodeType":"ElementaryTypeName","src":"695:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":13315,"mutability":"mutable","name":"b","nameLocation":"712:1:57","nodeType":"VariableDeclaration","scope":13338,"src":"705:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13314,"name":"int256","nodeType":"ElementaryTypeName","src":"705:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"678:36:57"},"returnParameters":{"id":13319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13318,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13338,"src":"738:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13317,"name":"int256","nodeType":"ElementaryTypeName","src":"738:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"737:8:57"},"scope":13447,"src":"662:299:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13356,"nodeType":"Block","src":"1102:44:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13349,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"1127:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":13350,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"1131:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1127:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13352,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13341,"src":"1134:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":13353,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13343,"src":"1137:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13348,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13338,"src":"1119:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$","typeString":"function (bool,int256,int256) pure returns (int256)"}},"id":13354,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1119:20:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":13347,"id":13355,"nodeType":"Return","src":"1112:27:57"}]},"documentation":{"id":13339,"nodeType":"StructuredDocumentation","src":"967:66:57","text":" @dev Returns the largest of two signed numbers."},"id":13357,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"1047:3:57","nodeType":"FunctionDefinition","parameters":{"id":13344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13341,"mutability":"mutable","name":"a","nameLocation":"1058:1:57","nodeType":"VariableDeclaration","scope":13357,"src":"1051:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13340,"name":"int256","nodeType":"ElementaryTypeName","src":"1051:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":13343,"mutability":"mutable","name":"b","nameLocation":"1068:1:57","nodeType":"VariableDeclaration","scope":13357,"src":"1061:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13342,"name":"int256","nodeType":"ElementaryTypeName","src":"1061:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1050:20:57"},"returnParameters":{"id":13347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13357,"src":"1094:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13345,"name":"int256","nodeType":"ElementaryTypeName","src":"1094:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1093:8:57"},"scope":13447,"src":"1038:108:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13375,"nodeType":"Block","src":"1288:44:57","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13368,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13360,"src":"1313:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13369,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13362,"src":"1317:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1313:5:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":13371,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13360,"src":"1320:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":13372,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13362,"src":"1323:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13367,"name":"ternary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13338,"src":"1305:7:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$","typeString":"function (bool,int256,int256) pure returns (int256)"}},"id":13373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:20:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":13366,"id":13374,"nodeType":"Return","src":"1298:27:57"}]},"documentation":{"id":13358,"nodeType":"StructuredDocumentation","src":"1152:67:57","text":" @dev Returns the smallest of two signed numbers."},"id":13376,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"1233:3:57","nodeType":"FunctionDefinition","parameters":{"id":13363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13360,"mutability":"mutable","name":"a","nameLocation":"1244:1:57","nodeType":"VariableDeclaration","scope":13376,"src":"1237:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13359,"name":"int256","nodeType":"ElementaryTypeName","src":"1237:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":13362,"mutability":"mutable","name":"b","nameLocation":"1254:1:57","nodeType":"VariableDeclaration","scope":13376,"src":"1247:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13361,"name":"int256","nodeType":"ElementaryTypeName","src":"1247:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1236:20:57"},"returnParameters":{"id":13366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13365,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13376,"src":"1280:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13364,"name":"int256","nodeType":"ElementaryTypeName","src":"1280:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1279:8:57"},"scope":13447,"src":"1224:108:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13419,"nodeType":"Block","src":"1537:162:57","statements":[{"assignments":[13387],"declarations":[{"constant":false,"id":13387,"mutability":"mutable","name":"x","nameLocation":"1606:1:57","nodeType":"VariableDeclaration","scope":13419,"src":"1599:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13386,"name":"int256","nodeType":"ElementaryTypeName","src":"1599:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13400,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13388,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13379,"src":"1611:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":13389,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13381,"src":"1615:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1611:5:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13391,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1610:7:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13392,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13379,"src":"1622:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13393,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13381,"src":"1626:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1622:5:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13395,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1621:7:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":13396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1632:1:57","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1621:12:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13398,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1620:14:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1610:24:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"1599:35:57"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13401,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13387,"src":"1651:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13406,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13387,"src":"1671:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1663:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13404,"name":"uint256","nodeType":"ElementaryTypeName","src":"1663:7:57","typeDescriptions":{}}},"id":13407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1663:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":13408,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:3:57","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"1663:17:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1656:6:57","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13402,"name":"int256","nodeType":"ElementaryTypeName","src":"1656:6:57","typeDescriptions":{}}},"id":13410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1656:25:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13411,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13379,"src":"1685:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13412,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13381,"src":"1689:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1685:5:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13414,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1684:7:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1656:35:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13416,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1655:37:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"1651:41:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":13385,"id":13418,"nodeType":"Return","src":"1644:48:57"}]},"documentation":{"id":13377,"nodeType":"StructuredDocumentation","src":"1338:126:57","text":" @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."},"id":13420,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"1478:7:57","nodeType":"FunctionDefinition","parameters":{"id":13382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13379,"mutability":"mutable","name":"a","nameLocation":"1493:1:57","nodeType":"VariableDeclaration","scope":13420,"src":"1486:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13378,"name":"int256","nodeType":"ElementaryTypeName","src":"1486:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":13381,"mutability":"mutable","name":"b","nameLocation":"1503:1:57","nodeType":"VariableDeclaration","scope":13420,"src":"1496:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13380,"name":"int256","nodeType":"ElementaryTypeName","src":"1496:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1485:20:57"},"returnParameters":{"id":13385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13384,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13420,"src":"1529:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13383,"name":"int256","nodeType":"ElementaryTypeName","src":"1529:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1528:8:57"},"scope":13447,"src":"1469:230:57","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":13445,"nodeType":"Block","src":"1843:767:57","statements":[{"id":13444,"nodeType":"UncheckedBlock","src":"1853:751:57","statements":[{"assignments":[13429],"declarations":[{"constant":false,"id":13429,"mutability":"mutable","name":"mask","nameLocation":"2424:4:57","nodeType":"VariableDeclaration","scope":13444,"src":"2417:11:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13428,"name":"int256","nodeType":"ElementaryTypeName","src":"2417:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13433,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13430,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13423,"src":"2431:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":13431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2436:3:57","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"2431:8:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"2417:22:57"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13436,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13423,"src":"2576:1:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":13437,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13429,"src":"2580:4:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2576:8:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":13439,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2575:10:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":13440,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13429,"src":"2588:4:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2575:17:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2567:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13434,"name":"uint256","nodeType":"ElementaryTypeName","src":"2567:7:57","typeDescriptions":{}}},"id":13442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2567:26:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13427,"id":13443,"nodeType":"Return","src":"2560:33:57"}]}]},"documentation":{"id":13421,"nodeType":"StructuredDocumentation","src":"1705:78:57","text":" @dev Returns the absolute unsigned value of a signed value."},"id":13446,"implemented":true,"kind":"function","modifiers":[],"name":"abs","nameLocation":"1797:3:57","nodeType":"FunctionDefinition","parameters":{"id":13424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13423,"mutability":"mutable","name":"n","nameLocation":"1808:1:57","nodeType":"VariableDeclaration","scope":13446,"src":"1801:8:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13422,"name":"int256","nodeType":"ElementaryTypeName","src":"1801:6:57","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1800:10:57"},"returnParameters":{"id":13427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13446,"src":"1834:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13425,"name":"uint256","nodeType":"ElementaryTypeName","src":"1834:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1833:9:57"},"scope":13447,"src":"1788:822:57","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":13448,"src":"258:2354:57","usedErrors":[],"usedEvents":[]}],"src":"109:2504:57"},"id":57},"contracts/ReClammPool.sol":{"ast":{"absolutePath":"contracts/ReClammPool.sol","exportedSymbols":{"AddLiquidityKind":[2545],"AddLiquidityParams":[2561],"AfterSwapParams":[2539],"BalancerPoolToken":[6587],"BaseHooks":[6830],"BasePoolAuthentication":[2645],"BufferWrapOrUnwrapParams":[2600],"FEE_BITLENGTH":[2603],"FEE_SCALING_FACTOR":[2606],"FixedPoint":[4818],"GradualValueChange":[3320],"HookFlags":[2365],"HooksConfig":[2389],"IBasePool":[165],"IERC20":[7403],"IERC20Metadata":[7429],"IERC4626":[7300],"IHooks":[441],"IRateProvider":[89],"IReClammPool":[16616],"ISwapFeePercentageBounds":[795],"IUnbalancedLiquidityInvariantRatioBounds":[811],"IVault":[849],"IVaultErrors":[1506],"LiquidityManagement":[2318],"MAX_FEE_PERCENTAGE":[2609],"PoolConfig":[2343],"PoolConfigBits":[2320],"PoolData":[2467],"PoolInfo":[3130],"PoolRoleAccounts":[2415],"PoolSwapParams":[2510],"PriceRatioState":[16635],"ReClammMath":[17701],"ReClammPool":[16089],"ReClammPoolDynamicData":[16378],"ReClammPoolImmutableData":[16337],"ReClammPoolParams":[16300],"RemoveLiquidityKind":[2566],"RemoveLiquidityParams":[2582],"Rounding":[2470],"SafeCast":[13303],"ScalingHelpers":[4479],"SwapKind":[2473],"SwapState":[2399],"TokenConfig":[2432],"TokenInfo":[2442],"TokenType":[2419],"VaultState":[2407],"VaultSwapParams":[2492],"Version":[4519],"WrappingDirection":[2585],"a":[16638],"b":[16641]},"id":16090,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":13449,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"82:24:58"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":13451,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":7430,"src":"108:99:58","symbolAliases":[{"foreign":{"id":13450,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"117:14:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":13453,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":13304,"src":"208:75:58","symbolAliases":[{"foreign":{"id":13452,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"217:8:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":13455,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":7404,"src":"284:72:58","symbolAliases":[{"foreign":{"id":13454,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"293:6:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","id":13457,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":796,"src":"358:117:58","symbolAliases":[{"foreign":{"id":13456,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":795,"src":"367:24:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","id":13458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":812,"src":"476:99:58","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":13460,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":1507,"src":"576:93:58","symbolAliases":[{"foreign":{"id":13459,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"585:12:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":13462,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":166,"src":"670:87:58","symbolAliases":[{"foreign":{"id":13461,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":165,"src":"679:9:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":13464,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":850,"src":"758:81:58","symbolAliases":[{"foreign":{"id":13463,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"767:6:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":13466,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":442,"src":"840:81:58","symbolAliases":[{"foreign":{"id":13465,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":441,"src":"849:6:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":13467,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":2610,"src":"922:69:58","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","id":13469,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":2646,"src":"993:107:58","symbolAliases":[{"foreign":{"id":13468,"name":"BasePoolAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2645,"src":"1002:22:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol","file":"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol","id":13471,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":3321,"src":"1101:106:58","symbolAliases":[{"foreign":{"id":13470,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3320,"src":"1110:18:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":13473,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":4480,"src":"1208:103:58","symbolAliases":[{"foreign":{"id":13472,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4479,"src":"1217:14:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":13475,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":4819,"src":"1312:92:58","symbolAliases":[{"foreign":{"id":13474,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"1321:10:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","file":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","id":13477,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":6588,"src":"1405:92:58","symbolAliases":[{"foreign":{"id":13476,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6587,"src":"1414:17:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":13479,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":4520,"src":"1498:89:58","symbolAliases":[{"foreign":{"id":13478,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"1507:7:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","file":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","id":13481,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":3131,"src":"1588:79:58","symbolAliases":[{"foreign":{"id":13480,"name":"PoolInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"1597:8:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","file":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","id":13483,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":6831,"src":"1668:76:58","symbolAliases":[{"foreign":{"id":13482,"name":"BaseHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6830,"src":"1677:9:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/ReClammMath.sol","file":"./lib/ReClammMath.sol","id":13488,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":17702,"src":"1746:75:58","symbolAliases":[{"foreign":{"id":13484,"name":"PriceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16635,"src":"1755:15:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13485,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"1772:11:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13486,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"1785:1:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13487,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"1788:1:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReClammPool.sol","file":"./interfaces/IReClammPool.sol","id":13493,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16090,"sourceUnit":16617,"src":"1822:146:58","symbolAliases":[{"foreign":{"id":13489,"name":"ReClammPoolParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16300,"src":"1835:17:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13490,"name":"ReClammPoolDynamicData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16378,"src":"1858:22:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13491,"name":"ReClammPoolImmutableData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16337,"src":"1886:24:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13492,"name":"IReClammPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16616,"src":"1916:12:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":13494,"name":"IReClammPool","nameLocations":["1994:12:58"],"nodeType":"IdentifierPath","referencedDeclaration":16616,"src":"1994:12:58"},"id":13495,"nodeType":"InheritanceSpecifier","src":"1994:12:58"},{"baseName":{"id":13496,"name":"BalancerPoolToken","nameLocations":["2008:17:58"],"nodeType":"IdentifierPath","referencedDeclaration":6587,"src":"2008:17:58"},"id":13497,"nodeType":"InheritanceSpecifier","src":"2008:17:58"},{"baseName":{"id":13498,"name":"PoolInfo","nameLocations":["2027:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":3130,"src":"2027:8:58"},"id":13499,"nodeType":"InheritanceSpecifier","src":"2027:8:58"},{"baseName":{"id":13500,"name":"BasePoolAuthentication","nameLocations":["2037:22:58"],"nodeType":"IdentifierPath","referencedDeclaration":2645,"src":"2037:22:58"},"id":13501,"nodeType":"InheritanceSpecifier","src":"2037:22:58"},{"baseName":{"id":13502,"name":"Version","nameLocations":["2061:7:58"],"nodeType":"IdentifierPath","referencedDeclaration":4519,"src":"2061:7:58"},"id":13503,"nodeType":"InheritanceSpecifier","src":"2061:7:58"},{"baseName":{"id":13504,"name":"BaseHooks","nameLocations":["2070:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":6830,"src":"2070:9:58"},"id":13505,"nodeType":"InheritanceSpecifier","src":"2070:9:58"}],"canonicalName":"ReClammPool","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":16089,"internalFunctionIDs":{"4563":1,"4580":2,"4600":3},"linearizedBaseContracts":[16089,6830,441,4519,99,2645,7022,3400,69,3130,54,6587,7130,9920,9932,7654,9822,7325,89,7465,7429,7403,16616,165,811,795],"name":"ReClammPool","nameLocation":"1979:11:58","nodeType":"ContractDefinition","nodes":[{"global":false,"id":13508,"libraryName":{"id":13506,"name":"FixedPoint","nameLocations":["2092:10:58"],"nodeType":"IdentifierPath","referencedDeclaration":4818,"src":"2092:10:58"},"nodeType":"UsingForDirective","src":"2086:29:58","typeName":{"id":13507,"name":"uint256","nodeType":"ElementaryTypeName","src":"2107:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":13511,"libraryName":{"id":13509,"name":"ScalingHelpers","nameLocations":["2126:14:58"],"nodeType":"IdentifierPath","referencedDeclaration":4479,"src":"2126:14:58"},"nodeType":"UsingForDirective","src":"2120:33:58","typeName":{"id":13510,"name":"uint256","nodeType":"ElementaryTypeName","src":"2145:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":13513,"libraryName":{"id":13512,"name":"SafeCast","nameLocations":["2164:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":13303,"src":"2164:8:58"},"nodeType":"UsingForDirective","src":"2158:21:58"},{"global":false,"id":13515,"libraryName":{"id":13514,"name":"ReClammMath","nameLocations":["2190:11:58"],"nodeType":"IdentifierPath","referencedDeclaration":17701,"src":"2190:11:58"},"nodeType":"UsingForDirective","src":"2184:24:58"},{"constant":true,"id":13518,"mutability":"constant","name":"_MIN_SWAP_FEE_PERCENTAGE","nameLocation":"2670:24:58","nodeType":"VariableDeclaration","scope":16089,"src":"2645:60:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13516,"name":"uint256","nodeType":"ElementaryTypeName","src":"2645:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e303031653136","id":13517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2697:8:58","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000_by_1","typeString":"int_const 10000000000000"},"value":"0.001e16"},"visibility":"private"},{"constant":true,"id":13521,"mutability":"constant","name":"_MAX_SWAP_FEE_PERCENTAGE","nameLocation":"2747:24:58","nodeType":"VariableDeclaration","scope":16089,"src":"2721:58:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13519,"name":"uint256","nodeType":"ElementaryTypeName","src":"2721:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130653136","id":13520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2774:5:58","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"10e16"},"visibility":"internal"},{"constant":true,"id":13524,"mutability":"constant","name":"_MAX_DAILY_PRICE_SHIFT_EXPONENT","nameLocation":"3205:31:58","nodeType":"VariableDeclaration","scope":16089,"src":"3179:66:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13522,"name":"uint256","nodeType":"ElementaryTypeName","src":"3179:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"333030653136","id":13523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3239:6:58","typeDescriptions":{"typeIdentifier":"t_rational_3000000000000000000_by_1","typeString":"int_const 3000000000000000000"},"value":"300e16"},"visibility":"internal"},{"constant":true,"id":13527,"mutability":"constant","name":"_MIN_PRICE_RATIO_UPDATE_DURATION","nameLocation":"3525:32:58","nodeType":"VariableDeclaration","scope":16089,"src":"3499:67:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13525,"name":"uint256","nodeType":"ElementaryTypeName","src":"3499:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":13526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3560:6:58","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_86400_by_1","typeString":"int_const 86400"},"value":"1"},"visibility":"internal"},{"constant":false,"id":13529,"mutability":"immutable","name":"_MAX_DAILY_PRICE_RATIO_UPDATE_RATE","nameLocation":"3599:34:58","nodeType":"VariableDeclaration","scope":16089,"src":"3572:61:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13528,"name":"uint256","nodeType":"ElementaryTypeName","src":"3572:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":13532,"mutability":"constant","name":"_MIN_PRICE_RATIO_DELTA","nameLocation":"3735:22:58","nodeType":"VariableDeclaration","scope":16089,"src":"3709:54:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13530,"name":"uint256","nodeType":"ElementaryTypeName","src":"3709:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316536","id":13531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3760:3:58","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1e6"},"visibility":"internal"},{"constant":true,"id":13535,"mutability":"constant","name":"_MAX_TOKEN_DECIMALS","nameLocation":"3796:19:58","nodeType":"VariableDeclaration","scope":16089,"src":"3770:50:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13533,"name":"uint256","nodeType":"ElementaryTypeName","src":"3770:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3138","id":13534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3818:2:58","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"internal"},{"constant":true,"id":13538,"mutability":"constant","name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nameLocation":"4020:34:58","nodeType":"VariableDeclaration","scope":16089,"src":"3994:70:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13536,"name":"uint256","nodeType":"ElementaryTypeName","src":"3994:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e3031653136","id":13537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4057:7:58","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000_by_1","typeString":"int_const 100000000000000"},"value":"0.01e16"},"visibility":"internal"},{"constant":false,"id":13540,"mutability":"immutable","name":"_INITIAL_MIN_PRICE","nameLocation":"4250:18:58","nodeType":"VariableDeclaration","scope":16089,"src":"4224:44:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13539,"name":"uint256","nodeType":"ElementaryTypeName","src":"4224:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":13542,"mutability":"immutable","name":"_INITIAL_MAX_PRICE","nameLocation":"4300:18:58","nodeType":"VariableDeclaration","scope":16089,"src":"4274:44:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13541,"name":"uint256","nodeType":"ElementaryTypeName","src":"4274:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":13544,"mutability":"immutable","name":"_INITIAL_TARGET_PRICE","nameLocation":"4350:21:58","nodeType":"VariableDeclaration","scope":16089,"src":"4324:47:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13543,"name":"uint256","nodeType":"ElementaryTypeName","src":"4324:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":13546,"mutability":"immutable","name":"_INITIAL_DAILY_PRICE_SHIFT_EXPONENT","nameLocation":"4403:35:58","nodeType":"VariableDeclaration","scope":16089,"src":"4377:61:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13545,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":13548,"mutability":"immutable","name":"_INITIAL_CENTEREDNESS_MARGIN","nameLocation":"4470:28:58","nodeType":"VariableDeclaration","scope":16089,"src":"4444:54:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13547,"name":"uint256","nodeType":"ElementaryTypeName","src":"4444:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":13550,"mutability":"immutable","name":"_TOKEN_A_PRICE_INCLUDES_RATE","nameLocation":"5564:28:58","nodeType":"VariableDeclaration","scope":16089,"src":"5541:51:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13549,"name":"bool","nodeType":"ElementaryTypeName","src":"5541:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":13552,"mutability":"immutable","name":"_TOKEN_B_PRICE_INCLUDES_RATE","nameLocation":"5621:28:58","nodeType":"VariableDeclaration","scope":16089,"src":"5598:51:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13551,"name":"bool","nodeType":"ElementaryTypeName","src":"5598:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":13555,"mutability":"mutable","name":"_priceRatioState","nameLocation":"5681:16:58","nodeType":"VariableDeclaration","scope":16089,"src":"5656:41:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState"},"typeName":{"id":13554,"nodeType":"UserDefinedTypeName","pathNode":{"id":13553,"name":"PriceRatioState","nameLocations":["5656:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"5656:15:58"},"referencedDeclaration":16635,"src":"5656:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"},{"constant":false,"id":13557,"mutability":"mutable","name":"_lastTimestamp","nameLocation":"5767:14:58","nodeType":"VariableDeclaration","scope":16089,"src":"5751:30:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":13556,"name":"uint32","nodeType":"ElementaryTypeName","src":"5751:6:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":13559,"mutability":"mutable","name":"_dailyPriceShiftBase","nameLocation":"5925:20:58","nodeType":"VariableDeclaration","scope":16089,"src":"5908:37:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":13558,"name":"uint128","nodeType":"ElementaryTypeName","src":"5908:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":13561,"mutability":"mutable","name":"_centerednessMargin","nameLocation":"6085:19:58","nodeType":"VariableDeclaration","scope":16089,"src":"6069:35:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":13560,"name":"uint64","nodeType":"ElementaryTypeName","src":"6069:6:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":13563,"mutability":"mutable","name":"_lastVirtualBalanceA","nameLocation":"6198:20:58","nodeType":"VariableDeclaration","scope":16089,"src":"6181:37:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":13562,"name":"uint128","nodeType":"ElementaryTypeName","src":"6181:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"constant":false,"id":13565,"mutability":"mutable","name":"_lastVirtualBalanceB","nameLocation":"6241:20:58","nodeType":"VariableDeclaration","scope":16089,"src":"6224:37:58","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":13564,"name":"uint128","nodeType":"ElementaryTypeName","src":"6224:7:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"body":{"id":13571,"nodeType":"Block","src":"6406:50:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13567,"name":"_ensureVaultIsLocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13584,"src":"6416:20:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":13568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6416:22:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13569,"nodeType":"ExpressionStatement","src":"6416:22:58"},{"id":13570,"nodeType":"PlaceholderStatement","src":"6448:1:58"}]},"id":13572,"name":"onlyWhenVaultIsLocked","nameLocation":"6382:21:58","nodeType":"ModifierDefinition","parameters":{"id":13566,"nodeType":"ParameterList","parameters":[],"src":"6403:2:58"},"src":"6373:83:58","virtual":false,"visibility":"internal"},{"body":{"id":13583,"nodeType":"Block","src":"6508:91:58","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13575,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"6522:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":13576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6529:10:58","memberName":"isUnlocked","nodeType":"MemberAccess","referencedDeclaration":1780,"src":"6522:17:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bool_$","typeString":"function () view external returns (bool)"}},"id":13577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6522:19:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13582,"nodeType":"IfStatement","src":"6518:75:58","trueBody":{"id":13581,"nodeType":"Block","src":"6543:50:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13578,"name":"VaultIsNotLocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16424,"src":"6564:16:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13579,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6564:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13580,"nodeType":"RevertStatement","src":"6557:25:58"}]}}]},"id":13584,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultIsLocked","nameLocation":"6471:20:58","nodeType":"FunctionDefinition","parameters":{"id":13573,"nodeType":"ParameterList","parameters":[],"src":"6491:2:58"},"returnParameters":{"id":13574,"nodeType":"ParameterList","parameters":[],"src":"6508:0:58"},"scope":16089,"src":"6462:137:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13590,"nodeType":"Block","src":"6636:55:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13586,"name":"_ensureVaultIsInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13609,"src":"6646:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":13587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6646:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13588,"nodeType":"ExpressionStatement","src":"6646:27:58"},{"id":13589,"nodeType":"PlaceholderStatement","src":"6683:1:58"}]},"id":13591,"name":"onlyWhenInitialized","nameLocation":"6614:19:58","nodeType":"ModifierDefinition","parameters":{"id":13585,"nodeType":"ParameterList","parameters":[],"src":"6633:2:58"},"src":"6605:86:58","virtual":false,"visibility":"internal"},{"body":{"id":13608,"nodeType":"Block","src":"6748:122:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":13598,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6795:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":13597,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6787:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13596,"name":"address","nodeType":"ElementaryTypeName","src":"6787:7:58","typeDescriptions":{}}},"id":13599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6787:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13594,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"6762:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":13595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6769:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":1873,"src":"6762:24:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":13600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6762:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6805:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6762:48:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13607,"nodeType":"IfStatement","src":"6758:106:58","trueBody":{"id":13606,"nodeType":"Block","src":"6812:52:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13603,"name":"PoolNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16456,"src":"6833:18:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6833:20:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13605,"nodeType":"RevertStatement","src":"6826:27:58"}]}}]},"id":13609,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultIsInitialized","nameLocation":"6706:25:58","nodeType":"FunctionDefinition","parameters":{"id":13592,"nodeType":"ParameterList","parameters":[],"src":"6731:2:58"},"returnParameters":{"id":13593,"nodeType":"ParameterList","parameters":[],"src":"6748:0:58"},"scope":16089,"src":"6697:173:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":13618,"nodeType":"Block","src":"6909:98:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13611,"name":"_ensurePoolWithinTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15912,"src":"6919:28:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":13612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6919:30:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13613,"nodeType":"ExpressionStatement","src":"6919:30:58"},{"id":13614,"nodeType":"PlaceholderStatement","src":"6959:1:58"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13615,"name":"_ensurePoolWithinTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15912,"src":"6970:28:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":13616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6970:30:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13617,"nodeType":"ExpressionStatement","src":"6970:30:58"}]},"id":13619,"name":"onlyWithinTargetRange","nameLocation":"6885:21:58","nodeType":"ModifierDefinition","parameters":{"id":13610,"nodeType":"ParameterList","parameters":[],"src":"6906:2:58"},"src":"6876:131:58","virtual":false,"visibility":"internal"},{"body":{"id":13727,"nodeType":"Block","src":"7265:1629:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13647,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7292:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7299:15:58","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":16291,"src":"7292:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7318:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7292:27:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13651,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7335:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13652,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7342:15:58","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":16293,"src":"7335:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7361:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7335:27:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7292:70:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13656,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7378:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7385:18:58","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":16295,"src":"7378:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7407:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7378:30:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7292:116:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13661,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7424:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7431:18:58","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":16295,"src":"7424:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13663,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7452:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7459:15:58","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":16291,"src":"7452:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7424:50:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7292:182:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13667,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7490:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13668,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7497:18:58","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":16295,"src":"7490:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":13669,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7518:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7525:15:58","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":16293,"src":"7518:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7490:50:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7292:248:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13673,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7556:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13674,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7563:15:58","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":16291,"src":"7556:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":13675,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7582:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13676,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7589:15:58","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":16293,"src":"7582:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7556:48:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7292:312:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13683,"nodeType":"IfStatement","src":"7275:576:58","trueBody":{"id":13682,"nodeType":"Block","src":"7615:236:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13679,"name":"InvalidInitialPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16433,"src":"7819:19:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7819:21:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13681,"nodeType":"RevertStatement","src":"7812:28:58"}]}},{"expression":{"id":13687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13684,"name":"_INITIAL_MIN_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"7949:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13685,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7970:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7977:15:58","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":16291,"src":"7970:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7949:43:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13688,"nodeType":"ExpressionStatement","src":"7949:43:58"},{"expression":{"id":13692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13689,"name":"_INITIAL_MAX_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"8002:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13690,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8023:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8030:15:58","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":16293,"src":"8023:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8002:43:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13693,"nodeType":"ExpressionStatement","src":"8002:43:58"},{"expression":{"id":13697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13694,"name":"_INITIAL_TARGET_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13544,"src":"8055:21:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13695,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8079:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8086:18:58","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":16295,"src":"8079:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8055:49:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13698,"nodeType":"ExpressionStatement","src":"8055:49:58"},{"expression":{"id":13702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13699,"name":"_INITIAL_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13546,"src":"8115:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13700,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8153:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13701,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8160:23:58","memberName":"dailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":16287,"src":"8153:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8115:68:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13703,"nodeType":"ExpressionStatement","src":"8115:68:58"},{"expression":{"id":13707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13704,"name":"_INITIAL_CENTEREDNESS_MARGIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"8193:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13705,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8224:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13706,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8231:18:58","memberName":"centerednessMargin","nodeType":"MemberAccess","referencedDeclaration":16289,"src":"8224:25:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"8193:56:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13708,"nodeType":"ExpressionStatement","src":"8193:56:58"},{"expression":{"id":13712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13709,"name":"_TOKEN_A_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"8260:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13710,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8291:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13711,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8298:23:58","memberName":"tokenAPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":16297,"src":"8291:30:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8260:61:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13713,"nodeType":"ExpressionStatement","src":"8260:61:58"},{"expression":{"id":13717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13714,"name":"_TOKEN_B_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13552,"src":"8331:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13715,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"8362:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8369:23:58","memberName":"tokenBPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":16299,"src":"8362:30:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8331:61:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13718,"nodeType":"ExpressionStatement","src":"8331:61:58"},{"expression":{"id":13725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13719,"name":"_MAX_DAILY_PRICE_RATIO_UPDATE_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13529,"src":"8795:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32653138","id":13722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8849:4:58","typeDescriptions":{"typeIdentifier":"t_rational_2000000000000000000_by_1","typeString":"int_const 2000000000000000000"},"value":"2e18"},{"id":13723,"name":"_MAX_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"8855:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2000000000000000000_by_1","typeString":"int_const 2000000000000000000"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13720,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"8832:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":13721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8843:5:58","memberName":"powUp","nodeType":"MemberAccess","referencedDeclaration":4807,"src":"8832:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":13724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8832:55:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8795:92:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13726,"nodeType":"ExpressionStatement","src":"8795:92:58"}]},"id":13728,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":13628,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13625,"src":"7120:5:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},{"expression":{"id":13629,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7127:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7134:4:58","memberName":"name","nodeType":"MemberAccess","referencedDeclaration":16281,"src":"7127:11:58","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":13631,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7140:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13632,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7147:6:58","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":16283,"src":"7140:13:58","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":13633,"kind":"baseConstructorSpecifier","modifierName":{"id":13627,"name":"BalancerPoolToken","nameLocations":["7102:17:58"],"nodeType":"IdentifierPath","referencedDeclaration":6587,"src":"7102:17:58"},"nodeType":"ModifierInvocation","src":"7102:52:58"},{"arguments":[{"id":13635,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13625,"src":"7172:5:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"id":13636,"kind":"baseConstructorSpecifier","modifierName":{"id":13634,"name":"PoolInfo","nameLocations":["7163:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":3130,"src":"7163:8:58"},"nodeType":"ModifierInvocation","src":"7163:15:58"},{"arguments":[{"id":13638,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13625,"src":"7210:5:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},{"expression":{"id":13639,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7217:3:58","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":13640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7221:6:58","memberName":"sender","nodeType":"MemberAccess","src":"7217:10:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13641,"kind":"baseConstructorSpecifier","modifierName":{"id":13637,"name":"BasePoolAuthentication","nameLocations":["7187:22:58"],"nodeType":"IdentifierPath","referencedDeclaration":2645,"src":"7187:22:58"},"nodeType":"ModifierInvocation","src":"7187:41:58"},{"arguments":[{"expression":{"id":13643,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13622,"src":"7245:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},"id":13644,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7252:7:58","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":16285,"src":"7245:14:58","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":13645,"kind":"baseConstructorSpecifier","modifierName":{"id":13642,"name":"Version","nameLocations":["7237:7:58"],"nodeType":"IdentifierPath","referencedDeclaration":4519,"src":"7237:7:58"},"nodeType":"ModifierInvocation","src":"7237:23:58"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":13626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13622,"mutability":"mutable","name":"params","nameLocation":"7059:6:58","nodeType":"VariableDeclaration","scope":13728,"src":"7034:31:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams"},"typeName":{"id":13621,"nodeType":"UserDefinedTypeName","pathNode":{"id":13620,"name":"ReClammPoolParams","nameLocations":["7034:17:58"],"nodeType":"IdentifierPath","referencedDeclaration":16300,"src":"7034:17:58"},"referencedDeclaration":16300,"src":"7034:17:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_storage_ptr","typeString":"struct ReClammPoolParams"}},"visibility":"internal"},{"constant":false,"id":13625,"mutability":"mutable","name":"vault","nameLocation":"7082:5:58","nodeType":"VariableDeclaration","scope":13728,"src":"7075:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":13624,"nodeType":"UserDefinedTypeName","pathNode":{"id":13623,"name":"IVault","nameLocations":["7075:6:58"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"7075:6:58"},"referencedDeclaration":849,"src":"7075:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"}],"src":"7024:69:58"},"returnParameters":{"id":13646,"nodeType":"ParameterList","parameters":[],"src":"7265:0:58"},"scope":16089,"src":"7013:1881:58","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[142],"body":{"id":13752,"nodeType":"Block","src":"9205:355:58","statements":[{"expression":{"arguments":[{"id":13742,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13732,"src":"9280:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13743,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"9314:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":13744,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"9352:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":13745,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"9390:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":13746,"name":"_lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"9428:14:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":13747,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"9460:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":13748,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"9497:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},{"id":13749,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13735,"src":"9531:8:58","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"},{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}],"expression":{"id":13740,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"9234:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":13741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9246:16:58","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":16707,"src":"9234:28:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint64_$_t_struct$_PriceRatioState_$16635_storage_ptr_$_t_enum$_Rounding_$2470_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint32,uint64,struct PriceRatioState storage pointer,enum Rounding) view returns (uint256)"}},"id":13750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9234:319:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13739,"id":13751,"nodeType":"Return","src":"9215:338:58"}]},"documentation":{"id":13729,"nodeType":"StructuredDocumentation","src":"9065:25:58","text":"@inheritdoc IBasePool"},"functionSelector":"984de9e8","id":13753,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"9104:16:58","nodeType":"FunctionDefinition","parameters":{"id":13736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13732,"mutability":"mutable","name":"balancesScaled18","nameLocation":"9138:16:58","nodeType":"VariableDeclaration","scope":13753,"src":"9121:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13730,"name":"uint256","nodeType":"ElementaryTypeName","src":"9121:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13731,"nodeType":"ArrayTypeName","src":"9121:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13735,"mutability":"mutable","name":"rounding","nameLocation":"9165:8:58","nodeType":"VariableDeclaration","scope":13753,"src":"9156:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"},"typeName":{"id":13734,"nodeType":"UserDefinedTypeName","pathNode":{"id":13733,"name":"Rounding","nameLocations":["9156:8:58"],"nodeType":"IdentifierPath","referencedDeclaration":2470,"src":"9156:8:58"},"referencedDeclaration":2470,"src":"9156:8:58","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"9120:54:58"},"returnParameters":{"id":13739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13738,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13753,"src":"9196:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13737,"name":"uint256","nodeType":"ElementaryTypeName","src":"9196:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9195:9:58"},"scope":16089,"src":"9095:465:58","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[155],"body":{"id":13769,"nodeType":"Block","src":"9688:154:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13766,"name":"NotImplemented","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16418,"src":"9819:14:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9819:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13768,"nodeType":"RevertStatement","src":"9812:23:58"}]},"documentation":{"id":13754,"nodeType":"StructuredDocumentation","src":"9566:25:58","text":"@inheritdoc IBasePool"},"functionSelector":"16a0b3e0","id":13770,"implemented":true,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"9605:14:58","nodeType":"FunctionDefinition","parameters":{"id":13762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13770,"src":"9620:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13755,"name":"uint256","nodeType":"ElementaryTypeName","src":"9620:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13756,"nodeType":"ArrayTypeName","src":"9620:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13759,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13770,"src":"9638:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13758,"name":"uint256","nodeType":"ElementaryTypeName","src":"9638:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13770,"src":"9647:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13760,"name":"uint256","nodeType":"ElementaryTypeName","src":"9647:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9619:36:58"},"returnParameters":{"id":13765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13764,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13770,"src":"9679:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9679:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9678:9:58"},"scope":16089,"src":"9596:246:58","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[164],"body":{"id":13843,"nodeType":"Block","src":"9993:1071:58","statements":[{"assignments":[13782,13784,13786],"declarations":[{"constant":false,"id":13782,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"10012:22:58","nodeType":"VariableDeclaration","scope":13843,"src":"10004:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13781,"name":"uint256","nodeType":"ElementaryTypeName","src":"10004:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13784,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"10044:22:58","nodeType":"VariableDeclaration","scope":13843,"src":"10036:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10036:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13786,"mutability":"mutable","name":"changed","nameLocation":"10073:7:58","nodeType":"VariableDeclaration","scope":13843,"src":"10068:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13785,"name":"bool","nodeType":"ElementaryTypeName","src":"10068:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":13791,"initialValue":{"arguments":[{"expression":{"id":13788,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10128:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13789,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10136:16:58","memberName":"balancesScaled18","nodeType":"MemberAccess","referencedDeclaration":2501,"src":"10128:24:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":13787,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"10084:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":13790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10084:78:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"10003:159:58"},{"condition":{"id":13792,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13786,"src":"10177:7:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13799,"nodeType":"IfStatement","src":"10173:109:58","trueBody":{"id":13798,"nodeType":"Block","src":"10186:96:58","statements":[{"expression":{"arguments":[{"id":13794,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13782,"src":"10224:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13795,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"10248:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13793,"name":"_setLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"10200:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":13796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10200:71:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13797,"nodeType":"ExpressionStatement","src":"10200:71:58"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13800,"name":"_updateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"10292:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":13801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10292:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13802,"nodeType":"ExpressionStatement","src":"10292:18:58"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"},"id":13807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13803,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10359:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10367:4:58","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2496,"src":"10359:12:58","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13805,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2473,"src":"10375:8:58","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$2473_$","typeString":"type(enum SwapKind)"}},"id":13806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10384:8:58","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":2471,"src":"10375:17:58","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2473","typeString":"enum SwapKind"}},"src":"10359:33:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13841,"nodeType":"Block","src":"10729:329:58","statements":[{"expression":{"id":13839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13825,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"10743:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13828,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10817:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13829,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10825:16:58","memberName":"balancesScaled18","nodeType":"MemberAccess","referencedDeclaration":2501,"src":"10817:24:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13830,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13782,"src":"10859:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13831,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"10899:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13832,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10939:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13833,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10947:7:58","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2503,"src":"10939:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13834,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10972:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10980:8:58","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2505,"src":"10972:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13836,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"11006:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11014:19:58","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2498,"src":"11006:27:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13826,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"10770:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":13827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10782:17:58","memberName":"computeInGivenOut","nodeType":"MemberAccess","referencedDeclaration":16889,"src":"10770:29:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":13838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10770:277:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10743:304:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13840,"nodeType":"ExpressionStatement","src":"10743:304:58"}]},"id":13842,"nodeType":"IfStatement","src":"10355:703:58","trueBody":{"id":13824,"nodeType":"Block","src":"10394:329:58","statements":[{"expression":{"id":13822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13808,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13779,"src":"10408:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13811,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10482:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10490:16:58","memberName":"balancesScaled18","nodeType":"MemberAccess","referencedDeclaration":2501,"src":"10482:24:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13813,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13782,"src":"10524:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13814,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13784,"src":"10564:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13815,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10604:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10612:7:58","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":2503,"src":"10604:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13817,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10637:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10645:8:58","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":2505,"src":"10637:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13819,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13774,"src":"10671:7:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":13820,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10679:19:58","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":2498,"src":"10671:27:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13809,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"10435:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":13810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10447:17:58","memberName":"computeOutGivenIn","nodeType":"MemberAccess","referencedDeclaration":16825,"src":"10435:29:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":13821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10435:277:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10408:304:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13823,"nodeType":"ExpressionStatement","src":"10408:304:58"}]}}]},"documentation":{"id":13771,"nodeType":"StructuredDocumentation","src":"9848:25:58","text":"@inheritdoc IBasePool"},"functionSelector":"72c98186","id":13844,"implemented":true,"kind":"function","modifiers":[{"id":13777,"kind":"modifierInvocation","modifierName":{"id":13776,"name":"onlyVault","nameLocations":["9940:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"9940:9:58"},"nodeType":"ModifierInvocation","src":"9940:9:58"}],"name":"onSwap","nameLocation":"9887:6:58","nodeType":"FunctionDefinition","parameters":{"id":13775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13774,"mutability":"mutable","name":"request","nameLocation":"9916:7:58","nodeType":"VariableDeclaration","scope":13844,"src":"9894:29:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":13773,"nodeType":"UserDefinedTypeName","pathNode":{"id":13772,"name":"PoolSwapParams","nameLocations":["9894:14:58"],"nodeType":"IdentifierPath","referencedDeclaration":2510,"src":"9894:14:58"},"referencedDeclaration":2510,"src":"9894:14:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2510_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"9893:31:58"},"returnParameters":{"id":13780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13779,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"9967:24:58","nodeType":"VariableDeclaration","scope":13844,"src":"9959:32:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13778,"name":"uint256","nodeType":"ElementaryTypeName","src":"9959:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9958:34:58"},"scope":16089,"src":"9878:1186:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[788],"body":{"id":13852,"nodeType":"Block","src":"11186:48:58","statements":[{"expression":{"id":13850,"name":"_MIN_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13518,"src":"11203:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13849,"id":13851,"nodeType":"Return","src":"11196:31:58"}]},"documentation":{"id":13845,"nodeType":"StructuredDocumentation","src":"11070:40:58","text":"@inheritdoc ISwapFeePercentageBounds"},"functionSelector":"ce20ece7","id":13853,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"11124:27:58","nodeType":"FunctionDefinition","parameters":{"id":13846,"nodeType":"ParameterList","parameters":[],"src":"11151:2:58"},"returnParameters":{"id":13849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13853,"src":"11177:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13847,"name":"uint256","nodeType":"ElementaryTypeName","src":"11177:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11176:9:58"},"scope":16089,"src":"11115:119:58","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[794],"body":{"id":13861,"nodeType":"Block","src":"11356:48:58","statements":[{"expression":{"id":13859,"name":"_MAX_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13521,"src":"11373:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":13858,"id":13860,"nodeType":"Return","src":"11366:31:58"}]},"documentation":{"id":13854,"nodeType":"StructuredDocumentation","src":"11240:40:58","text":"@inheritdoc ISwapFeePercentageBounds"},"functionSelector":"654cf15d","id":13862,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"11294:27:58","nodeType":"FunctionDefinition","parameters":{"id":13855,"nodeType":"ParameterList","parameters":[],"src":"11321:2:58"},"returnParameters":{"id":13858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13857,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13862,"src":"11347:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13856,"name":"uint256","nodeType":"ElementaryTypeName","src":"11347:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11346:9:58"},"scope":16089,"src":"11285:119:58","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[804],"body":{"id":13870,"nodeType":"Block","src":"11539:195:58","statements":[{"expression":{"hexValue":"30","id":13868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11726:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13867,"id":13869,"nodeType":"Return","src":"11719:8:58"}]},"documentation":{"id":13863,"nodeType":"StructuredDocumentation","src":"11410:56:58","text":"@inheritdoc IUnbalancedLiquidityInvariantRatioBounds"},"functionSelector":"b677fa56","id":13871,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"11480:24:58","nodeType":"FunctionDefinition","parameters":{"id":13864,"nodeType":"ParameterList","parameters":[],"src":"11504:2:58"},"returnParameters":{"id":13867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13866,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13871,"src":"11530:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13865,"name":"uint256","nodeType":"ElementaryTypeName","src":"11530:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11529:9:58"},"scope":16089,"src":"11471:263:58","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[810],"body":{"id":13879,"nodeType":"Block","src":"11869:195:58","statements":[{"expression":{"hexValue":"30","id":13877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12056:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":13876,"id":13878,"nodeType":"Return","src":"12049:8:58"}]},"documentation":{"id":13872,"nodeType":"StructuredDocumentation","src":"11740:56:58","text":"@inheritdoc IUnbalancedLiquidityInvariantRatioBounds"},"functionSelector":"273c1adf","id":13880,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"11810:24:58","nodeType":"FunctionDefinition","parameters":{"id":13873,"nodeType":"ParameterList","parameters":[],"src":"11834:2:58"},"returnParameters":{"id":13876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13875,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13880,"src":"11860:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13874,"name":"uint256","nodeType":"ElementaryTypeName","src":"11860:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11859:9:58"},"scope":16089,"src":"11801:263:58","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[6586],"body":{"id":13890,"nodeType":"Block","src":"12162:55:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13887,"name":"ReClammPoolBptRateUnsupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16453,"src":"12179:29:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12179:31:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13889,"nodeType":"RevertStatement","src":"12172:38:58"}]},"documentation":{"id":13881,"nodeType":"StructuredDocumentation","src":"12070:29:58","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":13891,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"12113:7:58","nodeType":"FunctionDefinition","overrides":{"id":13883,"nodeType":"OverrideSpecifier","overrides":[],"src":"12135:8:58"},"parameters":{"id":13882,"nodeType":"ParameterList","parameters":[],"src":"12120:2:58"},"returnParameters":{"id":13886,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13885,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13891,"src":"12153:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13884,"name":"uint256","nodeType":"ElementaryTypeName","src":"12153:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12152:9:58"},"scope":16089,"src":"12104:113:58","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[6629],"body":{"id":13917,"nodeType":"Block","src":"12496:173:58","statements":[{"expression":{"id":13903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13899,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13897,"src":"12506:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags memory"}},"id":13901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12516:26:58","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":2348,"src":"12506:36:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":13902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12545:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"12506:43:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13904,"nodeType":"ExpressionStatement","src":"12506:43:58"},{"expression":{"id":13909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13905,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13897,"src":"12559:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags memory"}},"id":13907,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12569:28:58","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":2358,"src":"12559:38:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":13908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12600:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"12559:45:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13910,"nodeType":"ExpressionStatement","src":"12559:45:58"},{"expression":{"id":13915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13911,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13897,"src":"12614:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags memory"}},"id":13913,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12624:31:58","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":2362,"src":"12614:41:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":13914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12658:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"12614:48:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13916,"nodeType":"ExpressionStatement","src":"12614:48:58"}]},"documentation":{"id":13892,"nodeType":"StructuredDocumentation","src":"12387:22:58","text":"@inheritdoc IHooks"},"functionSelector":"d77153a7","id":13918,"implemented":true,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"12423:12:58","nodeType":"FunctionDefinition","overrides":{"id":13894,"nodeType":"OverrideSpecifier","overrides":[],"src":"12450:8:58"},"parameters":{"id":13893,"nodeType":"ParameterList","parameters":[],"src":"12435:2:58"},"returnParameters":{"id":13898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13897,"mutability":"mutable","name":"hookFlags","nameLocation":"12485:9:58","nodeType":"VariableDeclaration","scope":13918,"src":"12468:26:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":13896,"nodeType":"UserDefinedTypeName","pathNode":{"id":13895,"name":"HookFlags","nameLocations":["12468:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":2365,"src":"12468:9:58"},"referencedDeclaration":2365,"src":"12468:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2365_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"12467:28:58"},"scope":16089,"src":"12414:255:58","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[6622],"body":{"id":13951,"nodeType":"Block","src":"12908:180:58","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13938,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13927,"src":"12937:11:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":13939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12949:6:58","memberName":"length","nodeType":"MemberAccess","src":"12937:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":13940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12959:1:58","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12937:23:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"expression":{"id":13942,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13930,"src":"12976:19:58","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement calldata"}},"id":13943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12996:26:58","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":2311,"src":"12976:46:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12937:85:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13945,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13930,"src":"13038:19:58","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement calldata"}},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13058:14:58","memberName":"enableDonation","nodeType":"MemberAccess","referencedDeclaration":2317,"src":"13038:34:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13076:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13038:43:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12937:144:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":13937,"id":13950,"nodeType":"Return","src":"12918:163:58"}]},"documentation":{"id":13919,"nodeType":"StructuredDocumentation","src":"12675:22:58","text":"@inheritdoc IHooks"},"functionSelector":"0b89f182","id":13952,"implemented":true,"kind":"function","modifiers":[{"id":13934,"kind":"modifierInvocation","modifierName":{"id":13933,"name":"onlyVault","nameLocations":["12883:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"12883:9:58"},"nodeType":"ModifierInvocation","src":"12883:9:58"}],"name":"onRegister","nameLocation":"12711:10:58","nodeType":"FunctionDefinition","overrides":{"id":13932,"nodeType":"OverrideSpecifier","overrides":[],"src":"12874:8:58"},"parameters":{"id":13931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13952,"src":"12731:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13920,"name":"address","nodeType":"ElementaryTypeName","src":"12731:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13952,"src":"12748:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13922,"name":"address","nodeType":"ElementaryTypeName","src":"12748:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13927,"mutability":"mutable","name":"tokenConfig","nameLocation":"12786:11:58","nodeType":"VariableDeclaration","scope":13952,"src":"12765:32:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":13925,"nodeType":"UserDefinedTypeName","pathNode":{"id":13924,"name":"TokenConfig","nameLocations":["12765:11:58"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"12765:11:58"},"referencedDeclaration":2432,"src":"12765:11:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":13926,"nodeType":"ArrayTypeName","src":"12765:13:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":13930,"mutability":"mutable","name":"liquidityManagement","nameLocation":"12836:19:58","nodeType":"VariableDeclaration","scope":13952,"src":"12807:48:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":13929,"nodeType":"UserDefinedTypeName","pathNode":{"id":13928,"name":"LiquidityManagement","nameLocations":["12807:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"12807:19:58"},"referencedDeclaration":2318,"src":"12807:19:58","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"12721:140:58"},"returnParameters":{"id":13937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":13952,"src":"12902:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13935,"name":"bool","nodeType":"ElementaryTypeName","src":"12902:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12901:6:58"},"scope":16089,"src":"12702:386:58","stateMutability":"view","virtual":false,"visibility":"public"},{"canonicalName":"ReClammPool.InitializeLocals","id":13972,"members":[{"constant":false,"id":13954,"mutability":"mutable","name":"rateA","nameLocation":"13136:5:58","nodeType":"VariableDeclaration","scope":13972,"src":"13128:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13953,"name":"uint256","nodeType":"ElementaryTypeName","src":"13128:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13956,"mutability":"mutable","name":"rateB","nameLocation":"13159:5:58","nodeType":"VariableDeclaration","scope":13972,"src":"13151:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13955,"name":"uint256","nodeType":"ElementaryTypeName","src":"13151:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13958,"mutability":"mutable","name":"minPriceScaled18","nameLocation":"13182:16:58","nodeType":"VariableDeclaration","scope":13972,"src":"13174:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13957,"name":"uint256","nodeType":"ElementaryTypeName","src":"13174:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13960,"mutability":"mutable","name":"maxPriceScaled18","nameLocation":"13216:16:58","nodeType":"VariableDeclaration","scope":13972,"src":"13208:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13959,"name":"uint256","nodeType":"ElementaryTypeName","src":"13208:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13962,"mutability":"mutable","name":"targetPriceScaled18","nameLocation":"13250:19:58","nodeType":"VariableDeclaration","scope":13972,"src":"13242:27:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13961,"name":"uint256","nodeType":"ElementaryTypeName","src":"13242:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13965,"mutability":"mutable","name":"theoreticalBalances","nameLocation":"13289:19:58","nodeType":"VariableDeclaration","scope":13972,"src":"13279:29:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13963,"name":"uint256","nodeType":"ElementaryTypeName","src":"13279:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13964,"nodeType":"ArrayTypeName","src":"13279:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13967,"mutability":"mutable","name":"theoreticalVirtualBalanceA","nameLocation":"13326:26:58","nodeType":"VariableDeclaration","scope":13972,"src":"13318:34:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13966,"name":"uint256","nodeType":"ElementaryTypeName","src":"13318:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13969,"mutability":"mutable","name":"theoreticalVirtualBalanceB","nameLocation":"13370:26:58","nodeType":"VariableDeclaration","scope":13972,"src":"13362:34:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13968,"name":"uint256","nodeType":"ElementaryTypeName","src":"13362:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":13971,"mutability":"mutable","name":"priceRatio","nameLocation":"13414:10:58","nodeType":"VariableDeclaration","scope":13972,"src":"13406:18:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13970,"name":"uint256","nodeType":"ElementaryTypeName","src":"13406:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"InitializeLocals","nameLocation":"13101:16:58","nodeType":"StructDefinition","scope":16089,"src":"13094:337:58","visibility":"public"},{"baseFunctions":[6643],"body":{"id":14110,"nodeType":"Block","src":"13604:1632:58","statements":[{"assignments":[13988],"declarations":[{"constant":false,"id":13988,"mutability":"mutable","name":"locals","nameLocation":"13638:6:58","nodeType":"VariableDeclaration","scope":14110,"src":"13614:30:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals"},"typeName":{"id":13987,"nodeType":"UserDefinedTypeName","pathNode":{"id":13986,"name":"InitializeLocals","nameLocations":["13614:16:58"],"nodeType":"IdentifierPath","referencedDeclaration":13972,"src":"13614:16:58"},"referencedDeclaration":13972,"src":"13614:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_storage_ptr","typeString":"struct ReClammPool.InitializeLocals"}},"visibility":"internal"}],"id":13989,"nodeType":"VariableDeclarationStatement","src":"13614:30:58"},{"expression":{"id":13998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":13990,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13655:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":13992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13662:5:58","memberName":"rateA","nodeType":"MemberAccess","referencedDeclaration":13954,"src":"13655:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13993,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13669:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":13994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13676:5:58","memberName":"rateB","nodeType":"MemberAccess","referencedDeclaration":13956,"src":"13669:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":13995,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13654:28:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":13996,"name":"_getTokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16009,"src":"13685:14:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$","typeString":"function () view returns (uint256,uint256)"}},"id":13997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13685:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"13654:47:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13999,"nodeType":"ExpressionStatement","src":"13654:47:58"},{"expression":{"id":14014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":14000,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13726:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13733:16:58","memberName":"minPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13958,"src":"13726:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14003,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13763:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14004,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13770:16:58","memberName":"maxPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13960,"src":"13763:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14005,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13800:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13807:19:58","memberName":"targetPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13962,"src":"13800:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14007,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13712:124:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14009,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13872:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13879:5:58","memberName":"rateA","nodeType":"MemberAccess","referencedDeclaration":13954,"src":"13872:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14011,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13886:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13893:5:58","memberName":"rateB","nodeType":"MemberAccess","referencedDeclaration":13956,"src":"13886:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14008,"name":"_getPriceSettingsAdjustedByRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16088,"src":"13839:32:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256,uint256,uint256)"}},"id":14013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13839:60:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"13712:187:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14015,"nodeType":"ExpressionStatement","src":"13712:187:58"},{"expression":{"id":14035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":14016,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13924:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13931:19:58","memberName":"theoreticalBalances","nodeType":"MemberAccess","referencedDeclaration":13965,"src":"13924:26:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14019,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"13964:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13971:26:58","memberName":"theoreticalVirtualBalanceA","nodeType":"MemberAccess","referencedDeclaration":13967,"src":"13964:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14021,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14011:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14018:26:58","memberName":"theoreticalVirtualBalanceB","nodeType":"MemberAccess","referencedDeclaration":13969,"src":"14011:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14023,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14058:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14065:10:58","memberName":"priceRatio","nodeType":"MemberAccess","referencedDeclaration":13971,"src":"14058:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14025,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"13910:175:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14028,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14153:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14160:16:58","memberName":"minPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13958,"src":"14153:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14030,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14190:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14197:16:58","memberName":"maxPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13960,"src":"14190:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14032,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14227:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14033,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14234:19:58","memberName":"targetPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13962,"src":"14227:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14026,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"14088:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14100:39:58","memberName":"computeTheoreticalPriceRatioAndBalances","nodeType":"MemberAccess","referencedDeclaration":16986,"src":"14088:51:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256[] memory,uint256,uint256,uint256)"}},"id":14034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14088:175:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256,uint256,uint256)"}},"src":"13910:353:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14036,"nodeType":"ExpressionStatement","src":"13910:353:58"},{"expression":{"arguments":[{"id":14038,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13976,"src":"14307:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14039,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14325:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14332:19:58","memberName":"theoreticalBalances","nodeType":"MemberAccess","referencedDeclaration":13965,"src":"14325:26:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14037,"name":"_checkInitializationBalanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15751,"src":"14274:32:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256[] memory,uint256[] memory) pure"}},"id":14041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14274:78:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14042,"nodeType":"ExpressionStatement","src":"14274:78:58"},{"assignments":[14044],"declarations":[{"constant":false,"id":14044,"mutability":"mutable","name":"scale","nameLocation":"14371:5:58","nodeType":"VariableDeclaration","scope":14110,"src":"14363:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14043,"name":"uint256","nodeType":"ElementaryTypeName","src":"14363:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14054,"initialValue":{"arguments":[{"baseExpression":{"expression":{"id":14049,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14407:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14414:19:58","memberName":"theoreticalBalances","nodeType":"MemberAccess","referencedDeclaration":13965,"src":"14407:26:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14052,"indexExpression":{"id":14051,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"14434:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14407:29:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":14045,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13976,"src":"14379:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14047,"indexExpression":{"id":14046,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"14396:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14379:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14399:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"14379:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14379:58:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14363:74:58"},{"assignments":[14056],"declarations":[{"constant":false,"id":14056,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"14456:15:58","nodeType":"VariableDeclaration","scope":14110,"src":"14448:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14055,"name":"uint256","nodeType":"ElementaryTypeName","src":"14448:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14062,"initialValue":{"arguments":[{"id":14060,"name":"scale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14044,"src":"14516:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":14057,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14474:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14481:26:58","memberName":"theoreticalVirtualBalanceA","nodeType":"MemberAccess","referencedDeclaration":13967,"src":"14474:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14508:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"14474:41:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14474:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14448:74:58"},{"assignments":[14064],"declarations":[{"constant":false,"id":14064,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"14540:15:58","nodeType":"VariableDeclaration","scope":14110,"src":"14532:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14063,"name":"uint256","nodeType":"ElementaryTypeName","src":"14532:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14070,"initialValue":{"arguments":[{"id":14068,"name":"scale","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14044,"src":"14600:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":14065,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14558:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14565:26:58","memberName":"theoreticalVirtualBalanceB","nodeType":"MemberAccess","referencedDeclaration":13969,"src":"14558:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14592:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"14558:41:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14558:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14532:74:58"},{"expression":{"arguments":[{"id":14072,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13976,"src":"14657:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":14073,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14687:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14694:16:58","memberName":"minPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13958,"src":"14687:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14075,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14724:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14731:16:58","memberName":"maxPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13960,"src":"14724:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14077,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14761:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14768:19:58","memberName":"targetPriceScaled18","nodeType":"MemberAccess","referencedDeclaration":13962,"src":"14761:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14079,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14056,"src":"14801:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14080,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14064,"src":"14830:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14071,"name":"_checkInitializationPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15827,"src":"14617:26:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure"}},"id":14081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14617:238:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14082,"nodeType":"ExpressionStatement","src":"14617:238:58"},{"expression":{"arguments":[{"id":14084,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14056,"src":"14890:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14085,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14064,"src":"14907:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14083,"name":"_setLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"14866:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":14086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14866:57:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14087,"nodeType":"ExpressionStatement","src":"14866:57:58"},{"expression":{"arguments":[{"expression":{"id":14089,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13988,"src":"14956:6:58","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeLocals_$13972_memory_ptr","typeString":"struct ReClammPool.InitializeLocals memory"}},"id":14090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14963:10:58","memberName":"priceRatio","nodeType":"MemberAccess","referencedDeclaration":13971,"src":"14956:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14091,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14975:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":14092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14981:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"14975:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14093,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14992:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":14094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14998:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"14992:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14088,"name":"_startPriceRatioUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15437,"src":"14933:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) returns (uint256)"}},"id":14095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14933:75:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14096,"nodeType":"ExpressionStatement","src":"14933:75:58"},{"expression":{"arguments":[{"id":14098,"name":"_INITIAL_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13546,"src":"15081:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14097,"name":"_setDailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"15053:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) returns (uint256)"}},"id":14099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15053:64:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14100,"nodeType":"ExpressionStatement","src":"15053:64:58"},{"expression":{"arguments":[{"id":14102,"name":"_INITIAL_CENTEREDNESS_MARGIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"15150:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14101,"name":"_setCenterednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15556,"src":"15127:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":14103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15127:52:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14104,"nodeType":"ExpressionStatement","src":"15127:52:58"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14105,"name":"_updateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"15189:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":14106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15189:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14107,"nodeType":"ExpressionStatement","src":"15189:18:58"},{"expression":{"hexValue":"74727565","id":14108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15225:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":13985,"id":14109,"nodeType":"Return","src":"15218:11:58"}]},"documentation":{"id":13973,"nodeType":"StructuredDocumentation","src":"13437:22:58","text":"@inheritdoc IHooks"},"functionSelector":"1c149e28","id":14111,"implemented":true,"kind":"function","modifiers":[{"id":13982,"kind":"modifierInvocation","modifierName":{"id":13981,"name":"onlyVault","nameLocations":["13579:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"13579:9:58"},"nodeType":"ModifierInvocation","src":"13579:9:58"}],"name":"onBeforeInitialize","nameLocation":"13473:18:58","nodeType":"FunctionDefinition","overrides":{"id":13980,"nodeType":"OverrideSpecifier","overrides":[],"src":"13570:8:58"},"parameters":{"id":13979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13976,"mutability":"mutable","name":"balancesScaled18","nameLocation":"13518:16:58","nodeType":"VariableDeclaration","scope":14111,"src":"13501:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13974,"name":"uint256","nodeType":"ElementaryTypeName","src":"13501:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13975,"nodeType":"ArrayTypeName","src":"13501:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14111,"src":"13544:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":13977,"name":"bytes","nodeType":"ElementaryTypeName","src":"13544:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13491:71:58"},"returnParameters":{"id":13985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14111,"src":"13598:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":13983,"name":"bool","nodeType":"ElementaryTypeName","src":"13598:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13597:6:58"},"scope":16089,"src":"13464:1772:58","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6685],"body":{"id":14186,"nodeType":"Block","src":"15537:1045:58","statements":[{"assignments":[14138],"declarations":[{"constant":false,"id":14138,"mutability":"mutable","name":"poolTotalSupply","nameLocation":"15778:15:58","nodeType":"VariableDeclaration","scope":14186,"src":"15770:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14137,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14143,"initialValue":{"arguments":[{"id":14141,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14116,"src":"15815:4:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14139,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"15796:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15803:11:58","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1967,"src":"15796:18:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15796:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15770:50:58"},{"assignments":[14145],"declarations":[{"constant":false,"id":14145,"mutability":"mutable","name":"newPoolTotalSupply","nameLocation":"15838:18:58","nodeType":"VariableDeclaration","scope":14186,"src":"15830:26:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14144,"name":"uint256","nodeType":"ElementaryTypeName","src":"15830:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14149,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14146,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14124,"src":"15859:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14147,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14138,"src":"15879:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15859:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15830:64:58"},{"assignments":[14151,14153,null],"declarations":[{"constant":false,"id":14151,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"15914:22:58","nodeType":"VariableDeclaration","scope":14186,"src":"15906:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14150,"name":"uint256","nodeType":"ElementaryTypeName","src":"15906:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14153,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"15946:22:58","nodeType":"VariableDeclaration","scope":14186,"src":"15938:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14152,"name":"uint256","nodeType":"ElementaryTypeName","src":"15938:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":14157,"initialValue":{"arguments":[{"id":14155,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14127,"src":"16018:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14154,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"15974:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":14156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15974:70:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"15905:139:58"},{"expression":{"id":14165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14158,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14151,"src":"16258:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14159,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14151,"src":"16284:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":14160,"name":"newPoolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14145,"src":"16309:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16284:43:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14162,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16283:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":14163,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14138,"src":"16331:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16283:63:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16258:88:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14166,"nodeType":"ExpressionStatement","src":"16258:88:58"},{"expression":{"id":14174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14167,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14153,"src":"16356:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14168,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14153,"src":"16382:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":14169,"name":"newPoolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14145,"src":"16407:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16382:43:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14171,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16381:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":14172,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14138,"src":"16429:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16381:63:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16356:88:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14175,"nodeType":"ExpressionStatement","src":"16356:88:58"},{"expression":{"arguments":[{"id":14177,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14151,"src":"16478:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14178,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14153,"src":"16502:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14176,"name":"_setLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"16454:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":14179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16454:71:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14180,"nodeType":"ExpressionStatement","src":"16454:71:58"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14181,"name":"_updateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"16535:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":14182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16535:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14183,"nodeType":"ExpressionStatement","src":"16535:18:58"},{"expression":{"hexValue":"74727565","id":14184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16571:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":14136,"id":14185,"nodeType":"Return","src":"16564:11:58"}]},"documentation":{"id":14112,"nodeType":"StructuredDocumentation","src":"15242:22:58","text":"@inheritdoc IHooks"},"functionSelector":"45421ec7","id":14187,"implemented":true,"kind":"function","modifiers":[{"id":14133,"kind":"modifierInvocation","modifierName":{"id":14132,"name":"onlyVault","nameLocations":["15512:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"15512:9:58"},"nodeType":"ModifierInvocation","src":"15512:9:58"}],"name":"onBeforeAddLiquidity","nameLocation":"15278:20:58","nodeType":"FunctionDefinition","overrides":{"id":14131,"nodeType":"OverrideSpecifier","overrides":[],"src":"15503:8:58"},"parameters":{"id":14130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14114,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"15308:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14113,"name":"address","nodeType":"ElementaryTypeName","src":"15308:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14116,"mutability":"mutable","name":"pool","nameLocation":"15333:4:58","nodeType":"VariableDeclaration","scope":14187,"src":"15325:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14115,"name":"address","nodeType":"ElementaryTypeName","src":"15325:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"15347:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"},"typeName":{"id":14118,"nodeType":"UserDefinedTypeName","pathNode":{"id":14117,"name":"AddLiquidityKind","nameLocations":["15347:16:58"],"nodeType":"IdentifierPath","referencedDeclaration":2545,"src":"15347:16:58"},"referencedDeclaration":2545,"src":"15347:16:58","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2545","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":14122,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"15373:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14120,"name":"uint256","nodeType":"ElementaryTypeName","src":"15373:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14121,"nodeType":"ArrayTypeName","src":"15373:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14124,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"15407:17:58","nodeType":"VariableDeclaration","scope":14187,"src":"15399:25:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14123,"name":"uint256","nodeType":"ElementaryTypeName","src":"15399:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14127,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15451:16:58","nodeType":"VariableDeclaration","scope":14187,"src":"15434:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14125,"name":"uint256","nodeType":"ElementaryTypeName","src":"15434:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14126,"nodeType":"ArrayTypeName","src":"15434:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"15477:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14128,"name":"bytes","nodeType":"ElementaryTypeName","src":"15477:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15298:197:58"},"returnParameters":{"id":14136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14135,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14187,"src":"15531:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14134,"name":"bool","nodeType":"ElementaryTypeName","src":"15531:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15530:6:58"},"scope":16089,"src":"15269:1313:58","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[6745],"body":{"id":14262,"nodeType":"Block","src":"16888:1018:58","statements":[{"assignments":[14214],"declarations":[{"constant":false,"id":14214,"mutability":"mutable","name":"poolTotalSupply","nameLocation":"17131:15:58","nodeType":"VariableDeclaration","scope":14262,"src":"17123:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14213,"name":"uint256","nodeType":"ElementaryTypeName","src":"17123:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14219,"initialValue":{"arguments":[{"id":14217,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14192,"src":"17168:4:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14215,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"17149:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17156:11:58","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":1967,"src":"17149:18:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17149:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17123:50:58"},{"assignments":[14221],"declarations":[{"constant":false,"id":14221,"mutability":"mutable","name":"bptDelta","nameLocation":"17191:8:58","nodeType":"VariableDeclaration","scope":14262,"src":"17183:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14220,"name":"uint256","nodeType":"ElementaryTypeName","src":"17183:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14225,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14222,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14214,"src":"17202:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14223,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14197,"src":"17220:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17202:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17183:53:58"},{"assignments":[14227,14229,null],"declarations":[{"constant":false,"id":14227,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"17256:22:58","nodeType":"VariableDeclaration","scope":14262,"src":"17248:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14226,"name":"uint256","nodeType":"ElementaryTypeName","src":"17248:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14229,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"17288:22:58","nodeType":"VariableDeclaration","scope":14262,"src":"17280:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14228,"name":"uint256","nodeType":"ElementaryTypeName","src":"17280:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":14233,"initialValue":{"arguments":[{"id":14231,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14203,"src":"17360:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14230,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"17316:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":14232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17316:70:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"17247:139:58"},{"expression":{"id":14241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14234,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14227,"src":"17601:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14235,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14227,"src":"17627:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":14236,"name":"bptDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14221,"src":"17652:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17627:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14238,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17626:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":14239,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14214,"src":"17664:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17626:53:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17601:78:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14242,"nodeType":"ExpressionStatement","src":"17601:78:58"},{"expression":{"id":14250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14243,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14229,"src":"17689:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14244,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14229,"src":"17715:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":14245,"name":"bptDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14221,"src":"17740:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17715:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14247,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17714:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":14248,"name":"poolTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14214,"src":"17752:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17714:53:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17689:78:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14251,"nodeType":"ExpressionStatement","src":"17689:78:58"},{"expression":{"arguments":[{"id":14253,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14227,"src":"17802:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14254,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14229,"src":"17826:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14252,"name":"_setLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"17778:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":14255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17778:71:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14256,"nodeType":"ExpressionStatement","src":"17778:71:58"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14257,"name":"_updateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"17859:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":14258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17859:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14259,"nodeType":"ExpressionStatement","src":"17859:18:58"},{"expression":{"hexValue":"74727565","id":14260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17895:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":14212,"id":14261,"nodeType":"Return","src":"17888:11:58"}]},"documentation":{"id":14188,"nodeType":"StructuredDocumentation","src":"16588:22:58","text":"@inheritdoc IHooks"},"functionSelector":"ba5f9f40","id":14263,"implemented":true,"kind":"function","modifiers":[{"id":14209,"kind":"modifierInvocation","modifierName":{"id":14208,"name":"onlyVault","nameLocations":["16863:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":7109,"src":"16863:9:58"},"nodeType":"ModifierInvocation","src":"16863:9:58"}],"name":"onBeforeRemoveLiquidity","nameLocation":"16624:23:58","nodeType":"FunctionDefinition","overrides":{"id":14207,"nodeType":"OverrideSpecifier","overrides":[],"src":"16854:8:58"},"parameters":{"id":14206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14190,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14263,"src":"16657:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14189,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14192,"mutability":"mutable","name":"pool","nameLocation":"16682:4:58","nodeType":"VariableDeclaration","scope":14263,"src":"16674:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14191,"name":"address","nodeType":"ElementaryTypeName","src":"16674:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14263,"src":"16696:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":14194,"nodeType":"UserDefinedTypeName","pathNode":{"id":14193,"name":"RemoveLiquidityKind","nameLocations":["16696:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":2566,"src":"16696:19:58"},"referencedDeclaration":2566,"src":"16696:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2566","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":14197,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"16733:16:58","nodeType":"VariableDeclaration","scope":14263,"src":"16725:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14196,"name":"uint256","nodeType":"ElementaryTypeName","src":"16725:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14263,"src":"16759:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14198,"name":"uint256","nodeType":"ElementaryTypeName","src":"16759:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14199,"nodeType":"ArrayTypeName","src":"16759:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14203,"mutability":"mutable","name":"balancesScaled18","nameLocation":"16802:16:58","nodeType":"VariableDeclaration","scope":14263,"src":"16785:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14201,"name":"uint256","nodeType":"ElementaryTypeName","src":"16785:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14202,"nodeType":"ArrayTypeName","src":"16785:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14263,"src":"16828:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":14204,"name":"bytes","nodeType":"ElementaryTypeName","src":"16828:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16647:199:58"},"returnParameters":{"id":14212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14211,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14263,"src":"16882:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14210,"name":"bool","nodeType":"ElementaryTypeName","src":"16882:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16881:6:58"},"scope":16089,"src":"16615:1291:58","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[16474],"body":{"id":14442,"nodeType":"Block","src":"18283:1809:58","statements":[{"assignments":[14279],"declarations":[{"constant":false,"id":14279,"mutability":"mutable","name":"tokens","nameLocation":"18309:6:58","nodeType":"VariableDeclaration","scope":14442,"src":"18293:22:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":14277,"nodeType":"UserDefinedTypeName","pathNode":{"id":14276,"name":"IERC20","nameLocations":["18293:6:58"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"18293:6:58"},"referencedDeclaration":7403,"src":"18293:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":14278,"nodeType":"ArrayTypeName","src":"18293:8:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":14287,"initialValue":{"arguments":[{"arguments":[{"id":14284,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"18347:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14283,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18339:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14282,"name":"address","nodeType":"ElementaryTypeName","src":"18339:7:58","typeDescriptions":{}}},"id":14285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18339:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14280,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"18318:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18325:13:58","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1883,"src":"18318:20:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":14286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18318:35:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"18293:60:58"},{"assignments":[14289,14291],"declarations":[{"constant":false,"id":14289,"mutability":"mutable","name":"referenceTokenIdx","nameLocation":"18373:17:58","nodeType":"VariableDeclaration","scope":14442,"src":"18365:25:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14288,"name":"uint256","nodeType":"ElementaryTypeName","src":"18365:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14291,"mutability":"mutable","name":"otherTokenIdx","nameLocation":"18400:13:58","nodeType":"VariableDeclaration","scope":14442,"src":"18392:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14290,"name":"uint256","nodeType":"ElementaryTypeName","src":"18392:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14304,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"id":14296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14292,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"18417:6:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14294,"indexExpression":{"id":14293,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"18424:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18417:9:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14295,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14267,"src":"18430:14:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"18417:27:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":14300,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"18457:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14301,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"18460:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14302,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"18456:6:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":14303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"18417:45:58","trueExpression":{"components":[{"id":14297,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"18448:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14298,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"18451:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14299,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"18447:6:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"18364:98:58"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14305,"name":"referenceTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"18477:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14306,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"18498:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18477:22:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"id":14312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14308,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14267,"src":"18503:14:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":14309,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"18521:6:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14311,"indexExpression":{"id":14310,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"18528:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18521:9:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"18503:27:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18477:53:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14320,"nodeType":"IfStatement","src":"18473:118:58","trueBody":{"id":14319,"nodeType":"Block","src":"18532:59:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14314,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"18553:12:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1506_$","typeString":"type(contract IVaultErrors)"}},"id":14316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18566:12:58","memberName":"InvalidToken","nodeType":"MemberAccess","referencedDeclaration":1190,"src":"18553:25:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18553:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14318,"nodeType":"RevertStatement","src":"18546:34:58"}]}},{"assignments":[14322,14324],"declarations":[{"constant":false,"id":14322,"mutability":"mutable","name":"rateA","nameLocation":"18610:5:58","nodeType":"VariableDeclaration","scope":14442,"src":"18602:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14321,"name":"uint256","nodeType":"ElementaryTypeName","src":"18602:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14324,"mutability":"mutable","name":"rateB","nameLocation":"18625:5:58","nodeType":"VariableDeclaration","scope":14442,"src":"18617:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14323,"name":"uint256","nodeType":"ElementaryTypeName","src":"18617:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14327,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":14325,"name":"_getTokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16009,"src":"18634:14:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$","typeString":"function () view returns (uint256,uint256)"}},"id":14326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18634:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"18601:49:58"},{"assignments":[14329],"declarations":[{"constant":false,"id":14329,"mutability":"mutable","name":"balanceRatioScaled18","nameLocation":"18668:20:58","nodeType":"VariableDeclaration","scope":14442,"src":"18660:28:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14328,"name":"uint256","nodeType":"ElementaryTypeName","src":"18660:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14334,"initialValue":{"arguments":[{"id":14331,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14322,"src":"18727:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14332,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14324,"src":"18734:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14330,"name":"_computeInitialBalanceRatioScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15954,"src":"18691:35:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":14333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18691:49:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18660:80:58"},{"assignments":[14336,14338],"declarations":[{"constant":false,"id":14336,"mutability":"mutable","name":"rateReferenceToken","nameLocation":"18759:18:58","nodeType":"VariableDeclaration","scope":14442,"src":"18751:26:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14335,"name":"uint256","nodeType":"ElementaryTypeName","src":"18751:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14338,"mutability":"mutable","name":"rateOtherToken","nameLocation":"18787:14:58","nodeType":"VariableDeclaration","scope":14442,"src":"18779:22:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14337,"name":"uint256","nodeType":"ElementaryTypeName","src":"18779:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14351,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"id":14343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14339,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"18805:6:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14341,"indexExpression":{"id":14340,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"18812:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18805:9:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14342,"name":"referenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14267,"src":"18818:14:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"src":"18805:27:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":14347,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14324,"src":"18877:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14348,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14322,"src":"18884:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14349,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18876:14:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":14350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"18805:85:58","trueExpression":{"components":[{"id":14344,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14322,"src":"18848:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14345,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14324,"src":"18855:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14346,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18847:14:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"18750:140:58"},{"assignments":[14353],"declarations":[{"constant":false,"id":14353,"mutability":"mutable","name":"decimalsReferenceToken","nameLocation":"18907:22:58","nodeType":"VariableDeclaration","scope":14442,"src":"18901:28:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14352,"name":"uint8","nodeType":"ElementaryTypeName","src":"18901:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":14364,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":14357,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"18955:6:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14359,"indexExpression":{"id":14358,"name":"referenceTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"18962:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18955:25:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}],"id":14356,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18947:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14355,"name":"address","nodeType":"ElementaryTypeName","src":"18947:7:58","typeDescriptions":{}}},"id":14360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18947:34:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14354,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"18932:14:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$7429_$","typeString":"type(contract IERC20Metadata)"}},"id":14361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18932:50:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$7429","typeString":"contract IERC20Metadata"}},"id":14362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18983:8:58","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":7428,"src":"18932:59:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":14363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18932:61:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"18901:92:58"},{"assignments":[14366],"declarations":[{"constant":false,"id":14366,"mutability":"mutable","name":"decimalsOtherToken","nameLocation":"19009:18:58","nodeType":"VariableDeclaration","scope":14442,"src":"19003:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":14365,"name":"uint8","nodeType":"ElementaryTypeName","src":"19003:5:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":14377,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"baseExpression":{"id":14370,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14279,"src":"19053:6:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14372,"indexExpression":{"id":14371,"name":"otherTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14291,"src":"19060:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19053:21:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}],"id":14369,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19045:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14368,"name":"address","nodeType":"ElementaryTypeName","src":"19045:7:58","typeDescriptions":{}}},"id":14373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19045:30:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14367,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"19030:14:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$7429_$","typeString":"type(contract IERC20Metadata)"}},"id":14374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19030:46:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$7429","typeString":"contract IERC20Metadata"}},"id":14375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19077:8:58","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":7428,"src":"19030:55:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":14376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19030:57:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"19003:84:58"},{"assignments":[14379],"declarations":[{"constant":false,"id":14379,"mutability":"mutable","name":"referenceAmountInScaled18","nameLocation":"19106:25:58","nodeType":"VariableDeclaration","scope":14442,"src":"19098:33:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14378,"name":"uint256","nodeType":"ElementaryTypeName","src":"19098:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14390,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19197:2:58","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14383,"name":"_MAX_TOKEN_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13535,"src":"19204:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14384,"name":"decimalsReferenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14353,"src":"19226:22:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"19204:44:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14386,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19203:46:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19197:52:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14388,"name":"rateReferenceToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14336,"src":"19263:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14380,"name":"referenceAmountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14269,"src":"19134:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19155:28:58","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"19134:49:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":14389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19134:157:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19098:193:58"},{"expression":{"id":14397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14391,"name":"initialBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"19611:18:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":14395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19646:1:58","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":14394,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19632:13:58","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":14392,"name":"uint256","nodeType":"ElementaryTypeName","src":"19636:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14393,"nodeType":"ArrayTypeName","src":"19636:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":14396,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19632:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"19611:37:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14398,"nodeType":"ExpressionStatement","src":"19611:37:58"},{"expression":{"id":14403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14399,"name":"initialBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"19658:18:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14401,"indexExpression":{"id":14400,"name":"referenceTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"19677:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19658:37:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14402,"name":"referenceAmountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14269,"src":"19698:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19658:60:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14404,"nodeType":"ExpressionStatement","src":"19658:60:58"},{"assignments":[14414],"declarations":[{"constant":false,"id":14414,"mutability":"mutable","name":"_mulOrDiv","nameLocation":"19779:9:58","nodeType":"VariableDeclaration","scope":14442,"src":"19729:59:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"typeName":{"id":14413,"nodeType":"FunctionTypeName","parameterTypes":{"id":14409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14413,"src":"19738:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14405,"name":"uint256","nodeType":"ElementaryTypeName","src":"19738:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14408,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14413,"src":"19747:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14407,"name":"uint256","nodeType":"ElementaryTypeName","src":"19747:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19737:18:58"},"returnParameterTypes":{"id":14412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14413,"src":"19770:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14410,"name":"uint256","nodeType":"ElementaryTypeName","src":"19770:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19769:9:58"},"src":"19729:59:58","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":14423,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14415,"name":"referenceTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14289,"src":"19791:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":14416,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"19812:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19791:22:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":14420,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"19861:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":14421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19872:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"19861:18:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"19791:88:58","trueExpression":{"expression":{"id":14418,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"19828:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":14419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19839:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"19828:18:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"19729:150:58"},{"expression":{"id":14440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":14424,"name":"initialBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14273,"src":"19889:18:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14426,"indexExpression":{"id":14425,"name":"otherTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14291,"src":"19908:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19889:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":14432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20020:2:58","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14433,"name":"_MAX_TOKEN_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13535,"src":"20027:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":14434,"name":"decimalsOtherToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14366,"src":"20049:18:58","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"20027:40:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14436,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20026:42:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20020:48:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14438,"name":"rateOtherToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14338,"src":"20070:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":14428,"name":"referenceAmountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14379,"src":"19935:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14429,"name":"balanceRatioScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14329,"src":"19962:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14427,"name":"_mulOrDiv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14414,"src":"19925:9:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19925:58:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19997:22:58","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":4140,"src":"19925:94:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":14439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19925:160:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19889:196:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14441,"nodeType":"ExpressionStatement","src":"19889:196:58"}]},"documentation":{"id":14264,"nodeType":"StructuredDocumentation","src":"18080:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"e45801da","id":14443,"implemented":true,"kind":"function","modifiers":[],"name":"computeInitialBalancesRaw","nameLocation":"18122:25:58","nodeType":"FunctionDefinition","parameters":{"id":14270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14267,"mutability":"mutable","name":"referenceToken","nameLocation":"18164:14:58","nodeType":"VariableDeclaration","scope":14443,"src":"18157:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":14266,"nodeType":"UserDefinedTypeName","pathNode":{"id":14265,"name":"IERC20","nameLocations":["18157:6:58"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"18157:6:58"},"referencedDeclaration":7403,"src":"18157:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":14269,"mutability":"mutable","name":"referenceAmountInRaw","nameLocation":"18196:20:58","nodeType":"VariableDeclaration","scope":14443,"src":"18188:28:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14268,"name":"uint256","nodeType":"ElementaryTypeName","src":"18188:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18147:75:58"},"returnParameters":{"id":14274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14273,"mutability":"mutable","name":"initialBalancesRaw","nameLocation":"18263:18:58","nodeType":"VariableDeclaration","scope":14443,"src":"18246:35:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14271,"name":"uint256","nodeType":"ElementaryTypeName","src":"18246:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14272,"nodeType":"ArrayTypeName","src":"18246:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18245:37:58"},"scope":16089,"src":"18113:1979:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16482],"body":{"id":14501,"nodeType":"Block","src":"20226:507:58","statements":[{"condition":{"arguments":[{"arguments":[{"id":14455,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20273:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20265:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14453,"name":"address","nodeType":"ElementaryTypeName","src":"20265:7:58","typeDescriptions":{}}},"id":14456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20265:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14451,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"20240:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20247:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":1873,"src":"20240:24:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":14457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20240:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":14499,"nodeType":"Block","src":"20630:97:58","statements":[{"expression":{"id":14493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14491,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14447,"src":"20644:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14492,"name":"_INITIAL_MIN_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"20655:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20644:29:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14494,"nodeType":"ExpressionStatement","src":"20644:29:58"},{"expression":{"id":14497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14495,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14449,"src":"20687:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14496,"name":"_INITIAL_MAX_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"20698:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20687:29:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14498,"nodeType":"ExpressionStatement","src":"20687:29:58"}]},"id":14500,"nodeType":"IfStatement","src":"20236:491:58","trueBody":{"id":14490,"nodeType":"Block","src":"20281:343:58","statements":[{"assignments":[null,null,null,14462],"declarations":[null,null,null,{"constant":false,"id":14462,"mutability":"mutable","name":"balancesScaled18","nameLocation":"20319:16:58","nodeType":"VariableDeclaration","scope":14490,"src":"20302:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14460,"name":"uint256","nodeType":"ElementaryTypeName","src":"20302:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14461,"nodeType":"ArrayTypeName","src":"20302:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14470,"initialValue":{"arguments":[{"arguments":[{"id":14467,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20371:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14466,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20363:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14465,"name":"address","nodeType":"ElementaryTypeName","src":"20363:7:58","typeDescriptions":{}}},"id":14468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20363:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14463,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"20339:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20346:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"20339:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":14469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20339:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"20295:82:58"},{"assignments":[14472,14474,null],"declarations":[{"constant":false,"id":14472,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"20400:15:58","nodeType":"VariableDeclaration","scope":14490,"src":"20392:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14471,"name":"uint256","nodeType":"ElementaryTypeName","src":"20392:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14474,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"20425:15:58","nodeType":"VariableDeclaration","scope":14490,"src":"20417:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14473,"name":"uint256","nodeType":"ElementaryTypeName","src":"20417:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":14478,"initialValue":{"arguments":[{"id":14476,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14462,"src":"20477:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14475,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"20446:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":14477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20446:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"20391:103:58"},{"expression":{"id":14488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14479,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14447,"src":"20510:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14480,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14449,"src":"20520:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14481,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"20509:20:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14484,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14462,"src":"20562:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14485,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14472,"src":"20580:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14486,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14474,"src":"20597:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14482,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"20532:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20544:17:58","memberName":"computePriceRange","nodeType":"MemberAccess","referencedDeclaration":17627,"src":"20532:29:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,uint256)"}},"id":14487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20532:81:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"20509:104:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14489,"nodeType":"ExpressionStatement","src":"20509:104:58"}]}}]},"documentation":{"id":14444,"nodeType":"StructuredDocumentation","src":"20098:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"84254cf9","id":14502,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentPriceRange","nameLocation":"20140:24:58","nodeType":"FunctionDefinition","parameters":{"id":14445,"nodeType":"ParameterList","parameters":[],"src":"20164:2:58"},"returnParameters":{"id":14450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14447,"mutability":"mutable","name":"minPrice","nameLocation":"20198:8:58","nodeType":"VariableDeclaration","scope":14502,"src":"20190:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14446,"name":"uint256","nodeType":"ElementaryTypeName","src":"20190:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14449,"mutability":"mutable","name":"maxPrice","nameLocation":"20216:8:58","nodeType":"VariableDeclaration","scope":14502,"src":"20208:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14448,"name":"uint256","nodeType":"ElementaryTypeName","src":"20208:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20189:36:58"},"scope":16089,"src":"20131:602:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16492],"body":{"id":14520,"nodeType":"Block","src":"20942:107:58","statements":[{"expression":{"id":14518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":14512,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14506,"src":"20955:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14513,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14508,"src":"20979:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14514,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14510,"src":"21003:7:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14515,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"20952:59:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(,uint256,uint256,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":14516,"name":"_getRealAndVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14587,"src":"21014:26:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function () view returns (uint256[] memory,uint256,uint256,bool)"}},"id":14517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21014:28:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256[] memory,uint256,uint256,bool)"}},"src":"20952:90:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14519,"nodeType":"ExpressionStatement","src":"20952:90:58"}]},"documentation":{"id":14503,"nodeType":"StructuredDocumentation","src":"20739:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"4f149b3f","id":14521,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentVirtualBalances","nameLocation":"20781:29:58","nodeType":"FunctionDefinition","parameters":{"id":14504,"nodeType":"ParameterList","parameters":[],"src":"20810:2:58"},"returnParameters":{"id":14511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14506,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"20868:22:58","nodeType":"VariableDeclaration","scope":14521,"src":"20860:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14505,"name":"uint256","nodeType":"ElementaryTypeName","src":"20860:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14508,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"20900:22:58","nodeType":"VariableDeclaration","scope":14521,"src":"20892:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14507,"name":"uint256","nodeType":"ElementaryTypeName","src":"20892:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14510,"mutability":"mutable","name":"changed","nameLocation":"20929:7:58","nodeType":"VariableDeclaration","scope":14521,"src":"20924:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14509,"name":"bool","nodeType":"ElementaryTypeName","src":"20924:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20859:78:58"},"scope":16089,"src":"20772:277:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16498],"body":{"id":14553,"nodeType":"Block","src":"21155:313:58","statements":[{"assignments":[14531,14533,14535,null],"declarations":[{"constant":false,"id":14531,"mutability":"mutable","name":"balancesScaled18","nameLocation":"21196:16:58","nodeType":"VariableDeclaration","scope":14553,"src":"21179:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14529,"name":"uint256","nodeType":"ElementaryTypeName","src":"21179:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14530,"nodeType":"ArrayTypeName","src":"21179:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14533,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"21234:22:58","nodeType":"VariableDeclaration","scope":14553,"src":"21226:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14532,"name":"uint256","nodeType":"ElementaryTypeName","src":"21226:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14535,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"21278:22:58","nodeType":"VariableDeclaration","scope":14553,"src":"21270:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14534,"name":"uint256","nodeType":"ElementaryTypeName","src":"21270:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":14538,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":14536,"name":"_getRealAndVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14587,"src":"21315:26:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function () view returns (uint256[] memory,uint256,uint256,bool)"}},"id":14537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21315:28:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256[] memory,uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21165:178:58"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14546,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14531,"src":"21416:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14548,"indexExpression":{"id":14547,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"21433:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21416:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14549,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14533,"src":"21438:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21416:44:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":14539,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14531,"src":"21362:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14541,"indexExpression":{"id":14540,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"21379:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21362:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":14542,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14535,"src":"21384:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21362:44:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14544,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21361:46:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21408:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"21361:54:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21361:100:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14526,"id":14552,"nodeType":"Return","src":"21354:107:58"}]},"documentation":{"id":14522,"nodeType":"StructuredDocumentation","src":"21055:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"c0209f1d","id":14554,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentSpotPrice","nameLocation":"21097:23:58","nodeType":"FunctionDefinition","parameters":{"id":14523,"nodeType":"ParameterList","parameters":[],"src":"21120:2:58"},"returnParameters":{"id":14526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14554,"src":"21146:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14524,"name":"uint256","nodeType":"ElementaryTypeName","src":"21146:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21145:9:58"},"scope":16089,"src":"21088:380:58","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":14586,"nodeType":"Block","src":"21734:200:58","statements":[{"expression":{"id":14575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,null,null,{"id":14566,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14558,"src":"21751:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":14567,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21744:24:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$__$__$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(,,,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":14572,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21803:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21795:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14570,"name":"address","nodeType":"ElementaryTypeName","src":"21795:7:58","typeDescriptions":{}}},"id":14573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21795:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14568,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"21771:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21778:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"21771:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":14574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21771:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"src":"21744:65:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14576,"nodeType":"ExpressionStatement","src":"21744:65:58"},{"expression":{"id":14584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14577,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14560,"src":"21820:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14578,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14562,"src":"21844:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14579,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14564,"src":"21868:7:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14580,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21819:57:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14582,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14558,"src":"21910:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14581,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"21879:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":14583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21879:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"src":"21819:108:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14585,"nodeType":"ExpressionStatement","src":"21819:108:58"}]},"id":14587,"implemented":true,"kind":"function","modifiers":[],"name":"_getRealAndVirtualBalances","nameLocation":"21483:26:58","nodeType":"FunctionDefinition","parameters":{"id":14555,"nodeType":"ParameterList","parameters":[],"src":"21509:2:58"},"returnParameters":{"id":14565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14558,"mutability":"mutable","name":"balancesScaled18","nameLocation":"21589:16:58","nodeType":"VariableDeclaration","scope":14587,"src":"21572:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14556,"name":"uint256","nodeType":"ElementaryTypeName","src":"21572:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14557,"nodeType":"ArrayTypeName","src":"21572:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14560,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"21627:22:58","nodeType":"VariableDeclaration","scope":14587,"src":"21619:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14559,"name":"uint256","nodeType":"ElementaryTypeName","src":"21619:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14562,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"21671:22:58","nodeType":"VariableDeclaration","scope":14587,"src":"21663:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14561,"name":"uint256","nodeType":"ElementaryTypeName","src":"21663:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14564,"mutability":"mutable","name":"changed","nameLocation":"21712:7:58","nodeType":"VariableDeclaration","scope":14587,"src":"21707:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14563,"name":"bool","nodeType":"ElementaryTypeName","src":"21707:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21558:171:58"},"scope":16089,"src":"21474:460:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[16504],"body":{"id":14595,"nodeType":"Block","src":"22032:38:58","statements":[{"expression":{"id":14593,"name":"_lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"22049:14:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":14592,"id":14594,"nodeType":"Return","src":"22042:21:58"}]},"documentation":{"id":14588,"nodeType":"StructuredDocumentation","src":"21940:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"37899770","id":14596,"implemented":true,"kind":"function","modifiers":[],"name":"getLastTimestamp","nameLocation":"21982:16:58","nodeType":"FunctionDefinition","parameters":{"id":14589,"nodeType":"ParameterList","parameters":[],"src":"21998:2:58"},"returnParameters":{"id":14592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14591,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14596,"src":"22024:6:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":14590,"name":"uint32","nodeType":"ElementaryTypeName","src":"22024:6:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"22023:8:58"},"scope":16089,"src":"21973:97:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16512],"body":{"id":14608,"nodeType":"Block","src":"22216:68:58","statements":[{"expression":{"components":[{"id":14604,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"22234:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":14605,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"22256:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"id":14606,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22233:44:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint128_$_t_uint128_$","typeString":"tuple(uint128,uint128)"}},"functionReturnParameters":14603,"id":14607,"nodeType":"Return","src":"22226:51:58"}]},"documentation":{"id":14597,"nodeType":"StructuredDocumentation","src":"22076:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"105ae7ad","id":14609,"implemented":true,"kind":"function","modifiers":[],"name":"getLastVirtualBalances","nameLocation":"22118:22:58","nodeType":"FunctionDefinition","parameters":{"id":14598,"nodeType":"ParameterList","parameters":[],"src":"22140:2:58"},"returnParameters":{"id":14603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14600,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"22174:15:58","nodeType":"VariableDeclaration","scope":14609,"src":"22166:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14599,"name":"uint256","nodeType":"ElementaryTypeName","src":"22166:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14602,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"22199:15:58","nodeType":"VariableDeclaration","scope":14609,"src":"22191:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14601,"name":"uint256","nodeType":"ElementaryTypeName","src":"22191:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22165:50:58"},"scope":16089,"src":"22109:175:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16518],"body":{"id":14617,"nodeType":"Block","src":"22388:43:58","statements":[{"expression":{"id":14615,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"22405:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":14614,"id":14616,"nodeType":"Return","src":"22398:26:58"}]},"documentation":{"id":14610,"nodeType":"StructuredDocumentation","src":"22290:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"1d8a5e7e","id":14618,"implemented":true,"kind":"function","modifiers":[],"name":"getCenterednessMargin","nameLocation":"22332:21:58","nodeType":"FunctionDefinition","parameters":{"id":14611,"nodeType":"ParameterList","parameters":[],"src":"22353:2:58"},"returnParameters":{"id":14614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14618,"src":"22379:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14612,"name":"uint256","nodeType":"ElementaryTypeName","src":"22379:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22378:9:58"},"scope":16089,"src":"22323:108:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16524],"body":{"id":14628,"nodeType":"Block","src":"22540:72:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":14624,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"22557:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":14625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22578:25:58","memberName":"toDailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":17660,"src":"22557:46:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22557:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14623,"id":14627,"nodeType":"Return","src":"22550:55:58"}]},"documentation":{"id":14619,"nodeType":"StructuredDocumentation","src":"22437:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"4efd88c9","id":14629,"implemented":true,"kind":"function","modifiers":[],"name":"getDailyPriceShiftExponent","nameLocation":"22479:26:58","nodeType":"FunctionDefinition","parameters":{"id":14620,"nodeType":"ParameterList","parameters":[],"src":"22505:2:58"},"returnParameters":{"id":14623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14622,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14629,"src":"22531:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14621,"name":"uint256","nodeType":"ElementaryTypeName","src":"22531:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22530:9:58"},"scope":16089,"src":"22470:142:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16530],"body":{"id":14637,"nodeType":"Block","src":"22717:44:58","statements":[{"expression":{"id":14635,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"22734:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":14634,"id":14636,"nodeType":"Return","src":"22727:27:58"}]},"documentation":{"id":14630,"nodeType":"StructuredDocumentation","src":"22618:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"215666a8","id":14638,"implemented":true,"kind":"function","modifiers":[],"name":"getDailyPriceShiftBase","nameLocation":"22660:22:58","nodeType":"FunctionDefinition","parameters":{"id":14631,"nodeType":"ParameterList","parameters":[],"src":"22682:2:58"},"returnParameters":{"id":14634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14633,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14638,"src":"22708:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14632,"name":"uint256","nodeType":"ElementaryTypeName","src":"22708:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22707:9:58"},"scope":16089,"src":"22651:110:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16537],"body":{"id":14647,"nodeType":"Block","src":"22877:40:58","statements":[{"expression":{"id":14645,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"22894:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"functionReturnParameters":14644,"id":14646,"nodeType":"Return","src":"22887:23:58"}]},"documentation":{"id":14639,"nodeType":"StructuredDocumentation","src":"22767:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"6bd838c7","id":14648,"implemented":true,"kind":"function","modifiers":[],"name":"getPriceRatioState","nameLocation":"22809:18:58","nodeType":"FunctionDefinition","parameters":{"id":14640,"nodeType":"ParameterList","parameters":[],"src":"22827:2:58"},"returnParameters":{"id":14644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14648,"src":"22853:22:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":14642,"nodeType":"UserDefinedTypeName","pathNode":{"id":14641,"name":"PriceRatioState","nameLocations":["22853:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"22853:15:58"},"referencedDeclaration":16635,"src":"22853:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"src":"22852:24:58"},"scope":16089,"src":"22800:117:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16543],"body":{"id":14660,"nodeType":"Block","src":"23034:83:58","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":14656,"name":"_computeCurrentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"23082:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23082:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14654,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"23051:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23063:18:58","memberName":"fourthRootScaled18","nodeType":"MemberAccess","referencedDeclaration":17700,"src":"23051:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23051:59:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14653,"id":14659,"nodeType":"Return","src":"23044:66:58"}]},"documentation":{"id":14649,"nodeType":"StructuredDocumentation","src":"22923:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"569ee350","id":14661,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentFourthRootPriceRatio","nameLocation":"22965:34:58","nodeType":"FunctionDefinition","parameters":{"id":14650,"nodeType":"ParameterList","parameters":[],"src":"22999:2:58"},"returnParameters":{"id":14653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14652,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14661,"src":"23025:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14651,"name":"uint256","nodeType":"ElementaryTypeName","src":"23025:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23024:9:58"},"scope":16089,"src":"22956:161:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16549],"body":{"id":14670,"nodeType":"Block","src":"23224:51:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14667,"name":"_computeCurrentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"23241:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23241:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14666,"id":14669,"nodeType":"Return","src":"23234:34:58"}]},"documentation":{"id":14662,"nodeType":"StructuredDocumentation","src":"23123:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"a103b044","id":14671,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentPriceRatio","nameLocation":"23165:24:58","nodeType":"FunctionDefinition","parameters":{"id":14663,"nodeType":"ParameterList","parameters":[],"src":"23189:2:58"},"returnParameters":{"id":14666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14665,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14671,"src":"23215:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14664,"name":"uint256","nodeType":"ElementaryTypeName","src":"23215:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23214:9:58"},"scope":16089,"src":"23156:119:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16555],"body":{"id":14680,"nodeType":"Block","src":"23378:50:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14677,"name":"_isPoolWithinTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"23395:24:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":14678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23395:26:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":14676,"id":14679,"nodeType":"Return","src":"23388:33:58"}]},"documentation":{"id":14672,"nodeType":"StructuredDocumentation","src":"23281:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"dfba3818","id":14681,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolWithinTargetRange","nameLocation":"23323:23:58","nodeType":"FunctionDefinition","parameters":{"id":14673,"nodeType":"ParameterList","parameters":[],"src":"23346:2:58"},"returnParameters":{"id":14676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14675,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14681,"src":"23372:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14674,"name":"bool","nodeType":"ElementaryTypeName","src":"23372:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23371:6:58"},"scope":16089,"src":"23314:114:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16563],"body":{"id":14727,"nodeType":"Block","src":"23635:548:58","statements":[{"assignments":[null,null,null,14693],"declarations":[null,null,null,{"constant":false,"id":14693,"mutability":"mutable","name":"balancesScaled18","nameLocation":"23669:16:58","nodeType":"VariableDeclaration","scope":14727,"src":"23652:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14691,"name":"uint256","nodeType":"ElementaryTypeName","src":"23652:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14692,"nodeType":"ArrayTypeName","src":"23652:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14701,"initialValue":{"arguments":[{"arguments":[{"id":14698,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23721:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23713:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14696,"name":"address","nodeType":"ElementaryTypeName","src":"23713:7:58","typeDescriptions":{}}},"id":14699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23713:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14694,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"23689:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23696:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"23689:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":14700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23689:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"23645:82:58"},{"assignments":[14703],"declarations":[{"constant":false,"id":14703,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"23745:22:58","nodeType":"VariableDeclaration","scope":14727,"src":"23737:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14702,"name":"uint256","nodeType":"ElementaryTypeName","src":"23737:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14704,"nodeType":"VariableDeclarationStatement","src":"23737:30:58"},{"assignments":[14706],"declarations":[{"constant":false,"id":14706,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"23785:22:58","nodeType":"VariableDeclaration","scope":14727,"src":"23777:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14705,"name":"uint256","nodeType":"ElementaryTypeName","src":"23777:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14707,"nodeType":"VariableDeclarationStatement","src":"23777:30:58"},{"expression":{"id":14715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14708,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14703,"src":"23819:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14709,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14706,"src":"23843:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14710,"name":"virtualBalancesChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14687,"src":"23867:22:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":14711,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23818:72:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14713,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"23937:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14712,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"23893:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":14714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23893:70:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"src":"23818:145:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14716,"nodeType":"ExpressionStatement","src":"23818:145:58"},{"expression":{"id":14725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14717,"name":"isWithinTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14685,"src":"23974:19:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14720,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14693,"src":"24045:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14721,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14703,"src":"24075:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14722,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14706,"src":"24111:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14723,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"24147:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":14718,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"23996:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24008:23:58","memberName":"isPoolWithinTargetRange","nodeType":"MemberAccess","referencedDeclaration":17382,"src":"23996:35:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256,uint256) pure returns (bool)"}},"id":14724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23996:180:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"23974:202:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14726,"nodeType":"ExpressionStatement","src":"23974:202:58"}]},"documentation":{"id":14682,"nodeType":"StructuredDocumentation","src":"23434:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"c480b9e6","id":14728,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolWithinTargetRangeUsingCurrentVirtualBalances","nameLocation":"23476:50:58","nodeType":"FunctionDefinition","parameters":{"id":14683,"nodeType":"ParameterList","parameters":[],"src":"23526:2:58"},"returnParameters":{"id":14688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14685,"mutability":"mutable","name":"isWithinTargetRange","nameLocation":"23581:19:58","nodeType":"VariableDeclaration","scope":14728,"src":"23576:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14684,"name":"bool","nodeType":"ElementaryTypeName","src":"23576:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":14687,"mutability":"mutable","name":"virtualBalancesChanged","nameLocation":"23607:22:58","nodeType":"VariableDeclaration","scope":14728,"src":"23602:27:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14686,"name":"bool","nodeType":"ElementaryTypeName","src":"23602:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23575:55:58"},"scope":16089,"src":"23467:716:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16571],"body":{"id":14756,"nodeType":"Block","src":"24302:223:58","statements":[{"assignments":[null,null,null,14740],"declarations":[null,null,null,{"constant":false,"id":14740,"mutability":"mutable","name":"currentBalancesScaled18","nameLocation":"24336:23:58","nodeType":"VariableDeclaration","scope":14756,"src":"24319:40:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14738,"name":"uint256","nodeType":"ElementaryTypeName","src":"24319:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14739,"nodeType":"ArrayTypeName","src":"24319:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14748,"initialValue":{"arguments":[{"arguments":[{"id":14745,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24395:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24387:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14743,"name":"address","nodeType":"ElementaryTypeName","src":"24387:7:58","typeDescriptions":{}}},"id":14746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24387:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14741,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"24363:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24370:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"24363:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":14747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24363:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"24312:89:58"},{"expression":{"arguments":[{"id":14751,"name":"currentBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14740,"src":"24450:23:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14752,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"24475:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":14753,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"24497:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"}],"expression":{"id":14749,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"24418:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24430:19:58","memberName":"computeCenteredness","nodeType":"MemberAccess","referencedDeclaration":17468,"src":"24418:31:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,bool)"}},"id":14754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24418:100:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":14735,"id":14755,"nodeType":"Return","src":"24411:107:58"}]},"documentation":{"id":14729,"nodeType":"StructuredDocumentation","src":"24189:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"cd80a1af","id":14757,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentPoolCenteredness","nameLocation":"24231:30:58","nodeType":"FunctionDefinition","parameters":{"id":14730,"nodeType":"ParameterList","parameters":[],"src":"24261:2:58"},"returnParameters":{"id":14735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14757,"src":"24287:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14731,"name":"uint256","nodeType":"ElementaryTypeName","src":"24287:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14757,"src":"24296:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14733,"name":"bool","nodeType":"ElementaryTypeName","src":"24296:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"24286:15:58"},"scope":16089,"src":"24222:303:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16578],"body":{"id":14929,"nodeType":"Block","src":"24660:1551:58","statements":[{"expression":{"id":14774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14764,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"24670:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14766,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24675:20:58","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":16341,"src":"24670:25:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":14771,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24736:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24728:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14769,"name":"address","nodeType":"ElementaryTypeName","src":"24728:7:58","typeDescriptions":{}}},"id":14772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24728:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14767,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"24698:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24705:22:58","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":1933,"src":"24698:29:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":14773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24698:44:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"24670:72:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14775,"nodeType":"ExpressionStatement","src":"24670:72:58"},{"expression":{"id":14787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":14776,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"24755:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24760:10:58","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":16344,"src":"24755:15:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":14779,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24752:19:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":14784,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24807:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14783,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24799:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14782,"name":"address","nodeType":"ElementaryTypeName","src":"24799:7:58","typeDescriptions":{}}},"id":14785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24799:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14780,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"24774:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24781:17:58","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":1895,"src":"24774:24:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":14786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24774:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"24752:61:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14788,"nodeType":"ExpressionStatement","src":"24752:61:58"},{"expression":{"id":14800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14789,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"24823:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24828:23:58","memberName":"staticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16346,"src":"24823:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"components":[{"arguments":[{"id":14796,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24897:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24889:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14794,"name":"address","nodeType":"ElementaryTypeName","src":"24889:7:58","typeDescriptions":{}}},"id":14797,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24889:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24888:15:58","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14792,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"24854:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24861:26:58","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2071,"src":"24854:33:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":14799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24854:50:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24823:81:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14801,"nodeType":"ExpressionStatement","src":"24823:81:58"},{"expression":{"id":14807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14802,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"24914:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24919:11:58","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":16348,"src":"24914:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":14805,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6302,"src":"24933:11:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24933:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24914:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14808,"nodeType":"ExpressionStatement","src":"24914:32:58"},{"expression":{"id":14813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14809,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"24957:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14811,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"24962:13:58","memberName":"lastTimestamp","nodeType":"MemberAccess","referencedDeclaration":16350,"src":"24957:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14812,"name":"_lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"24978:14:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"24957:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14814,"nodeType":"ExpressionStatement","src":"24957:35:58"},{"expression":{"id":14820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14815,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25002:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14817,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25007:19:58","memberName":"lastVirtualBalances","nodeType":"MemberAccess","referencedDeclaration":16353,"src":"25002:24:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":14818,"name":"_getLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15899,"src":"25029:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":14819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25029:25:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"25002:52:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":14821,"nodeType":"ExpressionStatement","src":"25002:52:58"},{"expression":{"id":14826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14822,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25064:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25069:19:58","memberName":"dailyPriceShiftBase","nodeType":"MemberAccess","referencedDeclaration":16357,"src":"25064:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14825,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"25091:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"25064:47:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14827,"nodeType":"ExpressionStatement","src":"25064:47:58"},{"expression":{"id":14835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14828,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25121:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14830,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25126:23:58","memberName":"dailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":16355,"src":"25121:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":14831,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25152:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14832,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25157:19:58","memberName":"dailyPriceShiftBase","nodeType":"MemberAccess","referencedDeclaration":16357,"src":"25152:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25177:25:58","memberName":"toDailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":17660,"src":"25152:50:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25152:52:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25121:83:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14836,"nodeType":"ExpressionStatement","src":"25121:83:58"},{"expression":{"id":14841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14837,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25214:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14839,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25219:18:58","memberName":"centerednessMargin","nodeType":"MemberAccess","referencedDeclaration":16359,"src":"25214:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14840,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"25240:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"25214:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14842,"nodeType":"ExpressionStatement","src":"25214:45:58"},{"assignments":[14845],"declarations":[{"constant":false,"id":14845,"mutability":"mutable","name":"state","nameLocation":"25293:5:58","nodeType":"VariableDeclaration","scope":14929,"src":"25270:28:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":14844,"nodeType":"UserDefinedTypeName","pathNode":{"id":14843,"name":"PriceRatioState","nameLocations":["25270:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"25270:15:58"},"referencedDeclaration":16635,"src":"25270:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"id":14847,"initialValue":{"id":14846,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"25301:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"nodeType":"VariableDeclarationStatement","src":"25270:47:58"},{"expression":{"id":14853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14848,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25327:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25332:25:58","memberName":"startFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16365,"src":"25327:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14851,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"25360:5:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":14852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25366:25:58","memberName":"startFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16628,"src":"25360:31:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"25327:64:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14854,"nodeType":"ExpressionStatement","src":"25327:64:58"},{"expression":{"id":14860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14855,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25401:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25406:23:58","memberName":"endFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16367,"src":"25401:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14858,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"25432:5:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":14859,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25438:23:58","memberName":"endFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16630,"src":"25432:29:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"25401:60:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14861,"nodeType":"ExpressionStatement","src":"25401:60:58"},{"expression":{"id":14867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14862,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25471:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25476:25:58","memberName":"priceRatioUpdateStartTime","nodeType":"MemberAccess","referencedDeclaration":16369,"src":"25471:30:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14865,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"25504:5:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":14866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25510:25:58","memberName":"priceRatioUpdateStartTime","nodeType":"MemberAccess","referencedDeclaration":16632,"src":"25504:31:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"25471:64:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":14868,"nodeType":"ExpressionStatement","src":"25471:64:58"},{"expression":{"id":14874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14869,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25545:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14871,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25550:23:58","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16371,"src":"25545:28:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14872,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"25576:5:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":14873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25582:23:58","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16634,"src":"25576:29:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"25545:60:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":14875,"nodeType":"ExpressionStatement","src":"25545:60:58"},{"assignments":[14878],"declarations":[{"constant":false,"id":14878,"mutability":"mutable","name":"poolConfig","nameLocation":"25634:10:58","nodeType":"VariableDeclaration","scope":14929,"src":"25616:28:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":14877,"nodeType":"UserDefinedTypeName","pathNode":{"id":14876,"name":"PoolConfig","nameLocations":["25616:10:58"],"nodeType":"IdentifierPath","referencedDeclaration":2343,"src":"25616:10:58"},"referencedDeclaration":2343,"src":"25616:10:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"id":14886,"initialValue":{"arguments":[{"arguments":[{"id":14883,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25676:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14882,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25668:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14881,"name":"address","nodeType":"ElementaryTypeName","src":"25668:7:58","typeDescriptions":{}}},"id":14884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25668:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14879,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"25647:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25654:13:58","memberName":"getPoolConfig","nodeType":"MemberAccess","referencedDeclaration":1942,"src":"25647:20:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolConfig_$2343_memory_ptr_$","typeString":"function (address) view external returns (struct PoolConfig memory)"}},"id":14885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25647:35:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"25616:66:58"},{"expression":{"id":14892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14887,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25692:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14889,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25697:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":16373,"src":"25692:22:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14890,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14878,"src":"25717:10:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"id":14891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25728:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":2338,"src":"25717:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25692:53:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14893,"nodeType":"ExpressionStatement","src":"25692:53:58"},{"expression":{"id":14899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14894,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25755:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25760:12:58","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":16375,"src":"25755:17:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14897,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14878,"src":"25775:10:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"id":14898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25786:12:58","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":2340,"src":"25775:23:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25755:43:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14900,"nodeType":"ExpressionStatement","src":"25755:43:58"},{"expression":{"id":14906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14901,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"25808:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"25813:20:58","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":16377,"src":"25808:25:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":14904,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14878,"src":"25836:10:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2343_memory_ptr","typeString":"struct PoolConfig memory"}},"id":14905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25847:20:58","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":2342,"src":"25836:31:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"25808:59:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14907,"nodeType":"ExpressionStatement","src":"25808:59:58"},{"condition":{"expression":{"id":14908,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"26001:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14909,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26006:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":16373,"src":"26001:22:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14928,"nodeType":"IfStatement","src":"25997:208:58","trueBody":{"id":14927,"nodeType":"Block","src":"26025:180:58","statements":[{"expression":{"id":14915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14910,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"26039:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14912,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26044:17:58","memberName":"currentPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16361,"src":"26039:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":14913,"name":"_computeCurrentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"26064:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":14914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26064:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26039:52:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14916,"nodeType":"ExpressionStatement","src":"26039:52:58"},{"expression":{"id":14925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14917,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"26105:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26110:27:58","memberName":"currentFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16363,"src":"26105:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":14922,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14762,"src":"26171:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData memory"}},"id":14923,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26176:17:58","memberName":"currentPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16361,"src":"26171:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":14920,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"26140:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":14921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26152:18:58","memberName":"fourthRootScaled18","nodeType":"MemberAccess","referencedDeclaration":17700,"src":"26140:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":14924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26140:54:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26105:89:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14926,"nodeType":"ExpressionStatement","src":"26105:89:58"}]}}]},"documentation":{"id":14758,"nodeType":"StructuredDocumentation","src":"24531:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"2c357688","id":14930,"implemented":true,"kind":"function","modifiers":[],"name":"getReClammPoolDynamicData","nameLocation":"24573:25:58","nodeType":"FunctionDefinition","parameters":{"id":14759,"nodeType":"ParameterList","parameters":[],"src":"24598:2:58"},"returnParameters":{"id":14763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14762,"mutability":"mutable","name":"data","nameLocation":"24654:4:58","nodeType":"VariableDeclaration","scope":14930,"src":"24624:34:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData"},"typeName":{"id":14761,"nodeType":"UserDefinedTypeName","pathNode":{"id":14760,"name":"ReClammPoolDynamicData","nameLocations":["24624:22:58"],"nodeType":"IdentifierPath","referencedDeclaration":16378,"src":"24624:22:58"},"referencedDeclaration":16378,"src":"24624:22:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_storage_ptr","typeString":"struct ReClammPoolDynamicData"}},"visibility":"internal"}],"src":"24623:36:58"},"scope":16089,"src":"24564:1647:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16585],"body":{"id":15046,"nodeType":"Block","src":"26350:1171:58","statements":[{"expression":{"id":14947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14937,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26381:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26386:6:58","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":16305,"src":"26381:11:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":14944,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"26424:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26416:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14942,"name":"address","nodeType":"ElementaryTypeName","src":"26416:7:58","typeDescriptions":{}}},"id":14945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26416:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14940,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"26395:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26402:13:58","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1883,"src":"26395:20:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":14946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26395:35:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"26381:49:58","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":14948,"nodeType":"ExpressionStatement","src":"26381:49:58"},{"expression":{"id":14960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":14949,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26441:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14951,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26446:21:58","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":16308,"src":"26441:26:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":14952,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"26440:30:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":14957,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"26506:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":14956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26498:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14955,"name":"address","nodeType":"ElementaryTypeName","src":"26498:7:58","typeDescriptions":{}}},"id":14958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26498:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14953,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"26473:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":14954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26480:17:58","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":1895,"src":"26473:24:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":14959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26473:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"26440:72:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14961,"nodeType":"ExpressionStatement","src":"26440:72:58"},{"expression":{"id":14966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14962,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26522:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26527:23:58","memberName":"tokenAPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":16310,"src":"26522:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14965,"name":"_TOKEN_A_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"26553:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26522:59:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14967,"nodeType":"ExpressionStatement","src":"26522:59:58"},{"expression":{"id":14972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14968,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26591:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26596:23:58","memberName":"tokenBPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":16312,"src":"26591:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14971,"name":"_TOKEN_B_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13552,"src":"26622:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26591:59:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14973,"nodeType":"ExpressionStatement","src":"26591:59:58"},{"expression":{"id":14978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14974,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26660:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26665:20:58","memberName":"minSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16314,"src":"26660:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14977,"name":"_MIN_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13518,"src":"26688:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26660:52:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14979,"nodeType":"ExpressionStatement","src":"26660:52:58"},{"expression":{"id":14984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14980,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26722:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26727:20:58","memberName":"maxSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":16316,"src":"26722:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14983,"name":"_MAX_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13521,"src":"26750:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26722:52:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14985,"nodeType":"ExpressionStatement","src":"26722:52:58"},{"expression":{"id":14990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14986,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26811:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26816:15:58","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":16318,"src":"26811:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14989,"name":"_INITIAL_MIN_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"26834:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26811:41:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14991,"nodeType":"ExpressionStatement","src":"26811:41:58"},{"expression":{"id":14996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14992,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26862:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":14994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26867:15:58","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":16320,"src":"26862:20:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":14995,"name":"_INITIAL_MAX_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"26885:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26862:41:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14997,"nodeType":"ExpressionStatement","src":"26862:41:58"},{"expression":{"id":15002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":14998,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26913:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26918:18:58","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":16322,"src":"26913:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15001,"name":"_INITIAL_TARGET_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13544,"src":"26939:21:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26913:47:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15003,"nodeType":"ExpressionStatement","src":"26913:47:58"},{"expression":{"id":15008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15004,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"26970:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15006,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"26975:30:58","memberName":"initialDailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":16324,"src":"26970:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15007,"name":"_INITIAL_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13546,"src":"27008:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26970:73:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15009,"nodeType":"ExpressionStatement","src":"26970:73:58"},{"expression":{"id":15014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15010,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27053:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15012,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27058:25:58","memberName":"initialCenterednessMargin","nodeType":"MemberAccess","referencedDeclaration":16326,"src":"27053:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15013,"name":"_INITIAL_CENTEREDNESS_MARGIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"27086:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27053:61:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15015,"nodeType":"ExpressionStatement","src":"27053:61:58"},{"expression":{"id":15020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15016,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27153:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27158:26:58","memberName":"maxDailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":16328,"src":"27153:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15019,"name":"_MAX_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"27187:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27153:65:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15021,"nodeType":"ExpressionStatement","src":"27153:65:58"},{"expression":{"id":15026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15022,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27228:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27233:28:58","memberName":"maxDailyPriceRatioUpdateRate","nodeType":"MemberAccess","referencedDeclaration":16330,"src":"27228:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15025,"name":"_MAX_DAILY_PRICE_RATIO_UPDATE_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13529,"src":"27264:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27228:70:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15027,"nodeType":"ExpressionStatement","src":"27228:70:58"},{"expression":{"id":15032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15028,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27308:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15030,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27313:27:58","memberName":"minPriceRatioUpdateDuration","nodeType":"MemberAccess","referencedDeclaration":16332,"src":"27308:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15031,"name":"_MIN_PRICE_RATIO_UPDATE_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13527,"src":"27343:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27308:67:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15033,"nodeType":"ExpressionStatement","src":"27308:67:58"},{"expression":{"id":15038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15034,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27385:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27390:18:58","memberName":"minPriceRatioDelta","nodeType":"MemberAccess","referencedDeclaration":16334,"src":"27385:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15037,"name":"_MIN_PRICE_RATIO_DELTA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13532,"src":"27411:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27385:48:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15039,"nodeType":"ExpressionStatement","src":"27385:48:58"},{"expression":{"id":15044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15040,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14935,"src":"27443:4:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData memory"}},"id":15042,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"27448:29:58","memberName":"balanceRatioAndPriceTolerance","nodeType":"MemberAccess","referencedDeclaration":16336,"src":"27443:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15043,"name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13538,"src":"27480:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27443:71:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15045,"nodeType":"ExpressionStatement","src":"27443:71:58"}]},"documentation":{"id":14931,"nodeType":"StructuredDocumentation","src":"26217:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"7f118b90","id":15047,"implemented":true,"kind":"function","modifiers":[],"name":"getReClammPoolImmutableData","nameLocation":"26259:27:58","nodeType":"FunctionDefinition","parameters":{"id":14932,"nodeType":"ParameterList","parameters":[],"src":"26286:2:58"},"returnParameters":{"id":14936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14935,"mutability":"mutable","name":"data","nameLocation":"26344:4:58","nodeType":"VariableDeclaration","scope":15047,"src":"26312:36:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData"},"typeName":{"id":14934,"nodeType":"UserDefinedTypeName","pathNode":{"id":14933,"name":"ReClammPoolImmutableData","nameLocations":["26312:24:58"],"nodeType":"IdentifierPath","referencedDeclaration":16337,"src":"26312:24:58"},"referencedDeclaration":16337,"src":"26312:24:58","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_storage_ptr","typeString":"struct ReClammPoolImmutableData"}},"visibility":"internal"}],"src":"26311:38:58"},"scope":16089,"src":"26250:1271:58","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[16597],"body":{"id":15155,"nodeType":"Block","src":"28044:2146:58","statements":[{"expression":{"id":15073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15067,"name":"actualPriceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15065,"src":"28054:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15070,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15052,"src":"28137:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15071,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"28176:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15068,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3320,"src":"28088:18:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$3320_$","typeString":"type(library GradualValueChange)"}},"id":15069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28107:16:58","memberName":"resolveStartTime","nodeType":"MemberAccess","referencedDeclaration":3202,"src":"28088:35:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":15072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28088:121:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28054:155:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15074,"nodeType":"ExpressionStatement","src":"28054:155:58"},{"assignments":[15076],"declarations":[{"constant":false,"id":15076,"mutability":"mutable","name":"updateDuration","nameLocation":"28228:14:58","nodeType":"VariableDeclaration","scope":15155,"src":"28220:22:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15075,"name":"uint256","nodeType":"ElementaryTypeName","src":"28220:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15080,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15077,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"28245:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15078,"name":"actualPriceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15065,"src":"28271:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28245:57:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28220:82:58"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15081,"name":"updateDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15076,"src":"28395:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15082,"name":"_MIN_PRICE_RATIO_UPDATE_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13527,"src":"28412:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28395:49:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15088,"nodeType":"IfStatement","src":"28391:121:58","trueBody":{"id":15087,"nodeType":"Block","src":"28446:66:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15084,"name":"PriceRatioUpdateDurationTooShort","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16439,"src":"28467:32:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28467:34:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15086,"nodeType":"RevertStatement","src":"28460:41:58"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15089,"name":"_updateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"28522:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28522:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15091,"nodeType":"ExpressionStatement","src":"28522:24:58"},{"assignments":[15093],"declarations":[{"constant":false,"id":15093,"mutability":"mutable","name":"startPriceRatio","nameLocation":"28565:15:58","nodeType":"VariableDeclaration","scope":15155,"src":"28557:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15092,"name":"uint256","nodeType":"ElementaryTypeName","src":"28557:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15099,"initialValue":{"arguments":[{"id":15095,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"28619:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15096,"name":"actualPriceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15065,"src":"28646:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15097,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15054,"src":"28691:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15094,"name":"_startPriceRatioUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15437,"src":"28583:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) returns (uint256)"}},"id":15098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28583:141:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28557:167:58"},{"assignments":[15101],"declarations":[{"constant":false,"id":15101,"mutability":"mutable","name":"priceRatioDelta","nameLocation":"28743:15:58","nodeType":"VariableDeclaration","scope":15155,"src":"28735:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15100,"name":"uint256","nodeType":"ElementaryTypeName","src":"28735:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15112,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15102,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"28761:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":15103,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"28778:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28761:32:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15108,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"28854:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15109,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"28872:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28854:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28761:124:58","trueExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15105,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"28808:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15106,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"28824:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28808:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28735:150:58"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15113,"name":"priceRatioDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15101,"src":"28900:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15114,"name":"_MIN_PRICE_RATIO_DELTA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13532,"src":"28918:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28900:40:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15121,"nodeType":"IfStatement","src":"28896:118:58","trueBody":{"id":15120,"nodeType":"Block","src":"28942:72:58","statements":[{"errorCall":{"arguments":[{"id":15117,"name":"priceRatioDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15101,"src":"28987:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15116,"name":"PriceRatioDeltaBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16447,"src":"28963:23:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":15118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28963:40:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15119,"nodeType":"RevertStatement","src":"28956:47:58"}]}},{"assignments":[15123],"declarations":[{"constant":false,"id":15123,"mutability":"mutable","name":"actualDailyPriceRatioUpdateRate","nameLocation":"29799:31:58","nodeType":"VariableDeclaration","scope":15155,"src":"29791:39:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15122,"name":"uint256","nodeType":"ElementaryTypeName","src":"29791:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15146,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15124,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"29833:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15125,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"29849:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29833:31:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15138,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"29985:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"31","id":15139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30003:6:58","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_86400_by_1","typeString":"int_const 86400"},"value":"1"},"src":"29985:24:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15141,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"30011:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15142,"name":"updateDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15076,"src":"30027:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30011:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15136,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"29968:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29979:5:58","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4616,"src":"29968:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29968:74:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"29833:209:58","trueExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15129,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15050,"src":"29896:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"31","id":15130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29912:6:58","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_86400_by_1","typeString":"int_const 86400"},"value":"1"},"src":"29896:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15132,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15093,"src":"29920:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15133,"name":"updateDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15076,"src":"29938:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29920:32:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15127,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"29879:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29890:5:58","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4616,"src":"29879:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29879:74:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29791:251:58"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15147,"name":"actualDailyPriceRatioUpdateRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15123,"src":"30057:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15148,"name":"_MAX_DAILY_PRICE_RATIO_UPDATE_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13529,"src":"30091:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30057:68:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15154,"nodeType":"IfStatement","src":"30053:131:58","trueBody":{"id":15153,"nodeType":"Block","src":"30127:57:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15150,"name":"PriceRatioUpdateTooFast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16442,"src":"30148:23:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30148:25:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15152,"nodeType":"RevertStatement","src":"30141:32:58"}]}}]},"documentation":{"id":15048,"nodeType":"StructuredDocumentation","src":"27698:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"a6d2e718","id":15156,"implemented":true,"kind":"function","modifiers":[{"id":15057,"kind":"modifierInvocation","modifierName":{"id":15056,"name":"onlyWhenInitialized","nameLocations":["27908:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":13591,"src":"27908:19:58"},"nodeType":"ModifierInvocation","src":"27908:19:58"},{"arguments":[{"arguments":[{"id":15061,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27975:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27967:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15059,"name":"address","nodeType":"ElementaryTypeName","src":"27967:7:58","typeDescriptions":{}}},"id":15062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27967:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15063,"kind":"modifierInvocation","modifierName":{"id":15058,"name":"onlySwapFeeManagerOrGovernance","nameLocations":["27936:30:58"],"nodeType":"IdentifierPath","referencedDeclaration":6865,"src":"27936:30:58"},"nodeType":"ModifierInvocation","src":"27936:45:58"}],"name":"startPriceRatioUpdate","nameLocation":"27740:21:58","nodeType":"FunctionDefinition","parameters":{"id":15055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15050,"mutability":"mutable","name":"endPriceRatio","nameLocation":"27779:13:58","nodeType":"VariableDeclaration","scope":15156,"src":"27771:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15049,"name":"uint256","nodeType":"ElementaryTypeName","src":"27771:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15052,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"27810:25:58","nodeType":"VariableDeclaration","scope":15156,"src":"27802:33:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15051,"name":"uint256","nodeType":"ElementaryTypeName","src":"27802:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15054,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"27853:23:58","nodeType":"VariableDeclaration","scope":15156,"src":"27845:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15053,"name":"uint256","nodeType":"ElementaryTypeName","src":"27845:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27761:121:58"},"returnParameters":{"id":15066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15065,"mutability":"mutable","name":"actualPriceRatioUpdateStartTime","nameLocation":"28007:31:58","nodeType":"VariableDeclaration","scope":15156,"src":"27999:39:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15064,"name":"uint256","nodeType":"ElementaryTypeName","src":"27999:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27998:41:58"},"scope":16089,"src":"27731:2459:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16601],"body":{"id":15199,"nodeType":"Block","src":"30336:388:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15168,"name":"_updateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"30346:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30346:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15170,"nodeType":"ExpressionStatement","src":"30346:24:58"},{"assignments":[15173],"declarations":[{"constant":false,"id":15173,"mutability":"mutable","name":"priceRatioState","nameLocation":"30404:15:58","nodeType":"VariableDeclaration","scope":15199,"src":"30381:38:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":15172,"nodeType":"UserDefinedTypeName","pathNode":{"id":15171,"name":"PriceRatioState","nameLocations":["30381:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"30381:15:58"},"referencedDeclaration":16635,"src":"30381:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"id":15175,"initialValue":{"id":15174,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"30422:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"nodeType":"VariableDeclarationStatement","src":"30381:57:58"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15176,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15173,"src":"30452:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":15177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30468:23:58","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16634,"src":"30452:39:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15178,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"30494:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":15179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30500:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"30494:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30452:57:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15185,"nodeType":"IfStatement","src":"30448:118:58","trueBody":{"id":15184,"nodeType":"Block","src":"30511:55:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15181,"name":"PriceRatioNotUpdating","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16450,"src":"30532:21:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30532:23:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15183,"nodeType":"RevertStatement","src":"30525:30:58"}]}},{"assignments":[15187],"declarations":[{"constant":false,"id":15187,"mutability":"mutable","name":"currentPriceRatio","nameLocation":"30584:17:58","nodeType":"VariableDeclaration","scope":15199,"src":"30576:25:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15186,"name":"uint256","nodeType":"ElementaryTypeName","src":"30576:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15190,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":15188,"name":"_computeCurrentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"30604:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":15189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30604:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30576:55:58"},{"expression":{"arguments":[{"id":15192,"name":"currentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15187,"src":"30665:17:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15193,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"30684:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":15194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30690:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"30684:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15195,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"30701:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":15196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30707:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"30701:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15191,"name":"_startPriceRatioUpdate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15437,"src":"30642:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) returns (uint256)"}},"id":15197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30642:75:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15198,"nodeType":"ExpressionStatement","src":"30642:75:58"}]},"documentation":{"id":15157,"nodeType":"StructuredDocumentation","src":"30196:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"d4a5b63a","id":15200,"implemented":true,"kind":"function","modifiers":[{"id":15160,"kind":"modifierInvocation","modifierName":{"id":15159,"name":"onlyWhenInitialized","nameLocations":["30270:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":13591,"src":"30270:19:58"},"nodeType":"ModifierInvocation","src":"30270:19:58"},{"arguments":[{"arguments":[{"id":15164,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30329:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30321:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15162,"name":"address","nodeType":"ElementaryTypeName","src":"30321:7:58","typeDescriptions":{}}},"id":15165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30321:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15166,"kind":"modifierInvocation","modifierName":{"id":15161,"name":"onlySwapFeeManagerOrGovernance","nameLocations":["30290:30:58"],"nodeType":"IdentifierPath","referencedDeclaration":6865,"src":"30290:30:58"},"nodeType":"ModifierInvocation","src":"30290:45:58"}],"name":"stopPriceRatioUpdate","nameLocation":"30238:20:58","nodeType":"FunctionDefinition","parameters":{"id":15158,"nodeType":"ParameterList","parameters":[],"src":"30258:2:58"},"returnParameters":{"id":15167,"nodeType":"ParameterList","parameters":[],"src":"30336:0:58"},"scope":16089,"src":"30229:495:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16609],"body":{"id":15222,"nodeType":"Block","src":"31008:186:58","statements":[{"expression":{"arguments":[{"id":15219,"name":"newDailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15203,"src":"31160:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15218,"name":"_setDailyPriceShiftExponentAndUpdateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15453,"src":"31108:51:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) returns (uint256)"}},"id":15220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31108:79:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15217,"id":15221,"nodeType":"Return","src":"31101:86:58"}]},"documentation":{"id":15201,"nodeType":"StructuredDocumentation","src":"30730:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"c66dbc4b","id":15223,"implemented":true,"kind":"function","modifiers":[{"id":15206,"kind":"modifierInvocation","modifierName":{"id":15205,"name":"onlyWhenInitialized","nameLocations":["30874:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":13591,"src":"30874:19:58"},"nodeType":"ModifierInvocation","src":"30874:19:58"},{"id":15208,"kind":"modifierInvocation","modifierName":{"id":15207,"name":"onlyWhenVaultIsLocked","nameLocations":["30902:21:58"],"nodeType":"IdentifierPath","referencedDeclaration":13572,"src":"30902:21:58"},"nodeType":"ModifierInvocation","src":"30902:21:58"},{"arguments":[{"arguments":[{"id":15212,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30971:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30963:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15210,"name":"address","nodeType":"ElementaryTypeName","src":"30963:7:58","typeDescriptions":{}}},"id":15213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30963:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15214,"kind":"modifierInvocation","modifierName":{"id":15209,"name":"onlySwapFeeManagerOrGovernance","nameLocations":["30932:30:58"],"nodeType":"IdentifierPath","referencedDeclaration":6865,"src":"30932:30:58"},"nodeType":"ModifierInvocation","src":"30932:45:58"}],"name":"setDailyPriceShiftExponent","nameLocation":"30772:26:58","nodeType":"FunctionDefinition","parameters":{"id":15204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15203,"mutability":"mutable","name":"newDailyPriceShiftExponent","nameLocation":"30816:26:58","nodeType":"VariableDeclaration","scope":15223,"src":"30808:34:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15202,"name":"uint256","nodeType":"ElementaryTypeName","src":"30808:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30798:50:58"},"returnParameters":{"id":15217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15223,"src":"30995:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15215,"name":"uint256","nodeType":"ElementaryTypeName","src":"30995:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30994:9:58"},"scope":16089,"src":"30763:431:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[16615],"body":{"id":15245,"nodeType":"Block","src":"31472:86:58","statements":[{"expression":{"arguments":[{"id":15242,"name":"newCenterednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15226,"src":"31529:21:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15241,"name":"_setCenterednessMarginAndUpdateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15519,"src":"31482:46:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31482:69:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15244,"nodeType":"ExpressionStatement","src":"31482:69:58"}]},"documentation":{"id":15224,"nodeType":"StructuredDocumentation","src":"31200:28:58","text":"@inheritdoc IReClammPool"},"functionSelector":"0673d09a","id":15246,"implemented":true,"kind":"function","modifiers":[{"id":15229,"kind":"modifierInvocation","modifierName":{"id":15228,"name":"onlyWhenInitialized","nameLocations":["31334:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":13591,"src":"31334:19:58"},"nodeType":"ModifierInvocation","src":"31334:19:58"},{"id":15231,"kind":"modifierInvocation","modifierName":{"id":15230,"name":"onlyWhenVaultIsLocked","nameLocations":["31362:21:58"],"nodeType":"IdentifierPath","referencedDeclaration":13572,"src":"31362:21:58"},"nodeType":"ModifierInvocation","src":"31362:21:58"},{"id":15233,"kind":"modifierInvocation","modifierName":{"id":15232,"name":"onlyWithinTargetRange","nameLocations":["31392:21:58"],"nodeType":"IdentifierPath","referencedDeclaration":13619,"src":"31392:21:58"},"nodeType":"ModifierInvocation","src":"31392:21:58"},{"arguments":[{"arguments":[{"id":15237,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31461:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31453:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15235,"name":"address","nodeType":"ElementaryTypeName","src":"31453:7:58","typeDescriptions":{}}},"id":15238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31453:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15239,"kind":"modifierInvocation","modifierName":{"id":15234,"name":"onlySwapFeeManagerOrGovernance","nameLocations":["31422:30:58"],"nodeType":"IdentifierPath","referencedDeclaration":6865,"src":"31422:30:58"},"nodeType":"ModifierInvocation","src":"31422:45:58"}],"name":"setCenterednessMargin","nameLocation":"31242:21:58","nodeType":"FunctionDefinition","parameters":{"id":15227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15226,"mutability":"mutable","name":"newCenterednessMargin","nameLocation":"31281:21:58","nodeType":"VariableDeclaration","scope":15246,"src":"31273:29:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15225,"name":"uint256","nodeType":"ElementaryTypeName","src":"31273:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31263:45:58"},"returnParameters":{"id":15240,"nodeType":"ParameterList","parameters":[],"src":"31472:0:58"},"scope":16089,"src":"31233:325:58","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15274,"nodeType":"Block","src":"31920:351:58","statements":[{"expression":{"id":15272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":15258,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15252,"src":"31931:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15259,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15254,"src":"31955:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15260,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15256,"src":"31979:7:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15261,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"31930:57:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15264,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15249,"src":"32045:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15265,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"32075:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":15266,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"32109:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":15267,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"32143:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":15268,"name":"_lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"32177:14:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":15269,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"32205:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":15270,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"32238:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}],"expression":{"id":15262,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"31990:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32002:29:58","memberName":"computeCurrentVirtualBalances","nodeType":"MemberAccess","referencedDeclaration":17117,"src":"31990:41:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint64_$_t_struct$_PriceRatioState_$16635_storage_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint32,uint64,struct PriceRatioState storage pointer) view returns (uint256,uint256,bool)"}},"id":15271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31990:274:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"src":"31930:334:58","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15273,"nodeType":"ExpressionStatement","src":"31930:334:58"}]},"id":15275,"implemented":true,"kind":"function","modifiers":[],"name":"_computeCurrentVirtualBalances","nameLocation":"31739:30:58","nodeType":"FunctionDefinition","parameters":{"id":15250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15249,"mutability":"mutable","name":"balancesScaled18","nameLocation":"31796:16:58","nodeType":"VariableDeclaration","scope":15275,"src":"31779:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15247,"name":"uint256","nodeType":"ElementaryTypeName","src":"31779:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15248,"nodeType":"ArrayTypeName","src":"31779:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"31769:49:58"},"returnParameters":{"id":15257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15252,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"31850:22:58","nodeType":"VariableDeclaration","scope":15275,"src":"31842:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15251,"name":"uint256","nodeType":"ElementaryTypeName","src":"31842:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15254,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"31882:22:58","nodeType":"VariableDeclaration","scope":15275,"src":"31874:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15253,"name":"uint256","nodeType":"ElementaryTypeName","src":"31874:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15256,"mutability":"mutable","name":"changed","nameLocation":"31911:7:58","nodeType":"VariableDeclaration","scope":15275,"src":"31906:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15255,"name":"bool","nodeType":"ElementaryTypeName","src":"31906:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31841:78:58"},"scope":16089,"src":"31730:541:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15310,"nodeType":"Block","src":"32369:307:58","statements":[{"expression":{"id":15286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15282,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"32379:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15283,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"32402:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32418:9:58","memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":12013,"src":"32402:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32402:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"32379:50:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15287,"nodeType":"ExpressionStatement","src":"32379:50:58"},{"expression":{"id":15292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15288,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"32439:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15289,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"32462:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32478:9:58","memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":12013,"src":"32462:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32462:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"32439:50:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15293,"nodeType":"ExpressionStatement","src":"32439:50:58"},{"eventCall":{"arguments":[{"id":15295,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"32528:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15296,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"32545:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15294,"name":"VirtualBalancesUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16398,"src":"32505:22:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":15297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32505:56:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15298,"nodeType":"EmitStatement","src":"32500:61:58"},{"expression":{"arguments":[{"hexValue":"5669727475616c42616c616e63657355706461746564","id":15302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"32598:24:58","typeDescriptions":{"typeIdentifier":"t_stringliteral_fcfdbf33557681319fd16ad6ad14bda721abdd07d34825c21f74c9df31589115","typeString":"literal_string \"VirtualBalancesUpdated\""},"value":"VirtualBalancesUpdated"},{"arguments":[{"id":15305,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15277,"src":"32635:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15306,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15279,"src":"32652:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15303,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32624:3:58","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32628:6:58","memberName":"encode","nodeType":"MemberAccess","src":"32624:10:58","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32624:44:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_fcfdbf33557681319fd16ad6ad14bda721abdd07d34825c21f74c9df31589115","typeString":"literal_string \"VirtualBalancesUpdated\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15299,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"32572:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32579:18:58","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":2156,"src":"32572:25:58","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":15308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32572:97:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15309,"nodeType":"ExpressionStatement","src":"32572:97:58"}]},"id":15311,"implemented":true,"kind":"function","modifiers":[],"name":"_setLastVirtualBalances","nameLocation":"32286:23:58","nodeType":"FunctionDefinition","parameters":{"id":15280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15277,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"32318:15:58","nodeType":"VariableDeclaration","scope":15311,"src":"32310:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15276,"name":"uint256","nodeType":"ElementaryTypeName","src":"32310:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15279,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"32343:15:58","nodeType":"VariableDeclaration","scope":15311,"src":"32335:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15278,"name":"uint256","nodeType":"ElementaryTypeName","src":"32335:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32309:50:58"},"returnParameters":{"id":15281,"nodeType":"ParameterList","parameters":[],"src":"32369:0:58"},"scope":16089,"src":"32277:399:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15436,"nodeType":"Block","src":"32878:1600:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15322,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"32892:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15323,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"32920:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32892:51:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15325,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"32947:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":15326,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"32975:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":15327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32981:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"32975:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32947:43:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"32892:98:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15334,"nodeType":"IfStatement","src":"32888:154:58","trueBody":{"id":15333,"nodeType":"Block","src":"32992:50:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15330,"name":"InvalidStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16430,"src":"33013:16:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33013:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15332,"nodeType":"RevertStatement","src":"33006:25:58"}]}},{"assignments":[15337],"declarations":[{"constant":false,"id":15337,"mutability":"mutable","name":"priceRatioState","nameLocation":"33075:15:58","nodeType":"VariableDeclaration","scope":15436,"src":"33052:38:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":15336,"nodeType":"UserDefinedTypeName","pathNode":{"id":15335,"name":"PriceRatioState","nameLocations":["33052:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"33052:15:58"},"referencedDeclaration":16635,"src":"33052:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"id":15339,"initialValue":{"id":15338,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"33093:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"nodeType":"VariableDeclarationStatement","src":"33052:57:58"},{"assignments":[15341],"declarations":[{"constant":false,"id":15341,"mutability":"mutable","name":"endFourthRootPriceRatio","nameLocation":"33128:23:58","nodeType":"VariableDeclaration","scope":15436,"src":"33120:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15340,"name":"uint256","nodeType":"ElementaryTypeName","src":"33120:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15346,"initialValue":{"arguments":[{"id":15344,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15313,"src":"33185:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15342,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"33154:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33166:18:58","memberName":"fourthRootScaled18","nodeType":"MemberAccess","referencedDeclaration":17700,"src":"33154:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":15345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33154:45:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33120:79:58"},{"assignments":[15348],"declarations":[{"constant":false,"id":15348,"mutability":"mutable","name":"startFourthRootPriceRatio","nameLocation":"33218:25:58","nodeType":"VariableDeclaration","scope":15436,"src":"33210:33:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15347,"name":"uint256","nodeType":"ElementaryTypeName","src":"33210:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15349,"nodeType":"VariableDeclarationStatement","src":"33210:33:58"},{"condition":{"arguments":[{"arguments":[{"id":15354,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"33290:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33282:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15352,"name":"address","nodeType":"ElementaryTypeName","src":"33282:7:58","typeDescriptions":{}}},"id":15355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33282:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15350,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"33257:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33264:17:58","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":1873,"src":"33257:24:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view external returns (bool)"}},"id":15356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33257:39:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15378,"nodeType":"Block","src":"33463:121:58","statements":[{"expression":{"id":15372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15370,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"33477:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15371,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15341,"src":"33505:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33477:51:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15373,"nodeType":"ExpressionStatement","src":"33477:51:58"},{"expression":{"id":15376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15374,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15320,"src":"33542:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15375,"name":"endPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15313,"src":"33560:13:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33542:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15377,"nodeType":"ExpressionStatement","src":"33542:31:58"}]},"id":15379,"nodeType":"IfStatement","src":"33253:331:58","trueBody":{"id":15369,"nodeType":"Block","src":"33298:159:58","statements":[{"expression":{"id":15360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15357,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15320,"src":"33312:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":15358,"name":"_computeCurrentPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15658,"src":"33330:25:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":15359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33330:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33312:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15361,"nodeType":"ExpressionStatement","src":"33312:45:58"},{"expression":{"id":15367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15362,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"33371:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15365,"name":"startPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15320,"src":"33430:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15363,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"33399:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33411:18:58","memberName":"fourthRootScaled18","nodeType":"MemberAccess","referencedDeclaration":17700,"src":"33399:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33399:47:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33371:75:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15368,"nodeType":"ExpressionStatement","src":"33371:75:58"}]}},{"expression":{"id":15386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15380,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"33594:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":15382,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33610:25:58","memberName":"startFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16628,"src":"33594:41:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15383,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"33638:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33664:8:58","memberName":"toUint96","nodeType":"MemberAccess","referencedDeclaration":12125,"src":"33638:34:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint96_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint96)"}},"id":15385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33638:36:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"33594:80:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":15387,"nodeType":"ExpressionStatement","src":"33594:80:58"},{"expression":{"id":15394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15388,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"33684:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":15390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33700:23:58","memberName":"endFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16630,"src":"33684:39:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15391,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15341,"src":"33726:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33750:8:58","memberName":"toUint96","nodeType":"MemberAccess","referencedDeclaration":12125,"src":"33726:32:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint96_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint96)"}},"id":15393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33726:34:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"33684:76:58","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"id":15395,"nodeType":"ExpressionStatement","src":"33684:76:58"},{"expression":{"id":15402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15396,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"33770:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":15398,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33786:25:58","memberName":"priceRatioUpdateStartTime","nodeType":"MemberAccess","referencedDeclaration":16632,"src":"33770:41:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15399,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"33814:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33840:8:58","memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":12349,"src":"33814:34:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":15401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33814:36:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33770:80:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":15403,"nodeType":"ExpressionStatement","src":"33770:80:58"},{"expression":{"id":15410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":15404,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"33860:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":15406,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33876:23:58","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16634,"src":"33860:39:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15407,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"33902:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33926:8:58","memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":12349,"src":"33902:32:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":15409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33902:34:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33860:76:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":15411,"nodeType":"ExpressionStatement","src":"33860:76:58"},{"expression":{"id":15414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15412,"name":"_priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13555,"src":"33947:16:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15413,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15337,"src":"33966:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"src":"33947:34:58","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage","typeString":"struct PriceRatioState storage ref"}},"id":15415,"nodeType":"ExpressionStatement","src":"33947:34:58"},{"eventCall":{"arguments":[{"id":15417,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"34033:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15418,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15341,"src":"34072:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15419,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"34109:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15420,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"34148:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15416,"name":"PriceRatioStateUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16391,"src":"33997:22:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256,uint256)"}},"id":15421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33997:184:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15422,"nodeType":"EmitStatement","src":"33992:189:58"},{"expression":{"arguments":[{"hexValue":"5072696365526174696f537461746555706461746564","id":15426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34231:24:58","typeDescriptions":{"typeIdentifier":"t_stringliteral_285431584af1444bb2d4ebcf1c2a5d28a1a10db2f63975b174ae5f7ae219f0ad","typeString":"literal_string \"PriceRatioStateUpdated\""},"value":"PriceRatioStateUpdated"},{"arguments":[{"id":15429,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15348,"src":"34297:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15430,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15341,"src":"34340:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15431,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"34381:25:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15432,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15317,"src":"34424:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15427,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"34269:3:58","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15428,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34273:6:58","memberName":"encode","nodeType":"MemberAccess","src":"34269:10:58","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34269:192:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_285431584af1444bb2d4ebcf1c2a5d28a1a10db2f63975b174ae5f7ae219f0ad","typeString":"literal_string \"PriceRatioStateUpdated\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15423,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"34192:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34199:18:58","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":2156,"src":"34192:25:58","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":15434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34192:279:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15435,"nodeType":"ExpressionStatement","src":"34192:279:58"}]},"id":15437,"implemented":true,"kind":"function","modifiers":[],"name":"_startPriceRatioUpdate","nameLocation":"32691:22:58","nodeType":"FunctionDefinition","parameters":{"id":15318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15313,"mutability":"mutable","name":"endPriceRatio","nameLocation":"32731:13:58","nodeType":"VariableDeclaration","scope":15437,"src":"32723:21:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15312,"name":"uint256","nodeType":"ElementaryTypeName","src":"32723:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15315,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"32762:25:58","nodeType":"VariableDeclaration","scope":15437,"src":"32754:33:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15314,"name":"uint256","nodeType":"ElementaryTypeName","src":"32754:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15317,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"32805:23:58","nodeType":"VariableDeclaration","scope":15437,"src":"32797:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15316,"name":"uint256","nodeType":"ElementaryTypeName","src":"32797:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32713:121:58"},"returnParameters":{"id":15321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15320,"mutability":"mutable","name":"startPriceRatio","nameLocation":"32861:15:58","nodeType":"VariableDeclaration","scope":15437,"src":"32853:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15319,"name":"uint256","nodeType":"ElementaryTypeName","src":"32853:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32852:25:58"},"scope":16089,"src":"32682:1796:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15452,"nodeType":"Block","src":"34763:231:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15445,"name":"_updateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"34849:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34849:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15447,"nodeType":"ExpressionStatement","src":"34849:24:58"},{"expression":{"arguments":[{"id":15449,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15440,"src":"34963:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15448,"name":"_setDailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15505,"src":"34935:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) returns (uint256)"}},"id":15450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34935:52:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15444,"id":15451,"nodeType":"Return","src":"34928:59:58"}]},"documentation":{"id":15438,"nodeType":"StructuredDocumentation","src":"34484:139:58","text":"Using the pool balances to update the virtual balances is dangerous with an unlocked vault, since the balances\n are manipulable."},"id":15453,"implemented":true,"kind":"function","modifiers":[],"name":"_setDailyPriceShiftExponentAndUpdateVirtualBalances","nameLocation":"34637:51:58","nodeType":"FunctionDefinition","parameters":{"id":15441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15440,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"34706:23:58","nodeType":"VariableDeclaration","scope":15453,"src":"34698:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15439,"name":"uint256","nodeType":"ElementaryTypeName","src":"34698:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34688:47:58"},"returnParameters":{"id":15444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15453,"src":"34754:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15442,"name":"uint256","nodeType":"ElementaryTypeName","src":"34754:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34753:9:58"},"scope":16089,"src":"34628:366:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15504,"nodeType":"Block","src":"35097:850:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15460,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35111:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15461,"name":"_MAX_DAILY_PRICE_SHIFT_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13524,"src":"35137:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35111:57:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15467,"nodeType":"IfStatement","src":"35107:127:58","trueBody":{"id":15466,"nodeType":"Block","src":"35170:64:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15463,"name":"DailyPriceShiftExponentTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16436,"src":"35191:30:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35191:32:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15465,"nodeType":"RevertStatement","src":"35184:39:58"}]}},{"assignments":[15469],"declarations":[{"constant":false,"id":15469,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"35252:19:58","nodeType":"VariableDeclaration","scope":15504,"src":"35244:27:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15468,"name":"uint256","nodeType":"ElementaryTypeName","src":"35244:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15473,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15470,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35274:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35298:21:58","memberName":"toDailyPriceShiftBase","nodeType":"MemberAccess","referencedDeclaration":17643,"src":"35274:45:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":15472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35274:47:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"35244:77:58"},{"expression":{"id":15478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15474,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35507:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15475,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15469,"src":"35533:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35553:25:58","memberName":"toDailyPriceShiftExponent","nodeType":"MemberAccess","referencedDeclaration":17660,"src":"35533:45:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":15477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35533:47:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35507:73:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15479,"nodeType":"ExpressionStatement","src":"35507:73:58"},{"expression":{"id":15484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15480,"name":"_dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13559,"src":"35591:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15481,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15469,"src":"35614:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35634:9:58","memberName":"toUint128","nodeType":"MemberAccess","referencedDeclaration":12013,"src":"35614:29:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint128_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint128)"}},"id":15483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35614:31:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"35591:54:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"id":15485,"nodeType":"ExpressionStatement","src":"35591:54:58"},{"eventCall":{"arguments":[{"id":15487,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35692:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15488,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15469,"src":"35717:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15486,"name":"DailyPriceShiftExponentUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16405,"src":"35661:30:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":15489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35661:76:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15490,"nodeType":"EmitStatement","src":"35656:81:58"},{"expression":{"arguments":[{"hexValue":"4461696c79507269636553686966744578706f6e656e7455706461746564","id":15494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"35787:32:58","typeDescriptions":{"typeIdentifier":"t_stringliteral_03dce6fcdd16564802e3b07d5801d3d399cc6d2d85e416d804d906f09690d1fd","typeString":"literal_string \"DailyPriceShiftExponentUpdated\""},"value":"DailyPriceShiftExponentUpdated"},{"arguments":[{"id":15497,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35844:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15498,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15469,"src":"35869:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15495,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"35833:3:58","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35837:6:58","memberName":"encode","nodeType":"MemberAccess","src":"35833:10:58","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35833:56:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_03dce6fcdd16564802e3b07d5801d3d399cc6d2d85e416d804d906f09690d1fd","typeString":"literal_string \"DailyPriceShiftExponentUpdated\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15491,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"35748:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35755:18:58","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":2156,"src":"35748:25:58","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":15500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35748:151:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15501,"nodeType":"ExpressionStatement","src":"35748:151:58"},{"expression":{"id":15502,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15455,"src":"35917:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15459,"id":15503,"nodeType":"Return","src":"35910:30:58"}]},"id":15505,"implemented":true,"kind":"function","modifiers":[],"name":"_setDailyPriceShiftExponent","nameLocation":"35009:27:58","nodeType":"FunctionDefinition","parameters":{"id":15456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15455,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"35045:23:58","nodeType":"VariableDeclaration","scope":15505,"src":"35037:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15454,"name":"uint256","nodeType":"ElementaryTypeName","src":"35037:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35036:33:58"},"returnParameters":{"id":15459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15458,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15505,"src":"35088:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15457,"name":"uint256","nodeType":"ElementaryTypeName","src":"35088:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35087:9:58"},"scope":16089,"src":"35000:947:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15518,"nodeType":"Block","src":"36291:179:58","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15511,"name":"_updateVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15594,"src":"36386:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36386:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15513,"nodeType":"ExpressionStatement","src":"36386:24:58"},{"expression":{"arguments":[{"id":15515,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15508,"src":"36444:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15514,"name":"_setCenterednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15556,"src":"36421:22:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36421:42:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15517,"nodeType":"ExpressionStatement","src":"36421:42:58"}]},"documentation":{"id":15506,"nodeType":"StructuredDocumentation","src":"35953:240:58","text":" @dev This function relies on the pool balance, which can be manipulated if the vault is unlocked. Also, the pool\n must be within the target range before and after the operation, or the pool owner could arb the pool."},"id":15519,"implemented":true,"kind":"function","modifiers":[],"name":"_setCenterednessMarginAndUpdateVirtualBalances","nameLocation":"36207:46:58","nodeType":"FunctionDefinition","parameters":{"id":15509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15508,"mutability":"mutable","name":"centerednessMargin","nameLocation":"36262:18:58","nodeType":"VariableDeclaration","scope":15519,"src":"36254:26:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15507,"name":"uint256","nodeType":"ElementaryTypeName","src":"36254:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36253:28:58"},"returnParameters":{"id":15510,"nodeType":"ParameterList","parameters":[],"src":"36291:0:58"},"scope":16089,"src":"36198:272:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15555,"nodeType":"Block","src":"36736:448:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15525,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15522,"src":"36750:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":15526,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"36771:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36782:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"36771:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36750:35:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15533,"nodeType":"IfStatement","src":"36746:100:58","trueBody":{"id":15532,"nodeType":"Block","src":"36787:59:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15529,"name":"InvalidCenterednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16421,"src":"36808:25:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36808:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15531,"nodeType":"RevertStatement","src":"36801:34:58"}]}},{"expression":{"id":15539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15534,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"36971:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15537,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15522,"src":"37000:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36993:6:58","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":15535,"name":"uint64","nodeType":"ElementaryTypeName","src":"36993:6:58","typeDescriptions":{}}},"id":15538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36993:26:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"36971:48:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":15540,"nodeType":"ExpressionStatement","src":"36971:48:58"},{"eventCall":{"arguments":[{"id":15542,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15522,"src":"37061:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15541,"name":"CenterednessMarginUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16410,"src":"37035:25:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37035:45:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15544,"nodeType":"EmitStatement","src":"37030:50:58"},{"expression":{"arguments":[{"hexValue":"43656e74657265646e6573734d617267696e55706461746564","id":15548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37117:27:58","typeDescriptions":{"typeIdentifier":"t_stringliteral_a0626984a7e314a65c69132caed9c920da0c608244c4e37429ff2f1208861cb2","typeString":"literal_string \"CenterednessMarginUpdated\""},"value":"CenterednessMarginUpdated"},{"arguments":[{"id":15551,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15522,"src":"37157:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15549,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"37146:3:58","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15550,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37150:6:58","memberName":"encode","nodeType":"MemberAccess","src":"37146:10:58","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37146:30:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a0626984a7e314a65c69132caed9c920da0c608244c4e37429ff2f1208861cb2","typeString":"literal_string \"CenterednessMarginUpdated\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15545,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"37091:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37098:18:58","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":2156,"src":"37091:25:58","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":15553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37091:86:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15554,"nodeType":"ExpressionStatement","src":"37091:86:58"}]},"documentation":{"id":15520,"nodeType":"StructuredDocumentation","src":"36476:186:58","text":" @notice Sets the centeredness margin when the pool is created.\n @param centerednessMargin The new centerednessMargin value, which must be within the target range"},"id":15556,"implemented":true,"kind":"function","modifiers":[],"name":"_setCenterednessMargin","nameLocation":"36676:22:58","nodeType":"FunctionDefinition","parameters":{"id":15523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15522,"mutability":"mutable","name":"centerednessMargin","nameLocation":"36707:18:58","nodeType":"VariableDeclaration","scope":15556,"src":"36699:26:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15521,"name":"uint256","nodeType":"ElementaryTypeName","src":"36699:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36698:28:58"},"returnParameters":{"id":15524,"nodeType":"ParameterList","parameters":[],"src":"36736:0:58"},"scope":16089,"src":"36667:517:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15593,"nodeType":"Block","src":"37233:407:58","statements":[{"assignments":[null,null,null,15563],"declarations":[null,null,null,{"constant":false,"id":15563,"mutability":"mutable","name":"balancesScaled18","nameLocation":"37267:16:58","nodeType":"VariableDeclaration","scope":15593,"src":"37250:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15561,"name":"uint256","nodeType":"ElementaryTypeName","src":"37250:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15562,"nodeType":"ArrayTypeName","src":"37250:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":15571,"initialValue":{"arguments":[{"arguments":[{"id":15568,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"37319:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15567,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"37311:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15566,"name":"address","nodeType":"ElementaryTypeName","src":"37311:7:58","typeDescriptions":{}}},"id":15569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37311:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15564,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"37287:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37294:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"37287:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":15570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37287:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"37243:82:58"},{"assignments":[15573,15575,15577],"declarations":[{"constant":false,"id":15573,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"37344:22:58","nodeType":"VariableDeclaration","scope":15593,"src":"37336:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15572,"name":"uint256","nodeType":"ElementaryTypeName","src":"37336:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15575,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"37376:22:58","nodeType":"VariableDeclaration","scope":15593,"src":"37368:30:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15574,"name":"uint256","nodeType":"ElementaryTypeName","src":"37368:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15577,"mutability":"mutable","name":"changed","nameLocation":"37405:7:58","nodeType":"VariableDeclaration","scope":15593,"src":"37400:12:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15576,"name":"bool","nodeType":"ElementaryTypeName","src":"37400:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15581,"initialValue":{"arguments":[{"id":15579,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15563,"src":"37460:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":15578,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"37416:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":15580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37416:70:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"37335:151:58"},{"condition":{"id":15582,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15577,"src":"37500:7:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15589,"nodeType":"IfStatement","src":"37496:109:58","trueBody":{"id":15588,"nodeType":"Block","src":"37509:96:58","statements":[{"expression":{"arguments":[{"id":15584,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"37547:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15585,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"37571:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15583,"name":"_setLastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15311,"src":"37523:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256)"}},"id":15586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37523:71:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15587,"nodeType":"ExpressionStatement","src":"37523:71:58"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":15590,"name":"_updateTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15623,"src":"37615:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":15591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37615:18:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15592,"nodeType":"ExpressionStatement","src":"37615:18:58"}]},"id":15594,"implemented":true,"kind":"function","modifiers":[],"name":"_updateVirtualBalances","nameLocation":"37199:22:58","nodeType":"FunctionDefinition","parameters":{"id":15557,"nodeType":"ParameterList","parameters":[],"src":"37221:2:58"},"returnParameters":{"id":15558,"nodeType":"ParameterList","parameters":[],"src":"37233:0:58"},"scope":16089,"src":"37190:450:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15622,"nodeType":"Block","src":"37743:252:58","statements":[{"assignments":[15598],"declarations":[{"constant":false,"id":15598,"mutability":"mutable","name":"lastTimestamp32","nameLocation":"37760:15:58","nodeType":"VariableDeclaration","scope":15622,"src":"37753:22:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":15597,"name":"uint32","nodeType":"ElementaryTypeName","src":"37753:6:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":15603,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":15599,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"37778:5:58","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":15600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37784:9:58","memberName":"timestamp","nodeType":"MemberAccess","src":"37778:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37794:8:58","memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":12349,"src":"37778:24:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":15602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37778:26:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"37753:51:58"},{"expression":{"id":15606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15604,"name":"_lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13557,"src":"37814:14:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15605,"name":"lastTimestamp32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15598,"src":"37831:15:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"37814:32:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":15607,"nodeType":"ExpressionStatement","src":"37814:32:58"},{"eventCall":{"arguments":[{"id":15609,"name":"lastTimestamp32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15598,"src":"37883:15:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":15608,"name":"LastTimestampUpdated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16415,"src":"37862:20:58","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint32_$returns$__$","typeString":"function (uint32)"}},"id":15610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37862:37:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15611,"nodeType":"EmitStatement","src":"37857:42:58"},{"expression":{"arguments":[{"hexValue":"4c61737454696d657374616d7055706461746564","id":15615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"37936:22:58","typeDescriptions":{"typeIdentifier":"t_stringliteral_ee1c157455cb889c3532350d7f11bf00037863bd7a299447dc672d2a9a129b3b","typeString":"literal_string \"LastTimestampUpdated\""},"value":"LastTimestampUpdated"},{"arguments":[{"id":15618,"name":"lastTimestamp32","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15598,"src":"37971:15:58","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":15616,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"37960:3:58","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":15617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37964:6:58","memberName":"encode","nodeType":"MemberAccess","src":"37960:10:58","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":15619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37960:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ee1c157455cb889c3532350d7f11bf00037863bd7a299447dc672d2a9a129b3b","typeString":"literal_string \"LastTimestampUpdated\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":15612,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"37910:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37917:18:58","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":2156,"src":"37910:25:58","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":15620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37910:78:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15621,"nodeType":"ExpressionStatement","src":"37910:78:58"}]},"id":15623,"implemented":true,"kind":"function","modifiers":[],"name":"_updateTimestamp","nameLocation":"37715:16:58","nodeType":"FunctionDefinition","parameters":{"id":15595,"nodeType":"ParameterList","parameters":[],"src":"37731:2:58"},"returnParameters":{"id":15596,"nodeType":"ParameterList","parameters":[],"src":"37743:0:58"},"scope":16089,"src":"37706:289:58","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15657,"nodeType":"Block","src":"38570:311:58","statements":[{"assignments":[null,null,null,15633],"declarations":[null,null,null,{"constant":false,"id":15633,"mutability":"mutable","name":"balancesScaled18","nameLocation":"38604:16:58","nodeType":"VariableDeclaration","scope":15657,"src":"38587:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15631,"name":"uint256","nodeType":"ElementaryTypeName","src":"38587:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15632,"nodeType":"ArrayTypeName","src":"38587:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":15641,"initialValue":{"arguments":[{"arguments":[{"id":15638,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"38656:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"38648:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15636,"name":"address","nodeType":"ElementaryTypeName","src":"38648:7:58","typeDescriptions":{}}},"id":15639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38648:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15634,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"38624:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38631:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"38624:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":15640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38624:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"38580:82:58"},{"assignments":[15643,15645,null],"declarations":[{"constant":false,"id":15643,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"38681:15:58","nodeType":"VariableDeclaration","scope":15657,"src":"38673:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15642,"name":"uint256","nodeType":"ElementaryTypeName","src":"38673:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15645,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"38706:15:58","nodeType":"VariableDeclaration","scope":15657,"src":"38698:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15644,"name":"uint256","nodeType":"ElementaryTypeName","src":"38698:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":15649,"initialValue":{"arguments":[{"id":15647,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15633,"src":"38758:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":15646,"name":"_computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15275,"src":"38727:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory) view returns (uint256,uint256,bool)"}},"id":15648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38727:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"38672:103:58"},{"expression":{"arguments":[{"id":15652,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15633,"src":"38823:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15653,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15643,"src":"38841:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15654,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15645,"src":"38858:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15650,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"38793:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38805:17:58","memberName":"computePriceRatio","nodeType":"MemberAccess","referencedDeclaration":17581,"src":"38793:29:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256)"}},"id":15655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38793:81:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15628,"id":15656,"nodeType":"Return","src":"38786:88:58"}]},"documentation":{"id":15624,"nodeType":"StructuredDocumentation","src":"38001:495:58","text":" @notice Computes the fourth root of the current price ratio.\n @dev The function calculates the price ratio between tokens A and B using their real and virtual balances,\n then takes the fourth root of this ratio. The multiplication by FixedPoint.ONE before each sqrt operation\n is done to maintain precision in the fixed-point calculations.\n @return The fourth root of the current price ratio, maintaining precision through fixed-point arithmetic"},"id":15658,"implemented":true,"kind":"function","modifiers":[],"name":"_computeCurrentPriceRatio","nameLocation":"38510:25:58","nodeType":"FunctionDefinition","parameters":{"id":15625,"nodeType":"ParameterList","parameters":[],"src":"38535:2:58"},"returnParameters":{"id":15628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15627,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15658,"src":"38561:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15626,"name":"uint256","nodeType":"ElementaryTypeName","src":"38561:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38560:9:58"},"scope":16089,"src":"38501:380:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15685,"nodeType":"Block","src":"39058:325:58","statements":[{"assignments":[null,null,null,15668],"declarations":[null,null,null,{"constant":false,"id":15668,"mutability":"mutable","name":"balancesScaled18","nameLocation":"39092:16:58","nodeType":"VariableDeclaration","scope":15685,"src":"39075:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15666,"name":"uint256","nodeType":"ElementaryTypeName","src":"39075:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15667,"nodeType":"ArrayTypeName","src":"39075:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":15676,"initialValue":{"arguments":[{"arguments":[{"id":15673,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"39144:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39136:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15671,"name":"address","nodeType":"ElementaryTypeName","src":"39136:7:58","typeDescriptions":{}}},"id":15674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39136:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15669,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"39112:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39119:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"39112:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":15675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39112:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"39068:82:58"},{"expression":{"arguments":[{"id":15679,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15668,"src":"39233:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15680,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"39267:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":15681,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"39305:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":15682,"name":"_centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13561,"src":"39343:19:58","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"id":15677,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"39180:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39192:23:58","memberName":"isPoolWithinTargetRange","nodeType":"MemberAccess","referencedDeclaration":17382,"src":"39180:35:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256,uint256) pure returns (bool)"}},"id":15683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39180:196:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":15663,"id":15684,"nodeType":"Return","src":"39161:215:58"}]},"documentation":{"id":15659,"nodeType":"StructuredDocumentation","src":"38887:101:58","text":"@dev This function relies on the pool balance, which can be manipulated if the vault is unlocked."},"id":15686,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolWithinTargetRange","nameLocation":"39002:24:58","nodeType":"FunctionDefinition","parameters":{"id":15660,"nodeType":"ParameterList","parameters":[],"src":"39026:2:58"},"returnParameters":{"id":15663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15662,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15686,"src":"39052:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15661,"name":"bool","nodeType":"ElementaryTypeName","src":"39052:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"39051:6:58"},"scope":16089,"src":"38993:390:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15750,"nodeType":"Block","src":"39645:581:58","statements":[{"assignments":[15697],"declarations":[{"constant":false,"id":15697,"mutability":"mutable","name":"realBalanceRatio","nameLocation":"39663:16:58","nodeType":"VariableDeclaration","scope":15750,"src":"39655:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15696,"name":"uint256","nodeType":"ElementaryTypeName","src":"39655:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15706,"initialValue":{"arguments":[{"baseExpression":{"id":15702,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"39710:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15704,"indexExpression":{"id":15703,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"39727:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39710:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":15698,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15690,"src":"39682:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15700,"indexExpression":{"id":15699,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"39699:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39682:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39702:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"39682:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39682:48:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39655:75:58"},{"assignments":[15708],"declarations":[{"constant":false,"id":15708,"mutability":"mutable","name":"theoreticalBalanceRatio","nameLocation":"39748:23:58","nodeType":"VariableDeclaration","scope":15750,"src":"39740:31:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15707,"name":"uint256","nodeType":"ElementaryTypeName","src":"39740:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15717,"initialValue":{"arguments":[{"baseExpression":{"id":15713,"name":"theoreticalBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"39805:19:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15715,"indexExpression":{"id":15714,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"39825:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39805:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":15709,"name":"theoreticalBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15693,"src":"39774:19:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15711,"indexExpression":{"id":15710,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"39794:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39774:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39797:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"39774:30:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39774:54:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39740:88:58"},{"assignments":[15719],"declarations":[{"constant":false,"id":15719,"mutability":"mutable","name":"ratioLowerBound","nameLocation":"39847:15:58","nodeType":"VariableDeclaration","scope":15750,"src":"39839:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15718,"name":"uint256","nodeType":"ElementaryTypeName","src":"39839:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15727,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15725,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":15722,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"39897:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39908:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"39897:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15724,"name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13538,"src":"39914:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39897:51:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15720,"name":"theoreticalBalanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15708,"src":"39865:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39889:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"39865:31:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39865:84:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39839:110:58"},{"assignments":[15729],"declarations":[{"constant":false,"id":15729,"mutability":"mutable","name":"ratioUpperBound","nameLocation":"39967:15:58","nodeType":"VariableDeclaration","scope":15750,"src":"39959:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15728,"name":"uint256","nodeType":"ElementaryTypeName","src":"39959:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15737,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":15732,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"40017:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15733,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"40028:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"40017:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15734,"name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13538,"src":"40034:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40017:51:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15730,"name":"theoreticalBalanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15708,"src":"39985:23:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40009:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"39985:31:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39985:84:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"39959:110:58"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15738,"name":"realBalanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15697,"src":"40084:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15739,"name":"ratioLowerBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15719,"src":"40103:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40084:34:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15741,"name":"realBalanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15697,"src":"40122:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15742,"name":"ratioUpperBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15729,"src":"40141:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40122:34:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"40084:72:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15749,"nodeType":"IfStatement","src":"40080:140:58","trueBody":{"id":15748,"nodeType":"Block","src":"40158:62:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15745,"name":"BalanceRatioExceedsTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16459,"src":"40179:28:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40179:30:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15747,"nodeType":"RevertStatement","src":"40172:37:58"}]}}]},"documentation":{"id":15687,"nodeType":"StructuredDocumentation","src":"39389:100:58","text":"@dev Checks that the current balance ratio is within the initialization balance ratio tolerance."},"id":15751,"implemented":true,"kind":"function","modifiers":[],"name":"_checkInitializationBalanceRatio","nameLocation":"39503:32:58","nodeType":"FunctionDefinition","parameters":{"id":15694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15690,"mutability":"mutable","name":"balancesScaled18","nameLocation":"39562:16:58","nodeType":"VariableDeclaration","scope":15751,"src":"39545:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15688,"name":"uint256","nodeType":"ElementaryTypeName","src":"39545:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15689,"nodeType":"ArrayTypeName","src":"39545:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":15693,"mutability":"mutable","name":"theoreticalBalances","nameLocation":"39605:19:58","nodeType":"VariableDeclaration","scope":15751,"src":"39588:36:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15691,"name":"uint256","nodeType":"ElementaryTypeName","src":"39588:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15692,"nodeType":"ArrayTypeName","src":"39588:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"39535:95:58"},"returnParameters":{"id":15695,"nodeType":"ParameterList","parameters":[],"src":"39645:0:58"},"scope":16089,"src":"39494:732:58","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15826,"nodeType":"Block","src":"40775:854:58","statements":[{"assignments":[15769],"declarations":[{"constant":false,"id":15769,"mutability":"mutable","name":"spotPrice","nameLocation":"40865:9:58","nodeType":"VariableDeclaration","scope":15826,"src":"40857:17:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15768,"name":"uint256","nodeType":"ElementaryTypeName","src":"40857:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15783,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15777,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15755,"src":"40925:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15779,"indexExpression":{"id":15778,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"40942:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40925:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15780,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"40947:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40925:37:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15770,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15755,"src":"40878:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15772,"indexExpression":{"id":15771,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"40895:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40878:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15773,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15765,"src":"40900:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"40878:37:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15775,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"40877:39:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40917:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"40877:47:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40877:86:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"40857:106:58"},{"expression":{"arguments":[{"id":15785,"name":"spotPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15769,"src":"40987:9:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15786,"name":"targetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15761,"src":"40998:11:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15784,"name":"_comparePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15867,"src":"40973:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":15787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40973:37:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15788,"nodeType":"ExpressionStatement","src":"40973:37:58"},{"assignments":[15790],"declarations":[{"constant":false,"id":15790,"mutability":"mutable","name":"currentInvariant","nameLocation":"41029:16:58","nodeType":"VariableDeclaration","scope":15826,"src":"41021:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15789,"name":"uint256","nodeType":"ElementaryTypeName","src":"41021:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15799,"initialValue":{"arguments":[{"id":15793,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15755,"src":"41090:16:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":15794,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"41120:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15795,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15765,"src":"41149:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15796,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"41178:8:58","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2470_$","typeString":"type(enum Rounding)"}},"id":15797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"41187:10:58","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2469,"src":"41178:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}],"expression":{"id":15791,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"41048:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41060:16:58","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":16759,"src":"41048:28:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2470_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,enum Rounding) pure returns (uint256)"}},"id":15798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41048:159:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41021:186:58"},{"assignments":[15801],"declarations":[{"constant":false,"id":15801,"mutability":"mutable","name":"currentMinPrice","nameLocation":"41294:15:58","nodeType":"VariableDeclaration","scope":15826,"src":"41286:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15800,"name":"uint256","nodeType":"ElementaryTypeName","src":"41286:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15808,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15802,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15765,"src":"41313:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15803,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15765,"src":"41331:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41313:33:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15805,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"41312:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15806,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15790,"src":"41350:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41312:54:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41286:80:58"},{"expression":{"arguments":[{"id":15810,"name":"currentMinPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15801,"src":"41390:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15811,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15757,"src":"41407:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15809,"name":"_comparePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15867,"src":"41376:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":15812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41376:40:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15813,"nodeType":"ExpressionStatement","src":"41376:40:58"},{"assignments":[15815],"declarations":[{"constant":false,"id":15815,"mutability":"mutable","name":"currentMaxPrice","nameLocation":"41503:15:58","nodeType":"VariableDeclaration","scope":15826,"src":"41495:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15814,"name":"uint256","nodeType":"ElementaryTypeName","src":"41495:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15820,"initialValue":{"arguments":[{"id":15817,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15790,"src":"41538:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15818,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15763,"src":"41556:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15816,"name":"_computeMaxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15972,"src":"41521:16:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41521:51:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41495:77:58"},{"expression":{"arguments":[{"id":15822,"name":"currentMaxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15815,"src":"41596:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15823,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15759,"src":"41613:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15821,"name":"_comparePrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15867,"src":"41582:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":15824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41582:40:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15825,"nodeType":"ExpressionStatement","src":"41582:40:58"}]},"documentation":{"id":15752,"nodeType":"StructuredDocumentation","src":"40232:292:58","text":" @dev Checks that the current spot price is within the initialization tolerance of the price target, and that\n the total price range after initialization (i.e., with real balances) corresponds closely enough to the desired\n initial price range set on deployment."},"id":15827,"implemented":true,"kind":"function","modifiers":[],"name":"_checkInitializationPrices","nameLocation":"40538:26:58","nodeType":"FunctionDefinition","parameters":{"id":15766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15755,"mutability":"mutable","name":"balancesScaled18","nameLocation":"40591:16:58","nodeType":"VariableDeclaration","scope":15827,"src":"40574:33:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15753,"name":"uint256","nodeType":"ElementaryTypeName","src":"40574:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15754,"nodeType":"ArrayTypeName","src":"40574:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":15757,"mutability":"mutable","name":"minPrice","nameLocation":"40625:8:58","nodeType":"VariableDeclaration","scope":15827,"src":"40617:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15756,"name":"uint256","nodeType":"ElementaryTypeName","src":"40617:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15759,"mutability":"mutable","name":"maxPrice","nameLocation":"40651:8:58","nodeType":"VariableDeclaration","scope":15827,"src":"40643:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15758,"name":"uint256","nodeType":"ElementaryTypeName","src":"40643:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15761,"mutability":"mutable","name":"targetPrice","nameLocation":"40677:11:58","nodeType":"VariableDeclaration","scope":15827,"src":"40669:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15760,"name":"uint256","nodeType":"ElementaryTypeName","src":"40669:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15763,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"40706:15:58","nodeType":"VariableDeclaration","scope":15827,"src":"40698:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15762,"name":"uint256","nodeType":"ElementaryTypeName","src":"40698:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15765,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"40739:15:58","nodeType":"VariableDeclaration","scope":15827,"src":"40731:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15764,"name":"uint256","nodeType":"ElementaryTypeName","src":"40731:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"40564:196:58"},"returnParameters":{"id":15767,"nodeType":"ParameterList","parameters":[],"src":"40775:0:58"},"scope":16089,"src":"40529:1100:58","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15866,"nodeType":"Block","src":"41723:378:58","statements":[{"assignments":[15835],"declarations":[{"constant":false,"id":15835,"mutability":"mutable","name":"priceLowerBound","nameLocation":"41741:15:58","nodeType":"VariableDeclaration","scope":15866,"src":"41733:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15834,"name":"uint256","nodeType":"ElementaryTypeName","src":"41733:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15843,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":15838,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"41787:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"41798:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"41787:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15840,"name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13538,"src":"41804:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41787:51:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15836,"name":"initializationPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"41759:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41779:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"41759:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41759:80:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41733:106:58"},{"assignments":[15845],"declarations":[{"constant":false,"id":15845,"mutability":"mutable","name":"priceUpperBound","nameLocation":"41857:15:58","nodeType":"VariableDeclaration","scope":15866,"src":"41849:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15844,"name":"uint256","nodeType":"ElementaryTypeName","src":"41849:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15853,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"expression":{"id":15848,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"41903:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":15849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"41914:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"41903:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":15850,"name":"_BALANCE_RATIO_AND_PRICE_TOLERANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13538,"src":"41920:34:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41903:51:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15846,"name":"initializationPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15831,"src":"41875:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41895:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"41875:27:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41875:80:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"41849:106:58"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15854,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15829,"src":"41970:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15855,"name":"priceLowerBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15835,"src":"41985:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"41970:30:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15857,"name":"currentPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15829,"src":"42004:12:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":15858,"name":"priceUpperBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15845,"src":"42019:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42004:30:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"41970:64:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15865,"nodeType":"IfStatement","src":"41966:129:58","trueBody":{"id":15864,"nodeType":"Block","src":"42036:59:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15861,"name":"WrongInitializationPrices","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16462,"src":"42057:25:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42057:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15863,"nodeType":"RevertStatement","src":"42050:34:58"}]}}]},"id":15867,"implemented":true,"kind":"function","modifiers":[],"name":"_comparePrice","nameLocation":"41644:13:58","nodeType":"FunctionDefinition","parameters":{"id":15832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15829,"mutability":"mutable","name":"currentPrice","nameLocation":"41666:12:58","nodeType":"VariableDeclaration","scope":15867,"src":"41658:20:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15828,"name":"uint256","nodeType":"ElementaryTypeName","src":"41658:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15831,"mutability":"mutable","name":"initializationPrice","nameLocation":"41688:19:58","nodeType":"VariableDeclaration","scope":15867,"src":"41680:27:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15830,"name":"uint256","nodeType":"ElementaryTypeName","src":"41680:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"41657:51:58"},"returnParameters":{"id":15833,"nodeType":"ParameterList","parameters":[],"src":"41723:0:58"},"scope":16089,"src":"41635:466:58","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15898,"nodeType":"Block","src":"42183:219:58","statements":[{"assignments":[15877],"declarations":[{"constant":false,"id":15877,"mutability":"mutable","name":"lastVirtualBalances","nameLocation":"42210:19:58","nodeType":"VariableDeclaration","scope":15898,"src":"42193:36:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15875,"name":"uint256","nodeType":"ElementaryTypeName","src":"42193:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15876,"nodeType":"ArrayTypeName","src":"42193:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":15883,"initialValue":{"arguments":[{"hexValue":"32","id":15881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"42246:1:58","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":15880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"42232:13:58","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":15878,"name":"uint256","nodeType":"ElementaryTypeName","src":"42236:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15879,"nodeType":"ArrayTypeName","src":"42236:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":15882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42232:16:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"42193:55:58"},{"expression":{"id":15888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15884,"name":"lastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15877,"src":"42258:19:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15886,"indexExpression":{"id":15885,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"42278:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"42258:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15887,"name":"_lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13563,"src":"42283:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"42258:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15889,"nodeType":"ExpressionStatement","src":"42258:45:58"},{"expression":{"id":15894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15890,"name":"lastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15877,"src":"42313:19:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15892,"indexExpression":{"id":15891,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"42333:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"42313:22:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15893,"name":"_lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13565,"src":"42338:20:58","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"42313:45:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15895,"nodeType":"ExpressionStatement","src":"42313:45:58"},{"expression":{"id":15896,"name":"lastVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15877,"src":"42376:19:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":15872,"id":15897,"nodeType":"Return","src":"42369:26:58"}]},"id":15899,"implemented":true,"kind":"function","modifiers":[],"name":"_getLastVirtualBalances","nameLocation":"42116:23:58","nodeType":"FunctionDefinition","parameters":{"id":15868,"nodeType":"ParameterList","parameters":[],"src":"42139:2:58"},"returnParameters":{"id":15872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15899,"src":"42165:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15869,"name":"uint256","nodeType":"ElementaryTypeName","src":"42165:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15870,"nodeType":"ArrayTypeName","src":"42165:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"42164:18:58"},"scope":16089,"src":"42107:295:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15911,"nodeType":"Block","src":"42462:113:58","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":15902,"name":"_isPoolWithinTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15686,"src":"42476:24:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":15903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42476:26:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"42506:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"42476:35:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15910,"nodeType":"IfStatement","src":"42472:97:58","trueBody":{"id":15909,"nodeType":"Block","src":"42513:56:58","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15906,"name":"PoolOutsideTargetRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16427,"src":"42534:22:58","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42534:24:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15908,"nodeType":"RevertStatement","src":"42527:31:58"}]}}]},"id":15912,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolWithinTargetRange","nameLocation":"42417:28:58","nodeType":"FunctionDefinition","parameters":{"id":15900,"nodeType":"ParameterList","parameters":[],"src":"42445:2:58"},"returnParameters":{"id":15901,"nodeType":"ParameterList","parameters":[],"src":"42462:0:58"},"scope":16089,"src":"42408:167:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15953,"nodeType":"Block","src":"42688:501:58","statements":[{"assignments":[15922,15924,15926],"declarations":[{"constant":false,"id":15922,"mutability":"mutable","name":"minPriceScaled18","nameLocation":"42720:16:58","nodeType":"VariableDeclaration","scope":15953,"src":"42712:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15921,"name":"uint256","nodeType":"ElementaryTypeName","src":"42712:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15924,"mutability":"mutable","name":"maxPriceScaled18","nameLocation":"42758:16:58","nodeType":"VariableDeclaration","scope":15953,"src":"42750:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15923,"name":"uint256","nodeType":"ElementaryTypeName","src":"42750:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15926,"mutability":"mutable","name":"targetPriceScaled18","nameLocation":"42796:19:58","nodeType":"VariableDeclaration","scope":15953,"src":"42788:27:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15925,"name":"uint256","nodeType":"ElementaryTypeName","src":"42788:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15931,"initialValue":{"arguments":[{"id":15928,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15914,"src":"42861:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15929,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15916,"src":"42868:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15927,"name":"_getPriceSettingsAdjustedByRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16088,"src":"42828:32:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256,uint256,uint256)"}},"id":15930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42828:46:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"42698:176:58"},{"assignments":[15936,null,null,null],"declarations":[{"constant":false,"id":15936,"mutability":"mutable","name":"theoreticalBalancesScaled18","nameLocation":"42903:27:58","nodeType":"VariableDeclaration","scope":15953,"src":"42886:44:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15934,"name":"uint256","nodeType":"ElementaryTypeName","src":"42886:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15935,"nodeType":"ArrayTypeName","src":"42886:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null,null,null],"id":15943,"initialValue":{"arguments":[{"id":15939,"name":"minPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15922,"src":"43005:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15940,"name":"maxPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15924,"src":"43035:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15941,"name":"targetPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15926,"src":"43065:19:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15937,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"42940:11:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42952:39:58","memberName":"computeTheoreticalPriceRatioAndBalances","nodeType":"MemberAccess","referencedDeclaration":16986,"src":"42940:51:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256[] memory,uint256,uint256,uint256)"}},"id":15942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42940:154:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"42885:209:58"},{"expression":{"arguments":[{"baseExpression":{"id":15948,"name":"theoreticalBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15936,"src":"43151:27:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15950,"indexExpression":{"id":15949,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"43179:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43151:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":15944,"name":"theoreticalBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15936,"src":"43112:27:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15946,"indexExpression":{"id":15945,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"43140:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43112:30:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43143:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"43112:38:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43112:70:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15920,"id":15952,"nodeType":"Return","src":"43105:77:58"}]},"id":15954,"implemented":true,"kind":"function","modifiers":[],"name":"_computeInitialBalanceRatioScaled18","nameLocation":"42590:35:58","nodeType":"FunctionDefinition","parameters":{"id":15917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15914,"mutability":"mutable","name":"rateA","nameLocation":"42634:5:58","nodeType":"VariableDeclaration","scope":15954,"src":"42626:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15913,"name":"uint256","nodeType":"ElementaryTypeName","src":"42626:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15916,"mutability":"mutable","name":"rateB","nameLocation":"42649:5:58","nodeType":"VariableDeclaration","scope":15954,"src":"42641:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15915,"name":"uint256","nodeType":"ElementaryTypeName","src":"42641:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42625:30:58"},"returnParameters":{"id":15920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15919,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15954,"src":"42679:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15918,"name":"uint256","nodeType":"ElementaryTypeName","src":"42679:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"42678:9:58"},"scope":16089,"src":"42581:608:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15971,"nodeType":"Block","src":"43304:90:58","statements":[{"expression":{"arguments":[{"arguments":[{"id":15967,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15958,"src":"43370:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15965,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15958,"src":"43346:15:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43362:7:58","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"43346:23:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43346:40:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15963,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15956,"src":"43321:16:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43338:7:58","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"43321:24:58","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43321:66:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15962,"id":15970,"nodeType":"Return","src":"43314:73:58"}]},"id":15972,"implemented":true,"kind":"function","modifiers":[],"name":"_computeMaxPrice","nameLocation":"43204:16:58","nodeType":"FunctionDefinition","parameters":{"id":15959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15956,"mutability":"mutable","name":"currentInvariant","nameLocation":"43229:16:58","nodeType":"VariableDeclaration","scope":15972,"src":"43221:24:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15955,"name":"uint256","nodeType":"ElementaryTypeName","src":"43221:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15958,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"43255:15:58","nodeType":"VariableDeclaration","scope":15972,"src":"43247:23:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15957,"name":"uint256","nodeType":"ElementaryTypeName","src":"43247:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43220:51:58"},"returnParameters":{"id":15962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15972,"src":"43295:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15960,"name":"uint256","nodeType":"ElementaryTypeName","src":"43295:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43294:9:58"},"scope":16089,"src":"43195:199:58","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16008,"nodeType":"Block","src":"43479:185:58","statements":[{"assignments":[null,15983,null,null],"declarations":[null,{"constant":false,"id":15983,"mutability":"mutable","name":"tokenInfo","nameLocation":"43511:9:58","nodeType":"VariableDeclaration","scope":16008,"src":"43492:28:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":15981,"nodeType":"UserDefinedTypeName","pathNode":{"id":15980,"name":"TokenInfo","nameLocations":["43492:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"43492:9:58"},"referencedDeclaration":2442,"src":"43492:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"id":15982,"nodeType":"ArrayTypeName","src":"43492:11:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},null,null],"id":15991,"initialValue":{"arguments":[{"arguments":[{"id":15988,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"43560:4:58","typeDescriptions":{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ReClammPool_$16089","typeString":"contract ReClammPool"}],"id":15987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"43552:7:58","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15986,"name":"address","nodeType":"ElementaryTypeName","src":"43552:7:58","typeDescriptions":{}}},"id":15989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43552:13:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15984,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"43528:6:58","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"id":15985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43535:16:58","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":1924,"src":"43528:23:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":15990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43528:38:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$7403_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"43489:77:58"},{"expression":{"id":15998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15992,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15975,"src":"43577:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":15994,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15983,"src":"43599:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":15996,"indexExpression":{"id":15995,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"43609:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43599:12:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}],"id":15993,"name":"_getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"43585:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$2442_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":15997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43585:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43577:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15999,"nodeType":"ExpressionStatement","src":"43577:35:58"},{"expression":{"id":16006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16000,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15977,"src":"43622:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":16002,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15983,"src":"43644:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2442_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":16004,"indexExpression":{"id":16003,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"43654:1:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43644:12:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}],"id":16001,"name":"_getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16031,"src":"43630:13:58","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$2442_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":16005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43630:27:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43622:35:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16007,"nodeType":"ExpressionStatement","src":"43622:35:58"}]},"id":16009,"implemented":true,"kind":"function","modifiers":[],"name":"_getTokenRates","nameLocation":"43409:14:58","nodeType":"FunctionDefinition","parameters":{"id":15973,"nodeType":"ParameterList","parameters":[],"src":"43423:2:58"},"returnParameters":{"id":15978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15975,"mutability":"mutable","name":"rateA","nameLocation":"43457:5:58","nodeType":"VariableDeclaration","scope":16009,"src":"43449:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15974,"name":"uint256","nodeType":"ElementaryTypeName","src":"43449:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15977,"mutability":"mutable","name":"rateB","nameLocation":"43472:5:58","nodeType":"VariableDeclaration","scope":16009,"src":"43464:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15976,"name":"uint256","nodeType":"ElementaryTypeName","src":"43464:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43448:30:58"},"scope":16089,"src":"43400:264:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16030,"nodeType":"Block","src":"43753:118:58","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"},"id":16021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16017,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16012,"src":"43770:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}},"id":16018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43780:9:58","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":2436,"src":"43770:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16019,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"43793:9:58","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2419_$","typeString":"type(enum TokenType)"}},"id":16020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"43803:9:58","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":2418,"src":"43793:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"src":"43770:42:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16026,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"43850:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"43861:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"43850:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"43770:94:58","trueExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":16022,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16012,"src":"43815:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo memory"}},"id":16023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43825:12:58","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":2439,"src":"43815:22:58","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$89","typeString":"contract IRateProvider"}},"id":16024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43838:7:58","memberName":"getRate","nodeType":"MemberAccess","referencedDeclaration":88,"src":"43815:30:58","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":16025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43815:32:58","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16016,"id":16029,"nodeType":"Return","src":"43763:101:58"}]},"id":16031,"implemented":true,"kind":"function","modifiers":[],"name":"_getTokenRate","nameLocation":"43679:13:58","nodeType":"FunctionDefinition","parameters":{"id":16013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16012,"mutability":"mutable","name":"tokenInfo","nameLocation":"43710:9:58","nodeType":"VariableDeclaration","scope":16031,"src":"43693:26:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":16011,"nodeType":"UserDefinedTypeName","pathNode":{"id":16010,"name":"TokenInfo","nameLocations":["43693:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":2442,"src":"43693:9:58"},"referencedDeclaration":2442,"src":"43693:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2442_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"src":"43692:28:58"},"returnParameters":{"id":16016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16015,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16031,"src":"43744:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16014,"name":"uint256","nodeType":"ElementaryTypeName","src":"43744:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43743:9:58"},"scope":16089,"src":"43670:201:58","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16087,"nodeType":"Block","src":"44051:908:58","statements":[{"expression":{"id":16050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16044,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16033,"src":"44061:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":16045,"name":"_TOKEN_A_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"44069:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16047,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"44108:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"44119:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"44108:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"44069:53:58","trueExpression":{"id":16046,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16033,"src":"44100:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44061:61:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16051,"nodeType":"ExpressionStatement","src":"44061:61:58"},{"expression":{"id":16058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16052,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"44132:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":16053,"name":"_TOKEN_B_PRICE_INCLUDES_RATE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13552,"src":"44140:28:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16055,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"44179:10:58","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16056,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"44190:3:58","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"44179:14:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"44140:53:58","trueExpression":{"id":16054,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"44171:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44132:61:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16059,"nodeType":"ExpressionStatement","src":"44132:61:58"},{"expression":{"id":16067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16060,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16038,"src":"44785:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16061,"name":"_INITIAL_MIN_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13540,"src":"44797:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":16062,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16033,"src":"44818:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44797:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16064,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"44796:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":16065,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"44827:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44796:36:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44785:47:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16068,"nodeType":"ExpressionStatement","src":"44785:47:58"},{"expression":{"id":16076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16069,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16040,"src":"44842:8:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16070,"name":"_INITIAL_MAX_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13542,"src":"44854:18:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":16071,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16033,"src":"44875:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44854:26:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16073,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"44853:28:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":16074,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"44884:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44853:36:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44842:47:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16077,"nodeType":"ExpressionStatement","src":"44842:47:58"},{"expression":{"id":16085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16078,"name":"targetPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16042,"src":"44899:11:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16079,"name":"_INITIAL_TARGET_PRICE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13544,"src":"44914:21:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":16080,"name":"rateA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16033,"src":"44938:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44914:29:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16082,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"44913:31:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":16083,"name":"rateB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16035,"src":"44947:5:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44913:39:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44899:53:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16086,"nodeType":"ExpressionStatement","src":"44899:53:58"}]},"id":16088,"implemented":true,"kind":"function","modifiers":[],"name":"_getPriceSettingsAdjustedByRates","nameLocation":"43886:32:58","nodeType":"FunctionDefinition","parameters":{"id":16036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16033,"mutability":"mutable","name":"rateA","nameLocation":"43936:5:58","nodeType":"VariableDeclaration","scope":16088,"src":"43928:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16032,"name":"uint256","nodeType":"ElementaryTypeName","src":"43928:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16035,"mutability":"mutable","name":"rateB","nameLocation":"43959:5:58","nodeType":"VariableDeclaration","scope":16088,"src":"43951:13:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16034,"name":"uint256","nodeType":"ElementaryTypeName","src":"43951:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43918:52:58"},"returnParameters":{"id":16043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16038,"mutability":"mutable","name":"minPrice","nameLocation":"44002:8:58","nodeType":"VariableDeclaration","scope":16088,"src":"43994:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16037,"name":"uint256","nodeType":"ElementaryTypeName","src":"43994:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16040,"mutability":"mutable","name":"maxPrice","nameLocation":"44020:8:58","nodeType":"VariableDeclaration","scope":16088,"src":"44012:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16039,"name":"uint256","nodeType":"ElementaryTypeName","src":"44012:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16042,"mutability":"mutable","name":"targetPrice","nameLocation":"44038:11:58","nodeType":"VariableDeclaration","scope":16088,"src":"44030:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16041,"name":"uint256","nodeType":"ElementaryTypeName","src":"44030:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"43993:57:58"},"scope":16089,"src":"43877:1082:58","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":16090,"src":"1970:42991:58","usedErrors":[60,1190,1378,3143,4527,4824,4827,4830,4833,6223,6230,6842,7596,7720,7722,9258,9263,9268,11548,16418,16421,16424,16427,16430,16433,16436,16439,16442,16447,16450,16453,16456,16459,16462,16652],"usedEvents":[7305,7337,7346,16391,16398,16405,16410,16415]}],"src":"82:44880:58"},"id":58},"contracts/ReClammPoolFactory.sol":{"ast":{"absolutePath":"contracts/ReClammPoolFactory.sol","exportedSymbols":{"BasePoolFactory":[2995],"IERC20":[7403],"IPoolVersion":[79],"IVault":[849],"LiquidityManagement":[2318],"PoolRoleAccounts":[2415],"ReClammPool":[16089],"ReClammPoolFactory":[16270],"ReClammPoolFactoryLib":[17777],"ReClammPoolParams":[16300],"ReClammPriceParams":[17720],"SafeCast":[13303],"TokenConfig":[2432],"Version":[4519]},"id":16271,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16091,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:59"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":16093,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":13304,"src":"72:75:59","symbolAliases":[{"foreign":{"id":16092,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"81:8:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":7404,"src":"194:72:59","symbolAliases":[{"foreign":{"id":16094,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"203:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","id":16097,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":80,"src":"268:110:59","symbolAliases":[{"foreign":{"id":16096,"name":"IPoolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":79,"src":"277:12:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":16099,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":850,"src":"379:81:59","symbolAliases":[{"foreign":{"id":16098,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":849,"src":"388:6:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":16103,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":2610,"src":"461:141:59","symbolAliases":[{"foreign":{"id":16100,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"474:11:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16101,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2415,"src":"491:16:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16102,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2318,"src":"513:19:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","id":16105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":2996,"src":"604:93:59","symbolAliases":[{"foreign":{"id":16104,"name":"BasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2995,"src":"613:15:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":16107,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":4520,"src":"698:89:59","symbolAliases":[{"foreign":{"id":16106,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4519,"src":"707:7:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/ReClammPoolFactoryLib.sol","file":"./lib/ReClammPoolFactoryLib.sol","id":16110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":17778,"src":"789:92:59","symbolAliases":[{"foreign":{"id":16108,"name":"ReClammPoolFactoryLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17777,"src":"798:21:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":16109,"name":"ReClammPriceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17720,"src":"821:18:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/interfaces/IReClammPool.sol","file":"./interfaces/IReClammPool.sol","id":16112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":16617,"src":"882:66:59","symbolAliases":[{"foreign":{"id":16111,"name":"ReClammPoolParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16300,"src":"891:17:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ReClammPool.sol","file":"./ReClammPool.sol","id":16114,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16271,"sourceUnit":16090,"src":"949:48:59","symbolAliases":[{"foreign":{"id":16113,"name":"ReClammPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"958:11:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16116,"name":"IPoolVersion","nameLocations":["1063:12:59"],"nodeType":"IdentifierPath","referencedDeclaration":79,"src":"1063:12:59"},"id":16117,"nodeType":"InheritanceSpecifier","src":"1063:12:59"},{"baseName":{"id":16118,"name":"BasePoolFactory","nameLocations":["1077:15:59"],"nodeType":"IdentifierPath","referencedDeclaration":2995,"src":"1077:15:59"},"id":16119,"nodeType":"InheritanceSpecifier","src":"1077:15:59"},{"baseName":{"id":16120,"name":"Version","nameLocations":["1094:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":4519,"src":"1094:7:59"},"id":16121,"nodeType":"InheritanceSpecifier","src":"1094:7:59"}],"canonicalName":"ReClammPoolFactory","contractDependencies":[16089],"contractKind":"contract","documentation":{"id":16115,"nodeType":"StructuredDocumentation","src":"999:33:59","text":"@notice ReClammPool factory."},"fullyImplemented":true,"id":16270,"linearizedBaseContracts":[16270,4519,99,2995,3764,7081,7022,3400,3606,239,69,79],"name":"ReClammPoolFactory","nameLocation":"1041:18:59","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16124,"libraryName":{"id":16122,"name":"SafeCast","nameLocations":["1114:8:59"],"nodeType":"IdentifierPath","referencedDeclaration":13303,"src":"1114:8:59"},"nodeType":"UsingForDirective","src":"1108:27:59","typeName":{"id":16123,"name":"uint256","nodeType":"ElementaryTypeName","src":"1127:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":16126,"mutability":"mutable","name":"_poolVersion","nameLocation":"1156:12:59","nodeType":"VariableDeclaration","scope":16270,"src":"1141:27:59","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":16125,"name":"string","nodeType":"ElementaryTypeName","src":"1141:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":16153,"nodeType":"Block","src":"1424:43:59","statements":[{"expression":{"id":16151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16149,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"1434:12:59","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":16150,"name":"poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16135,"src":"1449:11:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1434:26:59","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":16152,"nodeType":"ExpressionStatement","src":"1434:26:59"}]},"id":16154,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":16138,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16129,"src":"1340:5:59","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},{"id":16139,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16131,"src":"1347:19:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"arguments":[{"id":16141,"name":"ReClammPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16089,"src":"1373:11:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammPool_$16089_$","typeString":"type(contract ReClammPool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_ReClammPool_$16089_$","typeString":"type(contract ReClammPool)"}],"id":16140,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1368:4:59","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":16142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:17:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_ReClammPool_$16089","typeString":"type(contract ReClammPool)"}},"id":16143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1386:12:59","memberName":"creationCode","nodeType":"MemberAccess","src":"1368:30:59","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":16144,"kind":"baseConstructorSpecifier","modifierName":{"id":16137,"name":"BasePoolFactory","nameLocations":["1324:15:59"],"nodeType":"IdentifierPath","referencedDeclaration":2995,"src":"1324:15:59"},"nodeType":"ModifierInvocation","src":"1324:75:59"},{"arguments":[{"id":16146,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16133,"src":"1408:14:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":16147,"kind":"baseConstructorSpecifier","modifierName":{"id":16145,"name":"Version","nameLocations":["1400:7:59"],"nodeType":"IdentifierPath","referencedDeclaration":4519,"src":"1400:7:59"},"nodeType":"ModifierInvocation","src":"1400:23:59"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16129,"mutability":"mutable","name":"vault","nameLocation":"1203:5:59","nodeType":"VariableDeclaration","scope":16154,"src":"1196:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"},"typeName":{"id":16128,"nodeType":"UserDefinedTypeName","pathNode":{"id":16127,"name":"IVault","nameLocations":["1196:6:59"],"nodeType":"IdentifierPath","referencedDeclaration":849,"src":"1196:6:59"},"referencedDeclaration":849,"src":"1196:6:59","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":16131,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"1225:19:59","nodeType":"VariableDeclaration","scope":16154,"src":"1218:26:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16130,"name":"uint32","nodeType":"ElementaryTypeName","src":"1218:6:59","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16133,"mutability":"mutable","name":"factoryVersion","nameLocation":"1268:14:59","nodeType":"VariableDeclaration","scope":16154,"src":"1254:28:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16132,"name":"string","nodeType":"ElementaryTypeName","src":"1254:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16135,"mutability":"mutable","name":"poolVersion","nameLocation":"1306:11:59","nodeType":"VariableDeclaration","scope":16154,"src":"1292:25:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16134,"name":"string","nodeType":"ElementaryTypeName","src":"1292:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1186:137:59"},"returnParameters":{"id":16148,"nodeType":"ParameterList","parameters":[],"src":"1424:0:59"},"scope":16270,"src":"1175:292:59","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[78],"body":{"id":16162,"nodeType":"Block","src":"1570:36:59","statements":[{"expression":{"id":16160,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"1587:12:59","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":16159,"id":16161,"nodeType":"Return","src":"1580:19:59"}]},"documentation":{"id":16155,"nodeType":"StructuredDocumentation","src":"1473:28:59","text":"@inheritdoc IPoolVersion"},"functionSelector":"3f819b6f","id":16163,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"1515:14:59","nodeType":"FunctionDefinition","parameters":{"id":16156,"nodeType":"ParameterList","parameters":[],"src":"1529:2:59"},"returnParameters":{"id":16159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16163,"src":"1555:13:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16157,"name":"string","nodeType":"ElementaryTypeName","src":"1555:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1554:15:59"},"scope":16270,"src":"1506:100:59","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":16268,"nodeType":"Block","src":"2767:1455:59","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16191,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16175,"src":"2781:12:59","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":16192,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2794:11:59","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":2414,"src":"2781:24:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":16195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2817:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":16194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2809:7:59","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16193,"name":"address","nodeType":"ElementaryTypeName","src":"2809:7:59","typeDescriptions":{}}},"id":16196,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2809:10:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2781:38:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16202,"nodeType":"IfStatement","src":"2777:101:59","trueBody":{"id":16201,"nodeType":"Block","src":"2821:57:59","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16198,"name":"StandardPoolWithCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"2842:23:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2842:25:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16200,"nodeType":"RevertStatement","src":"2835:32:59"}]}},{"expression":{"arguments":[{"id":16206,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16172,"src":"2930:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":16207,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"2938:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}],"expression":{"id":16203,"name":"ReClammPoolFactoryLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17777,"src":"2888:21:59","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammPoolFactoryLib_$17777_$","typeString":"type(library ReClammPoolFactoryLib)"}},"id":16205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2910:19:59","memberName":"validateTokenConfig","nodeType":"MemberAccess","referencedDeclaration":17776,"src":"2888:41:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr_$_t_struct$_ReClammPriceParams_$17720_memory_ptr_$returns$__$","typeString":"function (struct TokenConfig memory[] memory,struct ReClammPriceParams memory) pure"}},"id":16208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2888:62:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16209,"nodeType":"ExpressionStatement","src":"2888:62:59"},{"assignments":[16212],"declarations":[{"constant":false,"id":16212,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2988:19:59","nodeType":"VariableDeclaration","scope":16268,"src":"2961:46:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":16211,"nodeType":"UserDefinedTypeName","pathNode":{"id":16210,"name":"LiquidityManagement","nameLocations":["2961:19:59"],"nodeType":"IdentifierPath","referencedDeclaration":2318,"src":"2961:19:59"},"referencedDeclaration":2318,"src":"2961:19:59","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"id":16215,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":16213,"name":"getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"3010:29:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$2318_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":16214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3010:31:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}},"nodeType":"VariableDeclarationStatement","src":"2961:80:59"},{"expression":{"id":16220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16216,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"3051:19:59","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":16218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3071:14:59","memberName":"enableDonation","nodeType":"MemberAccess","referencedDeclaration":2317,"src":"3051:34:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":16219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3088:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3051:42:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16221,"nodeType":"ExpressionStatement","src":"3051:42:59"},{"expression":{"id":16226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":16222,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"3103:19:59","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":16224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3123:26:59","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":2311,"src":"3103:46:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":16225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3152:4:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3103:53:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16227,"nodeType":"ExpressionStatement","src":"3103:53:59"},{"expression":{"id":16256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16228,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16189,"src":"3167:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":16233,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16166,"src":"3269:4:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":16234,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16168,"src":"3303:6:59","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":16235,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"3340:12:59","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},{"expression":{"id":16236,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"3391:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":16237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3403:15:59","memberName":"initialMinPrice","nodeType":"MemberAccess","referencedDeclaration":17711,"src":"3391:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16238,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"3457:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":16239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3469:15:59","memberName":"initialMaxPrice","nodeType":"MemberAccess","referencedDeclaration":17713,"src":"3457:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16240,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"3526:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":16241,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3538:18:59","memberName":"initialTargetPrice","nodeType":"MemberAccess","referencedDeclaration":17715,"src":"3526:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16242,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"3603:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":16243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3615:23:59","memberName":"tokenAPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":17717,"src":"3603:35:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":16244,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16180,"src":"3685:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":16245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3697:23:59","memberName":"tokenBPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":17719,"src":"3685:35:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16246,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16182,"src":"3767:23:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16247,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16184,"src":"3832:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3851:8:59","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":12237,"src":"3832:27:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":16249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3832:29:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":16232,"name":"ReClammPoolParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16300,"src":"3223:17:59","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_ReClammPoolParams_$16300_storage_ptr_$","typeString":"type(struct ReClammPoolParams storage pointer)"}},"id":16250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3263:4:59","3295:6:59","3331:7:59","3374:15:59","3440:15:59","3506:18:59","3578:23:59","3660:23:59","3742:23:59","3812:18:59"],"names":["name","symbol","version","initialMinPrice","initialMaxPrice","initialTargetPrice","tokenAPriceIncludesRate","tokenBPriceIncludesRate","dailyPriceShiftExponent","centerednessMargin"],"nodeType":"FunctionCall","src":"3223:657:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":16251,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7067,"src":"3898:8:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$849_$","typeString":"function () view returns (contract IVault)"}},"id":16252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3898:10:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_ReClammPoolParams_$16300_memory_ptr","typeString":"struct ReClammPoolParams memory"},{"typeIdentifier":"t_contract$_IVault_$849","typeString":"contract IVault"}],"expression":{"id":16230,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3195:3:59","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3199:6:59","memberName":"encode","nodeType":"MemberAccess","src":"3195:10:59","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3195:727:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":16254,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16186,"src":"3936:4:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":16229,"name":"_create","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2938,"src":"3174:7:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) returns (address)"}},"id":16255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3174:776:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3167:783:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":16257,"nodeType":"ExpressionStatement","src":"3167:783:59"},{"expression":{"arguments":[{"id":16259,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16189,"src":"3997:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16260,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16172,"src":"4015:6:59","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":16261,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16177,"src":"4035:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":16262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4066:5:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":16263,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16175,"src":"4118:12:59","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":16264,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16189,"src":"4144:4:59","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16265,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16212,"src":"4186:19:59","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$2318_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":16258,"name":"_registerPoolWithVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2974,"src":"3961:22:59","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bool_$_t_struct$_PoolRoleAccounts_$2415_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$2318_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory)"}},"id":16266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3961:254:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16267,"nodeType":"ExpressionStatement","src":"3961:254:59"}]},"documentation":{"id":16164,"nodeType":"StructuredDocumentation","src":"1612:774:59","text":" @notice Deploys a new `ReClammPool`.\n @param name The name of the pool\n @param symbol The symbol of the pool\n @param tokens An array of descriptors for the tokens the pool will manage\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param swapFeePercentage Initial swap fee percentage\n @param priceParams Initial min, max and target prices; flags indicating whether token prices incorporate rates\n @param dailyPriceShiftExponent Virtual balances will change by 2^(dailyPriceShiftExponent) per day\n @param centerednessMargin How far the price can be from the center before the price range starts to move\n @param salt The salt value that will be passed to deployment"},"functionSelector":"b3595be0","id":16269,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"2400:6:59","nodeType":"FunctionDefinition","parameters":{"id":16187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16166,"mutability":"mutable","name":"name","nameLocation":"2430:4:59","nodeType":"VariableDeclaration","scope":16269,"src":"2416:18:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16165,"name":"string","nodeType":"ElementaryTypeName","src":"2416:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16168,"mutability":"mutable","name":"symbol","nameLocation":"2458:6:59","nodeType":"VariableDeclaration","scope":16269,"src":"2444:20:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16167,"name":"string","nodeType":"ElementaryTypeName","src":"2444:6:59","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16172,"mutability":"mutable","name":"tokens","nameLocation":"2495:6:59","nodeType":"VariableDeclaration","scope":16269,"src":"2474:27:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":16170,"nodeType":"UserDefinedTypeName","pathNode":{"id":16169,"name":"TokenConfig","nameLocations":["2474:11:59"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"2474:11:59"},"referencedDeclaration":2432,"src":"2474:11:59","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":16171,"nodeType":"ArrayTypeName","src":"2474:13:59","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":16175,"mutability":"mutable","name":"roleAccounts","nameLocation":"2535:12:59","nodeType":"VariableDeclaration","scope":16269,"src":"2511:36:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":16174,"nodeType":"UserDefinedTypeName","pathNode":{"id":16173,"name":"PoolRoleAccounts","nameLocations":["2511:16:59"],"nodeType":"IdentifierPath","referencedDeclaration":2415,"src":"2511:16:59"},"referencedDeclaration":2415,"src":"2511:16:59","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2415_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":16177,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2565:17:59","nodeType":"VariableDeclaration","scope":16269,"src":"2557:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2557:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16180,"mutability":"mutable","name":"priceParams","nameLocation":"2618:11:59","nodeType":"VariableDeclaration","scope":16269,"src":"2592:37:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams"},"typeName":{"id":16179,"nodeType":"UserDefinedTypeName","pathNode":{"id":16178,"name":"ReClammPriceParams","nameLocations":["2592:18:59"],"nodeType":"IdentifierPath","referencedDeclaration":17720,"src":"2592:18:59"},"referencedDeclaration":17720,"src":"2592:18:59","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_storage_ptr","typeString":"struct ReClammPriceParams"}},"visibility":"internal"},{"constant":false,"id":16182,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"2647:23:59","nodeType":"VariableDeclaration","scope":16269,"src":"2639:31:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16181,"name":"uint256","nodeType":"ElementaryTypeName","src":"2639:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16184,"mutability":"mutable","name":"centerednessMargin","nameLocation":"2688:18:59","nodeType":"VariableDeclaration","scope":16269,"src":"2680:26:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16183,"name":"uint256","nodeType":"ElementaryTypeName","src":"2680:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16186,"mutability":"mutable","name":"salt","nameLocation":"2724:4:59","nodeType":"VariableDeclaration","scope":16269,"src":"2716:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":16185,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2716:7:59","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2406:328:59"},"returnParameters":{"id":16190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16189,"mutability":"mutable","name":"pool","nameLocation":"2761:4:59","nodeType":"VariableDeclaration","scope":16269,"src":"2753:12:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16188,"name":"address","nodeType":"ElementaryTypeName","src":"2753:7:59","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2752:14:59"},"scope":16270,"src":"2391:1831:59","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16271,"src":"1032:3192:59","usedErrors":[60,183,186,1187,1193,2682,3643,3697,6842,7473,7574,7580,11548],"usedEvents":[177,180]}],"src":"46:4179:59"},"id":59},"contracts/interfaces/IReClammPool.sol":{"ast":{"absolutePath":"contracts/interfaces/IReClammPool.sol","exportedSymbols":{"IBasePool":[165],"IERC20":[7403],"IReClammPool":[16616],"PriceRatioState":[16635],"ReClammPoolDynamicData":[16378],"ReClammPoolImmutableData":[16337],"ReClammPoolParams":[16300]},"id":16617,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16272,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:60"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16274,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16617,"sourceUnit":7404,"src":"72:72:60","symbolAliases":[{"foreign":{"id":16273,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7403,"src":"81:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":16276,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16617,"sourceUnit":166,"src":"146:87:60","symbolAliases":[{"foreign":{"id":16275,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":165,"src":"155:9:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/ReClammMath.sol","file":"../lib/ReClammMath.sol","id":16278,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16617,"sourceUnit":17702,"src":"235:57:60","symbolAliases":[{"foreign":{"id":16277,"name":"PriceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16635,"src":"244:15:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"ReClammPoolParams","documentation":{"id":16279,"nodeType":"StructuredDocumentation","src":"294:59:60","text":"@dev Struct with data for deploying a new ReClammPool."},"id":16300,"members":[{"constant":false,"id":16281,"mutability":"mutable","name":"name","nameLocation":"391:4:60","nodeType":"VariableDeclaration","scope":16300,"src":"384:11:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":16280,"name":"string","nodeType":"ElementaryTypeName","src":"384:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16283,"mutability":"mutable","name":"symbol","nameLocation":"408:6:60","nodeType":"VariableDeclaration","scope":16300,"src":"401:13:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":16282,"name":"string","nodeType":"ElementaryTypeName","src":"401:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16285,"mutability":"mutable","name":"version","nameLocation":"427:7:60","nodeType":"VariableDeclaration","scope":16300,"src":"420:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":16284,"name":"string","nodeType":"ElementaryTypeName","src":"420:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":16287,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"448:23:60","nodeType":"VariableDeclaration","scope":16300,"src":"440:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16286,"name":"uint256","nodeType":"ElementaryTypeName","src":"440:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16289,"mutability":"mutable","name":"centerednessMargin","nameLocation":"484:18:60","nodeType":"VariableDeclaration","scope":16300,"src":"477:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":16288,"name":"uint64","nodeType":"ElementaryTypeName","src":"477:6:60","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":16291,"mutability":"mutable","name":"initialMinPrice","nameLocation":"516:15:60","nodeType":"VariableDeclaration","scope":16300,"src":"508:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16290,"name":"uint256","nodeType":"ElementaryTypeName","src":"508:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16293,"mutability":"mutable","name":"initialMaxPrice","nameLocation":"545:15:60","nodeType":"VariableDeclaration","scope":16300,"src":"537:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16292,"name":"uint256","nodeType":"ElementaryTypeName","src":"537:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16295,"mutability":"mutable","name":"initialTargetPrice","nameLocation":"574:18:60","nodeType":"VariableDeclaration","scope":16300,"src":"566:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16294,"name":"uint256","nodeType":"ElementaryTypeName","src":"566:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16297,"mutability":"mutable","name":"tokenAPriceIncludesRate","nameLocation":"603:23:60","nodeType":"VariableDeclaration","scope":16300,"src":"598:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16296,"name":"bool","nodeType":"ElementaryTypeName","src":"598:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16299,"mutability":"mutable","name":"tokenBPriceIncludesRate","nameLocation":"637:23:60","nodeType":"VariableDeclaration","scope":16300,"src":"632:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16298,"name":"bool","nodeType":"ElementaryTypeName","src":"632:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ReClammPoolParams","nameLocation":"360:17:60","nodeType":"StructDefinition","scope":16617,"src":"353:310:60","visibility":"public"},{"canonicalName":"ReClammPoolImmutableData","documentation":{"id":16301,"nodeType":"StructuredDocumentation","src":"665:1880:60","text":" @notice ReClamm Pool data that cannot change after deployment.\n @dev Note that the initial prices are used only during pool initialization. After the initialization, the prices\n will shift according to price ratio and pool centeredness.\n @param tokens Pool tokens, sorted in token registration order\n @param decimalScalingFactors Adjust for token decimals to retain calculation precision. FP(1) for 18-decimal tokens\n @param tokenAPriceIncludesRate True if the prices incorporate a rate for token A\n @param tokenBPriceIncludesRate True if the prices incorporate a rate for token B\n @param minSwapFeePercentage The minimum allowed static swap fee percentage; mitigates precision loss due to rounding\n @param maxSwapFeePercentage The maximum allowed static swap fee percentage\n @param initialMinPrice The initial minimum price of token A in terms of token B (possibly applying rates)\n @param initialMaxPrice The initial maximum price of token A in terms of token B (possibly applying rates)\n @param initialTargetPrice The initial target price of token A in terms of token B (possibly applying rates)\n @param initialDailyPriceShiftExponent The initial daily price shift exponent\n @param initialCenterednessMargin The initial centeredness margin (threshold for initiating a range update)\n @param maxDailyPriceShiftExponent The maximum exponent for the pool's price shift, as an 18-decimal FP percentage\n @param maxDailyPriceRatioUpdateRate The maximum percentage the price range can expand/contract per day\n @param minPriceRatioUpdateDuration The minimum duration for the price ratio update, expressed in seconds\n @param minPriceRatioDelta The minimum absolute difference between current and new fourth root price ratio\n @param balanceRatioAndPriceTolerance The maximum amount initialized pool parameters can deviate from ideal values"},"id":16337,"members":[{"constant":false,"id":16305,"mutability":"mutable","name":"tokens","nameLocation":"2610:6:60","nodeType":"VariableDeclaration","scope":16337,"src":"2601:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16303,"nodeType":"UserDefinedTypeName","pathNode":{"id":16302,"name":"IERC20","nameLocations":["2601:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"2601:6:60"},"referencedDeclaration":7403,"src":"2601:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"id":16304,"nodeType":"ArrayTypeName","src":"2601:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$7403_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":16308,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"2632:21:60","nodeType":"VariableDeclaration","scope":16337,"src":"2622:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16306,"name":"uint256","nodeType":"ElementaryTypeName","src":"2622:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16307,"nodeType":"ArrayTypeName","src":"2622:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16310,"mutability":"mutable","name":"tokenAPriceIncludesRate","nameLocation":"2664:23:60","nodeType":"VariableDeclaration","scope":16337,"src":"2659:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16309,"name":"bool","nodeType":"ElementaryTypeName","src":"2659:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16312,"mutability":"mutable","name":"tokenBPriceIncludesRate","nameLocation":"2698:23:60","nodeType":"VariableDeclaration","scope":16337,"src":"2693:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16311,"name":"bool","nodeType":"ElementaryTypeName","src":"2693:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16314,"mutability":"mutable","name":"minSwapFeePercentage","nameLocation":"2735:20:60","nodeType":"VariableDeclaration","scope":16337,"src":"2727:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16313,"name":"uint256","nodeType":"ElementaryTypeName","src":"2727:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16316,"mutability":"mutable","name":"maxSwapFeePercentage","nameLocation":"2769:20:60","nodeType":"VariableDeclaration","scope":16337,"src":"2761:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16315,"name":"uint256","nodeType":"ElementaryTypeName","src":"2761:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16318,"mutability":"mutable","name":"initialMinPrice","nameLocation":"2825:15:60","nodeType":"VariableDeclaration","scope":16337,"src":"2817:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2817:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16320,"mutability":"mutable","name":"initialMaxPrice","nameLocation":"2854:15:60","nodeType":"VariableDeclaration","scope":16337,"src":"2846:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2846:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16322,"mutability":"mutable","name":"initialTargetPrice","nameLocation":"2883:18:60","nodeType":"VariableDeclaration","scope":16337,"src":"2875:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16321,"name":"uint256","nodeType":"ElementaryTypeName","src":"2875:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16324,"mutability":"mutable","name":"initialDailyPriceShiftExponent","nameLocation":"2915:30:60","nodeType":"VariableDeclaration","scope":16337,"src":"2907:38:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16323,"name":"uint256","nodeType":"ElementaryTypeName","src":"2907:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16326,"mutability":"mutable","name":"initialCenterednessMargin","nameLocation":"2959:25:60","nodeType":"VariableDeclaration","scope":16337,"src":"2951:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16325,"name":"uint256","nodeType":"ElementaryTypeName","src":"2951:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16328,"mutability":"mutable","name":"maxDailyPriceShiftExponent","nameLocation":"3022:26:60","nodeType":"VariableDeclaration","scope":16337,"src":"3014:34:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16327,"name":"uint256","nodeType":"ElementaryTypeName","src":"3014:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16330,"mutability":"mutable","name":"maxDailyPriceRatioUpdateRate","nameLocation":"3062:28:60","nodeType":"VariableDeclaration","scope":16337,"src":"3054:36:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16329,"name":"uint256","nodeType":"ElementaryTypeName","src":"3054:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16332,"mutability":"mutable","name":"minPriceRatioUpdateDuration","nameLocation":"3104:27:60","nodeType":"VariableDeclaration","scope":16337,"src":"3096:35:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16331,"name":"uint256","nodeType":"ElementaryTypeName","src":"3096:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16334,"mutability":"mutable","name":"minPriceRatioDelta","nameLocation":"3145:18:60","nodeType":"VariableDeclaration","scope":16337,"src":"3137:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16333,"name":"uint256","nodeType":"ElementaryTypeName","src":"3137:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16336,"mutability":"mutable","name":"balanceRatioAndPriceTolerance","nameLocation":"3177:29:60","nodeType":"VariableDeclaration","scope":16337,"src":"3169:37:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16335,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ReClammPoolImmutableData","nameLocation":"2553:24:60","nodeType":"StructDefinition","scope":16617,"src":"2546:663:60","visibility":"public"},{"canonicalName":"ReClammPoolDynamicData","documentation":{"id":16338,"nodeType":"StructuredDocumentation","src":"3211:2085:60","text":" @notice Snapshot of current ReClamm Pool data that can change.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n Base Pool:\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n @param totalSupply The current total supply of the pool tokens (BPT)\n ReClamm:\n @param lastTimestamp The timestamp of the last user interaction\n @param lastVirtualBalances The last virtual balances of the pool\n @param dailyPriceShiftExponent Virtual balances will change by 2^(dailyPriceShiftExponent) per day\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n @param centerednessMargin The centeredness margin of the pool\n @param currentPriceRatio The current price ratio, an interpolation of the price ratio state\n @param currentFourthRootPriceRatio The current fourth root price ratio (stored in the price ratio state)\n @param startFourthRootPriceRatio The fourth root price ratio at the start of an update\n @param endFourthRootPriceRatio The fourth root price ratio at the end of an update\n @param priceRatioUpdateStartTime The timestamp when the update begins\n @param priceRatioUpdateEndTime The timestamp when the update ends\n Pool State:\n @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate"},"id":16378,"members":[{"constant":false,"id":16341,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"5360:20:60","nodeType":"VariableDeclaration","scope":16378,"src":"5350:30:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16339,"name":"uint256","nodeType":"ElementaryTypeName","src":"5350:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16340,"nodeType":"ArrayTypeName","src":"5350:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16344,"mutability":"mutable","name":"tokenRates","nameLocation":"5396:10:60","nodeType":"VariableDeclaration","scope":16378,"src":"5386:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16342,"name":"uint256","nodeType":"ElementaryTypeName","src":"5386:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16343,"nodeType":"ArrayTypeName","src":"5386:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16346,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"5420:23:60","nodeType":"VariableDeclaration","scope":16378,"src":"5412:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16345,"name":"uint256","nodeType":"ElementaryTypeName","src":"5412:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16348,"mutability":"mutable","name":"totalSupply","nameLocation":"5457:11:60","nodeType":"VariableDeclaration","scope":16378,"src":"5449:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16347,"name":"uint256","nodeType":"ElementaryTypeName","src":"5449:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16350,"mutability":"mutable","name":"lastTimestamp","nameLocation":"5497:13:60","nodeType":"VariableDeclaration","scope":16378,"src":"5489:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16349,"name":"uint256","nodeType":"ElementaryTypeName","src":"5489:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16353,"mutability":"mutable","name":"lastVirtualBalances","nameLocation":"5526:19:60","nodeType":"VariableDeclaration","scope":16378,"src":"5516:29:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16351,"name":"uint256","nodeType":"ElementaryTypeName","src":"5516:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16352,"nodeType":"ArrayTypeName","src":"5516:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16355,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"5559:23:60","nodeType":"VariableDeclaration","scope":16378,"src":"5551:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16354,"name":"uint256","nodeType":"ElementaryTypeName","src":"5551:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16357,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"5596:19:60","nodeType":"VariableDeclaration","scope":16378,"src":"5588:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16356,"name":"uint256","nodeType":"ElementaryTypeName","src":"5588:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16359,"mutability":"mutable","name":"centerednessMargin","nameLocation":"5629:18:60","nodeType":"VariableDeclaration","scope":16378,"src":"5621:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16358,"name":"uint256","nodeType":"ElementaryTypeName","src":"5621:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16361,"mutability":"mutable","name":"currentPriceRatio","nameLocation":"5661:17:60","nodeType":"VariableDeclaration","scope":16378,"src":"5653:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16360,"name":"uint256","nodeType":"ElementaryTypeName","src":"5653:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16363,"mutability":"mutable","name":"currentFourthRootPriceRatio","nameLocation":"5692:27:60","nodeType":"VariableDeclaration","scope":16378,"src":"5684:35:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16362,"name":"uint256","nodeType":"ElementaryTypeName","src":"5684:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16365,"mutability":"mutable","name":"startFourthRootPriceRatio","nameLocation":"5733:25:60","nodeType":"VariableDeclaration","scope":16378,"src":"5725:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16364,"name":"uint256","nodeType":"ElementaryTypeName","src":"5725:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16367,"mutability":"mutable","name":"endFourthRootPriceRatio","nameLocation":"5772:23:60","nodeType":"VariableDeclaration","scope":16378,"src":"5764:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16366,"name":"uint256","nodeType":"ElementaryTypeName","src":"5764:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16369,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"5808:25:60","nodeType":"VariableDeclaration","scope":16378,"src":"5801:32:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16368,"name":"uint32","nodeType":"ElementaryTypeName","src":"5801:6:60","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16371,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"5846:23:60","nodeType":"VariableDeclaration","scope":16378,"src":"5839:30:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16370,"name":"uint32","nodeType":"ElementaryTypeName","src":"5839:6:60","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16373,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"5898:17:60","nodeType":"VariableDeclaration","scope":16378,"src":"5893:22:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16372,"name":"bool","nodeType":"ElementaryTypeName","src":"5893:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16375,"mutability":"mutable","name":"isPoolPaused","nameLocation":"5926:12:60","nodeType":"VariableDeclaration","scope":16378,"src":"5921:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16374,"name":"bool","nodeType":"ElementaryTypeName","src":"5921:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16377,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"5949:20:60","nodeType":"VariableDeclaration","scope":16378,"src":"5944:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16376,"name":"bool","nodeType":"ElementaryTypeName","src":"5944:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ReClammPoolDynamicData","nameLocation":"5304:22:60","nodeType":"StructDefinition","scope":16617,"src":"5297:675:60","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":16379,"name":"IBasePool","nameLocations":["6000:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":165,"src":"6000:9:60"},"id":16380,"nodeType":"InheritanceSpecifier","src":"6000:9:60"}],"canonicalName":"IReClammPool","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":16616,"linearizedBaseContracts":[16616,165,811,795],"name":"IReClammPool","nameLocation":"5984:12:60","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":16381,"nodeType":"StructuredDocumentation","src":"6175:505:60","text":" @notice The Price Ratio State was updated.\n @dev This event will be emitted on initialization, and when governance initiates a price ratio update.\n @param startFourthRootPriceRatio The fourth root price ratio at the start of an update\n @param endFourthRootPriceRatio The fourth root price ratio at the end of an update\n @param priceRatioUpdateStartTime The timestamp when the update begins\n @param priceRatioUpdateEndTime The timestamp when the update ends"},"eventSelector":"a18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5","id":16391,"name":"PriceRatioStateUpdated","nameLocation":"6691:22:60","nodeType":"EventDefinition","parameters":{"id":16390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16383,"indexed":false,"mutability":"mutable","name":"startFourthRootPriceRatio","nameLocation":"6731:25:60","nodeType":"VariableDeclaration","scope":16391,"src":"6723:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16382,"name":"uint256","nodeType":"ElementaryTypeName","src":"6723:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16385,"indexed":false,"mutability":"mutable","name":"endFourthRootPriceRatio","nameLocation":"6774:23:60","nodeType":"VariableDeclaration","scope":16391,"src":"6766:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16384,"name":"uint256","nodeType":"ElementaryTypeName","src":"6766:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16387,"indexed":false,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"6815:25:60","nodeType":"VariableDeclaration","scope":16391,"src":"6807:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16386,"name":"uint256","nodeType":"ElementaryTypeName","src":"6807:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16389,"indexed":false,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"6858:23:60","nodeType":"VariableDeclaration","scope":16391,"src":"6850:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16388,"name":"uint256","nodeType":"ElementaryTypeName","src":"6850:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6713:174:60"},"src":"6685:203:60"},{"anonymous":false,"documentation":{"id":16392,"nodeType":"StructuredDocumentation","src":"6894:481:60","text":" @notice The virtual balances were updated after a user interaction (swap or liquidity operation).\n @dev Unless the price range is changing, the virtual balances remain in proportion to the real balances.\n These balances will also be updated when the centeredness margin or daily price shift exponent is changed.\n @param virtualBalanceA Offset to the real balance reserves\n @param virtualBalanceB Offset to the real balance reserves"},"eventSelector":"f36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637","id":16398,"name":"VirtualBalancesUpdated","nameLocation":"7386:22:60","nodeType":"EventDefinition","parameters":{"id":16397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16394,"indexed":false,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"7417:15:60","nodeType":"VariableDeclaration","scope":16398,"src":"7409:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16393,"name":"uint256","nodeType":"ElementaryTypeName","src":"7409:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16396,"indexed":false,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"7442:15:60","nodeType":"VariableDeclaration","scope":16398,"src":"7434:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16395,"name":"uint256","nodeType":"ElementaryTypeName","src":"7434:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7408:50:60"},"src":"7380:79:60"},{"anonymous":false,"documentation":{"id":16399,"nodeType":"StructuredDocumentation","src":"7465:342:60","text":" @notice The daily price shift exponent was updated.\n @dev This will be emitted on deployment, and when changed by governance or the swap manager.\n @param dailyPriceShiftExponent The new daily price shift exponent\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)"},"eventSelector":"7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847","id":16405,"name":"DailyPriceShiftExponentUpdated","nameLocation":"7818:30:60","nodeType":"EventDefinition","parameters":{"id":16404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16401,"indexed":false,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"7857:23:60","nodeType":"VariableDeclaration","scope":16405,"src":"7849:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16400,"name":"uint256","nodeType":"ElementaryTypeName","src":"7849:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16403,"indexed":false,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"7890:19:60","nodeType":"VariableDeclaration","scope":16405,"src":"7882:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16402,"name":"uint256","nodeType":"ElementaryTypeName","src":"7882:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7848:62:60"},"src":"7812:99:60"},{"anonymous":false,"documentation":{"id":16406,"nodeType":"StructuredDocumentation","src":"7917:224:60","text":" @notice The centeredness margin was updated.\n @dev This will be emitted on deployment, and when changed by governance or the swap manager.\n @param centerednessMargin The new centeredness margin"},"eventSelector":"74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab0","id":16410,"name":"CenterednessMarginUpdated","nameLocation":"8152:25:60","nodeType":"EventDefinition","parameters":{"id":16409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16408,"indexed":false,"mutability":"mutable","name":"centerednessMargin","nameLocation":"8186:18:60","nodeType":"VariableDeclaration","scope":16410,"src":"8178:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16407,"name":"uint256","nodeType":"ElementaryTypeName","src":"8178:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8177:28:60"},"src":"8146:60:60"},{"anonymous":false,"documentation":{"id":16411,"nodeType":"StructuredDocumentation","src":"8212:195:60","text":" @notice The timestamp of the last user interaction.\n @dev This is emitted on every swap or liquidity operation.\n @param lastTimestamp The timestamp of the operation"},"eventSelector":"32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d4","id":16415,"name":"LastTimestampUpdated","nameLocation":"8418:20:60","nodeType":"EventDefinition","parameters":{"id":16414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16413,"indexed":false,"mutability":"mutable","name":"lastTimestamp","nameLocation":"8446:13:60","nodeType":"VariableDeclaration","scope":16415,"src":"8439:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16412,"name":"uint32","nodeType":"ElementaryTypeName","src":"8439:6:60","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"8438:22:60"},"src":"8412:49:60"},{"documentation":{"id":16416,"nodeType":"StructuredDocumentation","src":"8629:44:60","text":"@notice The function is not implemented."},"errorSelector":"d6234725","id":16418,"name":"NotImplemented","nameLocation":"8684:14:60","nodeType":"ErrorDefinition","parameters":{"id":16417,"nodeType":"ParameterList","parameters":[],"src":"8698:2:60"},"src":"8678:23:60"},{"documentation":{"id":16419,"nodeType":"StructuredDocumentation","src":"8707:66:60","text":"@notice The centeredness margin is above 100% (Fixed point 1)."},"errorSelector":"7304fac7","id":16421,"name":"InvalidCenterednessMargin","nameLocation":"8784:25:60","nodeType":"ErrorDefinition","parameters":{"id":16420,"nodeType":"ParameterList","parameters":[],"src":"8809:2:60"},"src":"8778:34:60"},{"documentation":{"id":16422,"nodeType":"StructuredDocumentation","src":"8818:74:60","text":"@notice The vault is not locked, so the pool balances are manipulable."},"errorSelector":"e4575fe4","id":16424,"name":"VaultIsNotLocked","nameLocation":"8903:16:60","nodeType":"ErrorDefinition","parameters":{"id":16423,"nodeType":"ParameterList","parameters":[],"src":"8919:2:60"},"src":"8897:25:60"},{"documentation":{"id":16425,"nodeType":"StructuredDocumentation","src":"8928:85:60","text":"@notice The pool is outside the target price range before or after the operation."},"errorSelector":"03d95ab4","id":16427,"name":"PoolOutsideTargetRange","nameLocation":"9024:22:60","nodeType":"ErrorDefinition","parameters":{"id":16426,"nodeType":"ParameterList","parameters":[],"src":"9046:2:60"},"src":"9018:31:60"},{"documentation":{"id":16428,"nodeType":"StructuredDocumentation","src":"9055:114:60","text":"@notice The start time for the price ratio update is invalid (either in the past or after the given end time)."},"errorSelector":"b290253c","id":16430,"name":"InvalidStartTime","nameLocation":"9180:16:60","nodeType":"ErrorDefinition","parameters":{"id":16429,"nodeType":"ParameterList","parameters":[],"src":"9196:2:60"},"src":"9174:25:60"},{"documentation":{"id":16431,"nodeType":"StructuredDocumentation","src":"9205:11:60","text":"@notice"},"errorSelector":"b3cd5c66","id":16433,"name":"InvalidInitialPrice","nameLocation":"9227:19:60","nodeType":"ErrorDefinition","parameters":{"id":16432,"nodeType":"ParameterList","parameters":[],"src":"9246:2:60"},"src":"9221:28:60"},{"documentation":{"id":16434,"nodeType":"StructuredDocumentation","src":"9255:55:60","text":"@notice The daily price shift exponent is too high."},"errorSelector":"2b5b4f35","id":16436,"name":"DailyPriceShiftExponentTooHigh","nameLocation":"9321:30:60","nodeType":"ErrorDefinition","parameters":{"id":16435,"nodeType":"ParameterList","parameters":[],"src":"9351:2:60"},"src":"9315:39:60"},{"documentation":{"id":16437,"nodeType":"StructuredDocumentation","src":"9360:99:60","text":"@notice The difference between end time and start time is too short for the price ratio update."},"errorSelector":"33f1d0aa","id":16439,"name":"PriceRatioUpdateDurationTooShort","nameLocation":"9470:32:60","nodeType":"ErrorDefinition","parameters":{"id":16438,"nodeType":"ParameterList","parameters":[],"src":"9502:2:60"},"src":"9464:41:60"},{"documentation":{"id":16440,"nodeType":"StructuredDocumentation","src":"9511:74:60","text":"@notice The rate of change exceeds the maximum daily price ratio rate."},"errorSelector":"570bf22e","id":16442,"name":"PriceRatioUpdateTooFast","nameLocation":"9596:23:60","nodeType":"ErrorDefinition","parameters":{"id":16441,"nodeType":"ParameterList","parameters":[],"src":"9619:2:60"},"src":"9590:32:60"},{"documentation":{"id":16443,"nodeType":"StructuredDocumentation","src":"9628:67:60","text":"@dev The price ratio being set is too close to the current one."},"errorSelector":"467614dc","id":16447,"name":"PriceRatioDeltaBelowMin","nameLocation":"9706:23:60","nodeType":"ErrorDefinition","parameters":{"id":16446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16445,"mutability":"mutable","name":"fourthRootPriceRatioDelta","nameLocation":"9738:25:60","nodeType":"VariableDeclaration","scope":16447,"src":"9730:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16444,"name":"uint256","nodeType":"ElementaryTypeName","src":"9730:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9729:35:60"},"src":"9700:65:60"},{"documentation":{"id":16448,"nodeType":"StructuredDocumentation","src":"9771:92:60","text":"@dev An attempt was made to stop the price ratio update while no update was in progress."},"errorSelector":"771cef4f","id":16450,"name":"PriceRatioNotUpdating","nameLocation":"9874:21:60","nodeType":"ErrorDefinition","parameters":{"id":16449,"nodeType":"ParameterList","parameters":[],"src":"9895:2:60"},"src":"9868:30:60"},{"documentation":{"id":16451,"nodeType":"StructuredDocumentation","src":"9904:422:60","text":" @notice `getRate` from `IRateProvider` was called on a ReClamm Pool.\n @dev ReClamm Pools should never be nested. This is because the invariant of the pool is only used to calculate\n swaps. When tracking the market price or shrinking or expanding the liquidity concentration, the invariant can\n can decrease or increase independent of the balances, which makes the BPT rate meaningless."},"errorSelector":"56b7fcdb","id":16453,"name":"ReClammPoolBptRateUnsupported","nameLocation":"10337:29:60","nodeType":"ErrorDefinition","parameters":{"id":16452,"nodeType":"ParameterList","parameters":[],"src":"10366:2:60"},"src":"10331:38:60"},{"documentation":{"id":16454,"nodeType":"StructuredDocumentation","src":"10375:54:60","text":"@dev Function called before initializing the pool."},"errorSelector":"486aa307","id":16456,"name":"PoolNotInitialized","nameLocation":"10440:18:60","nodeType":"ErrorDefinition","parameters":{"id":16455,"nodeType":"ParameterList","parameters":[],"src":"10458:2:60"},"src":"10434:27:60"},{"documentation":{"id":16457,"nodeType":"StructuredDocumentation","src":"10467:556:60","text":" @notice The initial balances of the ReClamm Pool must respect the initialization ratio bounds.\n @dev On pool creation, a theoretical balance ratio is computed from the min, max, and target prices. During\n initialization, the actual balance ratio is compared to this theoretical value, and must fall within a fixed,\n symmetrical tolerance range, or initialization reverts. If it were outside this range, the initial price would\n diverge too far from the target price, and the pool would be vulnerable to arbitrage."},"errorSelector":"4f512cb0","id":16459,"name":"BalanceRatioExceedsTolerance","nameLocation":"11034:28:60","nodeType":"ErrorDefinition","parameters":{"id":16458,"nodeType":"ParameterList","parameters":[],"src":"11062:2:60"},"src":"11028:37:60"},{"documentation":{"id":16460,"nodeType":"StructuredDocumentation","src":"11071:95:60","text":"@notice The current price interval or spot price is outside the initialization price range."},"errorSelector":"f67c277c","id":16462,"name":"WrongInitializationPrices","nameLocation":"11177:25:60","nodeType":"ErrorDefinition","parameters":{"id":16461,"nodeType":"ParameterList","parameters":[],"src":"11202:2:60"},"src":"11171:34:60"},{"documentation":{"id":16463,"nodeType":"StructuredDocumentation","src":"11378:705:60","text":" @notice Compute the initialization amounts, given a reference token and amount.\n @dev Convenience function to compute the initial funding amount for the second token, given the first. It\n returns the amount of tokens in raw amounts, which can be used as-is to initialize the pool using a standard\n router.\n @param referenceToken The token whose amount is known\n @param referenceAmountInRaw The amount of the reference token to be used for initialization, in raw amounts\n @return initialBalancesRaw Initialization raw balances sorted in token registration order, including the given\n amount and a calculated raw amount for the other token"},"functionSelector":"e45801da","id":16474,"implemented":false,"kind":"function","modifiers":[],"name":"computeInitialBalancesRaw","nameLocation":"12097:25:60","nodeType":"FunctionDefinition","parameters":{"id":16469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16466,"mutability":"mutable","name":"referenceToken","nameLocation":"12139:14:60","nodeType":"VariableDeclaration","scope":16474,"src":"12132:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"},"typeName":{"id":16465,"nodeType":"UserDefinedTypeName","pathNode":{"id":16464,"name":"IERC20","nameLocations":["12132:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":7403,"src":"12132:6:60"},"referencedDeclaration":7403,"src":"12132:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$7403","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16468,"mutability":"mutable","name":"referenceAmountInRaw","nameLocation":"12171:20:60","nodeType":"VariableDeclaration","scope":16474,"src":"12163:28:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16467,"name":"uint256","nodeType":"ElementaryTypeName","src":"12163:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12122:75:60"},"returnParameters":{"id":16473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16472,"mutability":"mutable","name":"initialBalancesRaw","nameLocation":"12238:18:60","nodeType":"VariableDeclaration","scope":16474,"src":"12221:35:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16470,"name":"uint256","nodeType":"ElementaryTypeName","src":"12221:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16471,"nodeType":"ArrayTypeName","src":"12221:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12220:37:60"},"scope":16616,"src":"12088:170:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16475,"nodeType":"StructuredDocumentation","src":"12264:957:60","text":" @notice Computes the current total price range.\n @dev Prices represent the value of token A denominated in token B (i.e., how many B tokens equal the value of\n one A token).\n The \"target\" range is then defined as a subset of this total price range, with the margin trimmed symmetrically\n from each side. The pool endeavors to adjust this range as necessary to keep the current market price within it.\n The computation involves the current live balances (though it should not be sensitive to them), so manipulating\n the result of this function is theoretically possible while the Vault is unlocked. Ensure that the Vault is\n locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\n @return minPrice The lower limit of the current total price range\n @return maxPrice The upper limit of the current total price range"},"functionSelector":"84254cf9","id":16482,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentPriceRange","nameLocation":"13235:24:60","nodeType":"FunctionDefinition","parameters":{"id":16476,"nodeType":"ParameterList","parameters":[],"src":"13259:2:60"},"returnParameters":{"id":16481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16478,"mutability":"mutable","name":"minPrice","nameLocation":"13293:8:60","nodeType":"VariableDeclaration","scope":16482,"src":"13285:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16477,"name":"uint256","nodeType":"ElementaryTypeName","src":"13285:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16480,"mutability":"mutable","name":"maxPrice","nameLocation":"13311:8:60","nodeType":"VariableDeclaration","scope":16482,"src":"13303:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16479,"name":"uint256","nodeType":"ElementaryTypeName","src":"13303:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13284:36:60"},"scope":16616,"src":"13226:95:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16483,"nodeType":"StructuredDocumentation","src":"13327:1059:60","text":" @notice Computes the current virtual balances and a flag indicating whether they have changed.\n @dev The current virtual balances are calculated based on the last virtual balances. If the pool is within the\n target range and the price ratio is not updating, the virtual balances will not change. If the pool is outside\n the target range, or the price ratio is updating, this function will calculate the new virtual balances based on\n the timestamp of the last user interaction. Note that virtual balances are always scaled18 values.\n Current virtual balances might change as a result of an operation, manipulating the value to some degree.\n Ensure that the vault is locked before calling this function if this side effect is undesired.\n @return currentVirtualBalanceA The current virtual balance of token A\n @return currentVirtualBalanceB The current virtual balance of token B\n @return changed Whether the current virtual balances are different from `lastVirtualBalances`"},"functionSelector":"4f149b3f","id":16492,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentVirtualBalances","nameLocation":"14400:29:60","nodeType":"FunctionDefinition","parameters":{"id":16484,"nodeType":"ParameterList","parameters":[],"src":"14429:2:60"},"returnParameters":{"id":16491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16486,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"14487:22:60","nodeType":"VariableDeclaration","scope":16492,"src":"14479:30:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16485,"name":"uint256","nodeType":"ElementaryTypeName","src":"14479:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16488,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"14519:22:60","nodeType":"VariableDeclaration","scope":16492,"src":"14511:30:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16487,"name":"uint256","nodeType":"ElementaryTypeName","src":"14511:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16490,"mutability":"mutable","name":"changed","nameLocation":"14548:7:60","nodeType":"VariableDeclaration","scope":16492,"src":"14543:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16489,"name":"bool","nodeType":"ElementaryTypeName","src":"14543:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14478:78:60"},"scope":16616,"src":"14391:166:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16493,"nodeType":"StructuredDocumentation","src":"14563:404:60","text":" @notice Computes the current target price. This is the ratio of the total (i.e., real + virtual) balances (B/A).\n @dev Given the nature of the internal pool maths (particularly when virtual balances are shifting), it is not\n recommended to use this pool as a price oracle.\n @return currentTargetPrice Target price at the current pool state (real and virtual balances)"},"functionSelector":"c0209f1d","id":16498,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentSpotPrice","nameLocation":"14981:23:60","nodeType":"FunctionDefinition","parameters":{"id":16494,"nodeType":"ParameterList","parameters":[],"src":"15004:2:60"},"returnParameters":{"id":16497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16496,"mutability":"mutable","name":"currentTargetPrice","nameLocation":"15038:18:60","nodeType":"VariableDeclaration","scope":16498,"src":"15030:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16495,"name":"uint256","nodeType":"ElementaryTypeName","src":"15030:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15029:28:60"},"scope":16616,"src":"14972:86:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16499,"nodeType":"StructuredDocumentation","src":"15064:141:60","text":" @notice Getter for the timestamp of the last user interaction.\n @return lastTimestamp The timestamp of the operation"},"functionSelector":"37899770","id":16504,"implemented":false,"kind":"function","modifiers":[],"name":"getLastTimestamp","nameLocation":"15219:16:60","nodeType":"FunctionDefinition","parameters":{"id":16500,"nodeType":"ParameterList","parameters":[],"src":"15235:2:60"},"returnParameters":{"id":16503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16502,"mutability":"mutable","name":"lastTimestamp","nameLocation":"15268:13:60","nodeType":"VariableDeclaration","scope":16504,"src":"15261:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16501,"name":"uint32","nodeType":"ElementaryTypeName","src":"15261:6:60","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15260:22:60"},"scope":16616,"src":"15210:73:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16505,"nodeType":"StructuredDocumentation","src":"15289:208:60","text":" @notice Getter for the last virtual balances.\n @return lastVirtualBalanceA The last virtual balance of token A\n @return lastVirtualBalanceB The last virtual balance of token B"},"functionSelector":"105ae7ad","id":16512,"implemented":false,"kind":"function","modifiers":[],"name":"getLastVirtualBalances","nameLocation":"15511:22:60","nodeType":"FunctionDefinition","parameters":{"id":16506,"nodeType":"ParameterList","parameters":[],"src":"15533:2:60"},"returnParameters":{"id":16511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16508,"mutability":"mutable","name":"lastVirtualBalanceA","nameLocation":"15567:19:60","nodeType":"VariableDeclaration","scope":16512,"src":"15559:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16507,"name":"uint256","nodeType":"ElementaryTypeName","src":"15559:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16510,"mutability":"mutable","name":"lastVirtualBalanceB","nameLocation":"15596:19:60","nodeType":"VariableDeclaration","scope":16512,"src":"15588:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16509,"name":"uint256","nodeType":"ElementaryTypeName","src":"15588:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15558:58:60"},"scope":16616,"src":"15502:115:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16513,"nodeType":"StructuredDocumentation","src":"15623:453:60","text":" @notice Returns the centeredness margin.\n @dev The centeredness margin defines how closely an unbalanced pool can approach the limits of the total price\n range and still be considered within the target range. The margin is symmetrical. If it's 20%, the target\n range is defined as >= 20% above the lower bound and <= 20% below the upper bound.\n @return centerednessMargin The current centeredness margin"},"functionSelector":"1d8a5e7e","id":16518,"implemented":false,"kind":"function","modifiers":[],"name":"getCenterednessMargin","nameLocation":"16090:21:60","nodeType":"FunctionDefinition","parameters":{"id":16514,"nodeType":"ParameterList","parameters":[],"src":"16111:2:60"},"returnParameters":{"id":16517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16516,"mutability":"mutable","name":"centerednessMargin","nameLocation":"16145:18:60","nodeType":"VariableDeclaration","scope":16518,"src":"16137:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16515,"name":"uint256","nodeType":"ElementaryTypeName","src":"16137:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16136:28:60"},"scope":16616,"src":"16081:84:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16519,"nodeType":"StructuredDocumentation","src":"16171:244:60","text":" @notice Returns the daily price shift exponent as an 18-decimal FP.\n @dev At 100% (FixedPoint.ONE), the price range doubles (or halves) within a day.\n @return dailyPriceShiftExponent The daily price shift exponent"},"functionSelector":"4efd88c9","id":16524,"implemented":false,"kind":"function","modifiers":[],"name":"getDailyPriceShiftExponent","nameLocation":"16429:26:60","nodeType":"FunctionDefinition","parameters":{"id":16520,"nodeType":"ParameterList","parameters":[],"src":"16455:2:60"},"returnParameters":{"id":16523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16522,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"16489:23:60","nodeType":"VariableDeclaration","scope":16524,"src":"16481:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16521,"name":"uint256","nodeType":"ElementaryTypeName","src":"16481:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16480:33:60"},"scope":16616,"src":"16420:94:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16525,"nodeType":"StructuredDocumentation","src":"16520:304:60","text":" @notice Returns the internal time constant representation for the daily price shift exponent (tau).\n @dev Equals dailyPriceShiftExponent / _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT.\n @return dailyPriceShiftBase The internal representation for the daily price shift exponent"},"functionSelector":"215666a8","id":16530,"implemented":false,"kind":"function","modifiers":[],"name":"getDailyPriceShiftBase","nameLocation":"16838:22:60","nodeType":"FunctionDefinition","parameters":{"id":16526,"nodeType":"ParameterList","parameters":[],"src":"16860:2:60"},"returnParameters":{"id":16529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16528,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"16894:19:60","nodeType":"VariableDeclaration","scope":16530,"src":"16886:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16527,"name":"uint256","nodeType":"ElementaryTypeName","src":"16886:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16885:29:60"},"scope":16616,"src":"16829:86:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16531,"nodeType":"StructuredDocumentation","src":"16921:246:60","text":" @notice Returns the current price ratio state.\n @dev This includes start and end values for the fourth root price ratio, and start and end times for the update.\n @return priceRatioState The current price ratio state"},"functionSelector":"6bd838c7","id":16537,"implemented":false,"kind":"function","modifiers":[],"name":"getPriceRatioState","nameLocation":"17181:18:60","nodeType":"FunctionDefinition","parameters":{"id":16532,"nodeType":"ParameterList","parameters":[],"src":"17199:2:60"},"returnParameters":{"id":16536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16535,"mutability":"mutable","name":"priceRatioState","nameLocation":"17248:15:60","nodeType":"VariableDeclaration","scope":16537,"src":"17225:38:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":16534,"nodeType":"UserDefinedTypeName","pathNode":{"id":16533,"name":"PriceRatioState","nameLocations":["17225:15:60"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"17225:15:60"},"referencedDeclaration":16635,"src":"17225:15:60","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"src":"17224:40:60"},"scope":16616,"src":"17172:93:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16538,"nodeType":"StructuredDocumentation","src":"17271:334:60","text":" @notice Computes the current fourth root of price ratio.\n @dev The price ratio is the ratio of the max price to the min price, according to current real and virtual\n balances. This function returns its fourth root.\n @return currentFourthRootPriceRatio The current fourth root of price ratio"},"functionSelector":"569ee350","id":16543,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentFourthRootPriceRatio","nameLocation":"17619:34:60","nodeType":"FunctionDefinition","parameters":{"id":16539,"nodeType":"ParameterList","parameters":[],"src":"17653:2:60"},"returnParameters":{"id":16542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16541,"mutability":"mutable","name":"currentFourthRootPriceRatio","nameLocation":"17687:27:60","nodeType":"VariableDeclaration","scope":16543,"src":"17679:35:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16540,"name":"uint256","nodeType":"ElementaryTypeName","src":"17679:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17678:37:60"},"scope":16616,"src":"17610:106:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16544,"nodeType":"StructuredDocumentation","src":"17722:255:60","text":" @notice Computes the current price ratio.\n @dev The price ratio is the ratio of the max price to the min price, according to current real and virtual\n balances.\n @return currentPriceRatio The current price ratio"},"functionSelector":"a103b044","id":16549,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentPriceRatio","nameLocation":"17991:24:60","nodeType":"FunctionDefinition","parameters":{"id":16545,"nodeType":"ParameterList","parameters":[],"src":"18015:2:60"},"returnParameters":{"id":16548,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16547,"mutability":"mutable","name":"currentPriceRatio","nameLocation":"18049:17:60","nodeType":"VariableDeclaration","scope":16549,"src":"18041:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16546,"name":"uint256","nodeType":"ElementaryTypeName","src":"18041:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18040:27:60"},"scope":16616,"src":"17982:86:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16550,"nodeType":"StructuredDocumentation","src":"18074:1581:60","text":" @notice Compute whether the pool is within the target price range.\n @dev The pool is considered to be in the target range when the centeredness is greater than or equal to the\n centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness\n margin).\n Note that this function reports the state *after* the last operation. It is not very meaningful during or\n outside an operation, as the current or next operation could change it. If this is unlikely (e.g., for high-\n liquidity pools with high centeredness and small swaps), it may nonetheless be useful for some applications,\n such as off-chain indicators.\n The state depends on the current balances and centeredness margin, and it uses the *last* virtual balances in\n the calculation. This is fine because the real balances can only change during an operation, and the margin can\n only change through the permissioned setter - both of which update the virtual balances. So it is not possible\n for the current and last virtual balances to get out-of-sync.\n The range calculation is affected by the current live balances, so manipulating the result of this function\n is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this\n side effect is undesired (does not apply to off-chain calls).\n @return isWithinTargetRange True if pool centeredness is greater than or equal to the centeredness margin"},"functionSelector":"dfba3818","id":16555,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolWithinTargetRange","nameLocation":"19669:23:60","nodeType":"FunctionDefinition","parameters":{"id":16551,"nodeType":"ParameterList","parameters":[],"src":"19692:2:60"},"returnParameters":{"id":16554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16553,"mutability":"mutable","name":"isWithinTargetRange","nameLocation":"19723:19:60","nodeType":"VariableDeclaration","scope":16555,"src":"19718:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16552,"name":"bool","nodeType":"ElementaryTypeName","src":"19718:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19717:26:60"},"scope":16616,"src":"19660:84:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16556,"nodeType":"StructuredDocumentation","src":"19750:803:60","text":" @notice Compute whether the pool is within the target price range, recomputing the virtual balances.\n @dev The pool is considered to be in the target range when the centeredness is greater than the centeredness\n margin (i.e., the price is within the subset of the total price range defined by the centeredness margin.)\n This function is identical to `isPoolWithinTargetRange` above, except that it recomputes and uses the current\n instead of the last virtual balances. As noted above, these should normally give the same result.\n @return isWithinTargetRange True if pool centeredness is greater than the centeredness margin\n @return virtualBalancesChanged True if the current virtual balances would not match the last virtual balances"},"functionSelector":"c480b9e6","id":16563,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolWithinTargetRangeUsingCurrentVirtualBalances","nameLocation":"20567:50:60","nodeType":"FunctionDefinition","parameters":{"id":16557,"nodeType":"ParameterList","parameters":[],"src":"20617:2:60"},"returnParameters":{"id":16562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16559,"mutability":"mutable","name":"isWithinTargetRange","nameLocation":"20672:19:60","nodeType":"VariableDeclaration","scope":16563,"src":"20667:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16558,"name":"bool","nodeType":"ElementaryTypeName","src":"20667:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16561,"mutability":"mutable","name":"virtualBalancesChanged","nameLocation":"20698:22:60","nodeType":"VariableDeclaration","scope":16563,"src":"20693:27:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16560,"name":"bool","nodeType":"ElementaryTypeName","src":"20693:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20666:55:60"},"scope":16616,"src":"20558:164:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16564,"nodeType":"StructuredDocumentation","src":"20728:829:60","text":" @notice Compute the current pool centeredness (a measure of how unbalanced the pool is).\n @dev A value of 0 means the pool is at the edge of the price range (i.e., one of the real balances is zero).\n A value of FixedPoint.ONE means the balances (and market price) are exactly in the middle of the range.\n The centeredness margin is affected by the current live balances, so manipulating the result of this function\n is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this\n side effect is undesired (does not apply to off-chain calls).\n @return poolCenteredness The current centeredness margin (as a 18-decimal FP value)\n @return isPoolAboveCenter True if the pool is above the center, false otherwise"},"functionSelector":"cd80a1af","id":16571,"implemented":false,"kind":"function","modifiers":[],"name":"computeCurrentPoolCenteredness","nameLocation":"21571:30:60","nodeType":"FunctionDefinition","parameters":{"id":16565,"nodeType":"ParameterList","parameters":[],"src":"21601:2:60"},"returnParameters":{"id":16570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16567,"mutability":"mutable","name":"poolCenteredness","nameLocation":"21635:16:60","nodeType":"VariableDeclaration","scope":16571,"src":"21627:24:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16566,"name":"uint256","nodeType":"ElementaryTypeName","src":"21627:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16569,"mutability":"mutable","name":"isPoolAboveCenter","nameLocation":"21658:17:60","nodeType":"VariableDeclaration","scope":16571,"src":"21653:22:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16568,"name":"bool","nodeType":"ElementaryTypeName","src":"21653:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21626:50:60"},"scope":16616,"src":"21562:115:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16572,"nodeType":"StructuredDocumentation","src":"21683:166:60","text":" @notice Get dynamic pool data relevant to swap/add/remove calculations.\n @return data A struct containing all dynamic ReClamm pool parameters"},"functionSelector":"2c357688","id":16578,"implemented":false,"kind":"function","modifiers":[],"name":"getReClammPoolDynamicData","nameLocation":"21863:25:60","nodeType":"FunctionDefinition","parameters":{"id":16573,"nodeType":"ParameterList","parameters":[],"src":"21888:2:60"},"returnParameters":{"id":16577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16576,"mutability":"mutable","name":"data","nameLocation":"21944:4:60","nodeType":"VariableDeclaration","scope":16578,"src":"21914:34:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_memory_ptr","typeString":"struct ReClammPoolDynamicData"},"typeName":{"id":16575,"nodeType":"UserDefinedTypeName","pathNode":{"id":16574,"name":"ReClammPoolDynamicData","nameLocations":["21914:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":16378,"src":"21914:22:60"},"referencedDeclaration":16378,"src":"21914:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolDynamicData_$16378_storage_ptr","typeString":"struct ReClammPoolDynamicData"}},"visibility":"internal"}],"src":"21913:36:60"},"scope":16616,"src":"21854:96:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16579,"nodeType":"StructuredDocumentation","src":"21956:170:60","text":" @notice Get immutable pool data relevant to swap/add/remove calculations.\n @return data A struct containing all immutable ReClamm pool parameters"},"functionSelector":"7f118b90","id":16585,"implemented":false,"kind":"function","modifiers":[],"name":"getReClammPoolImmutableData","nameLocation":"22140:27:60","nodeType":"FunctionDefinition","parameters":{"id":16580,"nodeType":"ParameterList","parameters":[],"src":"22167:2:60"},"returnParameters":{"id":16584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16583,"mutability":"mutable","name":"data","nameLocation":"22225:4:60","nodeType":"VariableDeclaration","scope":16585,"src":"22193:36:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_memory_ptr","typeString":"struct ReClammPoolImmutableData"},"typeName":{"id":16582,"nodeType":"UserDefinedTypeName","pathNode":{"id":16581,"name":"ReClammPoolImmutableData","nameLocations":["22193:24:60"],"nodeType":"IdentifierPath","referencedDeclaration":16337,"src":"22193:24:60"},"referencedDeclaration":16337,"src":"22193:24:60","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPoolImmutableData_$16337_storage_ptr","typeString":"struct ReClammPoolImmutableData"}},"visibility":"internal"}],"src":"22192:38:60"},"scope":16616,"src":"22131:100:60","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":16586,"nodeType":"StructuredDocumentation","src":"22404:751:60","text":" @notice Initiates a price ratio update by setting a new ending price ratio and time interval.\n @dev The price ratio is calculated by interpolating between the start and end times. The start price ratio will\n be set to the current fourth root price ratio of the pool. This is a permissioned function.\n @param endPriceRatio The new ending value of the price ratio, as a floating point value (e.g., 8 = 8e18)\n @param priceRatioUpdateStartTime The timestamp when the price ratio update will start\n @param priceRatioUpdateEndTime The timestamp when the price ratio update will end\n @return actualPriceRatioUpdateStartTime The actual start time for the price ratio update (min: block.timestamp)."},"functionSelector":"a6d2e718","id":16597,"implemented":false,"kind":"function","modifiers":[],"name":"startPriceRatioUpdate","nameLocation":"23169:21:60","nodeType":"FunctionDefinition","parameters":{"id":16593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16588,"mutability":"mutable","name":"endPriceRatio","nameLocation":"23208:13:60","nodeType":"VariableDeclaration","scope":16597,"src":"23200:21:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16587,"name":"uint256","nodeType":"ElementaryTypeName","src":"23200:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16590,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"23239:25:60","nodeType":"VariableDeclaration","scope":16597,"src":"23231:33:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16589,"name":"uint256","nodeType":"ElementaryTypeName","src":"23231:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16592,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"23282:23:60","nodeType":"VariableDeclaration","scope":16597,"src":"23274:31:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16591,"name":"uint256","nodeType":"ElementaryTypeName","src":"23274:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23190:121:60"},"returnParameters":{"id":16596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16595,"mutability":"mutable","name":"actualPriceRatioUpdateStartTime","nameLocation":"23338:31:60","nodeType":"VariableDeclaration","scope":16597,"src":"23330:39:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16594,"name":"uint256","nodeType":"ElementaryTypeName","src":"23330:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23329:41:60"},"scope":16616,"src":"23160:211:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16598,"nodeType":"StructuredDocumentation","src":"23377:315:60","text":" @notice Stops an ongoing price ratio update.\n @dev The price ratio is calculated by interpolating between the start and end times. The new end price ratio\n will be set to the current one at the current timestamp, effectively pausing the update.\n This is a permissioned function."},"functionSelector":"d4a5b63a","id":16601,"implemented":false,"kind":"function","modifiers":[],"name":"stopPriceRatioUpdate","nameLocation":"23706:20:60","nodeType":"FunctionDefinition","parameters":{"id":16599,"nodeType":"ParameterList","parameters":[],"src":"23726:2:60"},"returnParameters":{"id":16600,"nodeType":"ParameterList","parameters":[],"src":"23737:0:60"},"scope":16616,"src":"23697:41:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16602,"nodeType":"StructuredDocumentation","src":"23744:931:60","text":" @notice Updates the daily price shift exponent, as a 18-decimal FP percentage.\n @dev This function is considered a user interaction, and therefore recalculates the virtual balances and sets\n the last timestamp. This is a permissioned function.\n A percentage of 100% will make the price range double (or halve) within a day.\n A percentage of 200% will make the price range quadruple (or quartered) within a day.\n More generically, the new price range will be either\n Range_old * 2^(newDailyPriceShiftExponent / 100), or\n Range_old / 2^(newDailyPriceShiftExponent / 100)\n @param newDailyPriceShiftExponent The new daily price shift exponent\n @return actualNewDailyPriceShiftExponent The actual new daily price shift exponent, after accounting for\n precision loss incurred when dealing with the internal representation of the exponent"},"functionSelector":"c66dbc4b","id":16609,"implemented":false,"kind":"function","modifiers":[],"name":"setDailyPriceShiftExponent","nameLocation":"24689:26:60","nodeType":"FunctionDefinition","parameters":{"id":16605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16604,"mutability":"mutable","name":"newDailyPriceShiftExponent","nameLocation":"24733:26:60","nodeType":"VariableDeclaration","scope":16609,"src":"24725:34:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16603,"name":"uint256","nodeType":"ElementaryTypeName","src":"24725:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24715:50:60"},"returnParameters":{"id":16608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16607,"mutability":"mutable","name":"actualNewDailyPriceShiftExponent","nameLocation":"24792:32:60","nodeType":"VariableDeclaration","scope":16609,"src":"24784:40:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16606,"name":"uint256","nodeType":"ElementaryTypeName","src":"24784:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24783:42:60"},"scope":16616,"src":"24680:146:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":16610,"nodeType":"StructuredDocumentation","src":"24832:280:60","text":" @notice Set the centeredness margin.\n @dev This function is considered a user action, so it will update the last timestamp and virtual balances.\n This is a permissioned function.\n @param newCenterednessMargin The new centeredness margin"},"functionSelector":"0673d09a","id":16615,"implemented":false,"kind":"function","modifiers":[],"name":"setCenterednessMargin","nameLocation":"25126:21:60","nodeType":"FunctionDefinition","parameters":{"id":16613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16612,"mutability":"mutable","name":"newCenterednessMargin","nameLocation":"25156:21:60","nodeType":"VariableDeclaration","scope":16615,"src":"25148:29:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16611,"name":"uint256","nodeType":"ElementaryTypeName","src":"25148:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25147:31:60"},"returnParameters":{"id":16614,"nodeType":"ParameterList","parameters":[],"src":"25187:0:60"},"scope":16616,"src":"25117:71:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":16617,"src":"5974:19216:60","usedErrors":[16418,16421,16424,16427,16430,16433,16436,16439,16442,16447,16450,16453,16456,16459,16462],"usedEvents":[16391,16398,16405,16410,16415]}],"src":"46:25145:60"},"id":60},"contracts/lib/ReClammMath.sol":{"ast":{"absolutePath":"contracts/lib/ReClammMath.sol","exportedSymbols":{"FixedPoint":[4818],"Math":[11538],"PriceRatioState":[16635],"ReClammMath":[17701],"Rounding":[2470],"SafeCast":[13303],"a":[16638],"b":[16641]},"id":17702,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16618,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"82:24:61"},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":16620,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17702,"sourceUnit":13304,"src":"108:75:61","symbolAliases":[{"foreign":{"id":16619,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13303,"src":"117:8:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","id":16622,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17702,"sourceUnit":11539,"src":"184:67:61","symbolAliases":[{"foreign":{"id":16621,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"193:4:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":16624,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17702,"sourceUnit":2610,"src":"253:87:61","symbolAliases":[{"foreign":{"id":16623,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"262:8:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":16626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17702,"sourceUnit":4819,"src":"342:92:61","symbolAliases":[{"foreign":{"id":16625,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"351:10:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"PriceRatioState","id":16635,"members":[{"constant":false,"id":16628,"mutability":"mutable","name":"startFourthRootPriceRatio","nameLocation":"472:25:61","nodeType":"VariableDeclaration","scope":16635,"src":"465:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":16627,"name":"uint96","nodeType":"ElementaryTypeName","src":"465:6:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":16630,"mutability":"mutable","name":"endFourthRootPriceRatio","nameLocation":"510:23:61","nodeType":"VariableDeclaration","scope":16635,"src":"503:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":16629,"name":"uint96","nodeType":"ElementaryTypeName","src":"503:6:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":16632,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"546:25:61","nodeType":"VariableDeclaration","scope":16635,"src":"539:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16631,"name":"uint32","nodeType":"ElementaryTypeName","src":"539:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16634,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"584:23:61","nodeType":"VariableDeclaration","scope":16635,"src":"577:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16633,"name":"uint32","nodeType":"ElementaryTypeName","src":"577:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"name":"PriceRatioState","nameLocation":"443:15:61","nodeType":"StructDefinition","scope":17702,"src":"436:174:61","visibility":"public"},{"constant":true,"id":16638,"mutability":"constant","name":"a","nameLocation":"855:1:61","nodeType":"VariableDeclaration","scope":17702,"src":"838:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16636,"name":"uint256","nodeType":"ElementaryTypeName","src":"838:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":16637,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"859:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"internal"},{"constant":true,"id":16641,"mutability":"constant","name":"b","nameLocation":"879:1:61","nodeType":"VariableDeclaration","scope":17702,"src":"862:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16639,"name":"uint256","nodeType":"ElementaryTypeName","src":"862:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31","id":16640,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"883:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"visibility":"internal"},{"abstract":false,"baseContracts":[],"canonicalName":"ReClammMath","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":17701,"linearizedBaseContracts":[17701],"name":"ReClammMath","nameLocation":"895:11:61","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16644,"libraryName":{"id":16642,"name":"FixedPoint","nameLocations":["919:10:61"],"nodeType":"IdentifierPath","referencedDeclaration":4818,"src":"919:10:61"},"nodeType":"UsingForDirective","src":"913:29:61","typeName":{"id":16643,"name":"uint256","nodeType":"ElementaryTypeName","src":"934:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":16646,"libraryName":{"id":16645,"name":"SafeCast","nameLocations":["953:8:61"],"nodeType":"IdentifierPath","referencedDeclaration":13303,"src":"953:8:61"},"nodeType":"UsingForDirective","src":"947:21:61"},{"global":false,"id":16649,"libraryName":{"id":16647,"name":"ReClammMath","nameLocations":["979:11:61"],"nodeType":"IdentifierPath","referencedDeclaration":17701,"src":"979:11:61"},"nodeType":"UsingForDirective","src":"973:27:61","typeName":{"id":16648,"name":"bool","nodeType":"ElementaryTypeName","src":"995:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},{"documentation":{"id":16650,"nodeType":"StructuredDocumentation","src":"1006:116:61","text":"@notice The swap result is greater than the real balance of the token (i.e., the balance would drop below zero)."},"errorSelector":"b413e252","id":16652,"name":"AmountOutGreaterThanBalance","nameLocation":"1133:27:61","nodeType":"ErrorDefinition","parameters":{"id":16651,"nodeType":"ParameterList","parameters":[],"src":"1160:2:61"},"src":"1127:36:61"},{"constant":true,"id":16655,"mutability":"constant","name":"_PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT","nameLocation":"2219:41:61","nodeType":"VariableDeclaration","scope":17701,"src":"2194:75:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16653,"name":"uint256","nodeType":"ElementaryTypeName","src":"2194:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313234363439","id":16654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2263:6:61","typeDescriptions":{"typeIdentifier":"t_rational_124649_by_1","typeString":"int_const 124649"},"value":"124649"},"visibility":"private"},{"constant":true,"id":16660,"mutability":"constant","name":"_INITIALIZATION_MAX_BALANCE_A","nameLocation":"2600:29:61","nodeType":"VariableDeclaration","scope":17701,"src":"2575:67:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16656,"name":"uint256","nodeType":"ElementaryTypeName","src":"2575:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"},"id":16659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"316536","id":16657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2632:3:61","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1e6"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"31653138","id":16658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2638:4:61","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"src":"2632:10:61","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"}},"visibility":"private"},{"body":{"id":16706,"nodeType":"Block","src":"3976:424:61","statements":[{"assignments":[16686,16688,null],"declarations":[{"constant":false,"id":16686,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"3995:15:61","nodeType":"VariableDeclaration","scope":16706,"src":"3987:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16685,"name":"uint256","nodeType":"ElementaryTypeName","src":"3987:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16688,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"4020:15:61","nodeType":"VariableDeclaration","scope":16706,"src":"4012:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4012:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":16698,"initialValue":{"arguments":[{"id":16690,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"4084:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16691,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16666,"src":"4114:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16692,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16668,"src":"4147:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16693,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16670,"src":"4180:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16694,"name":"lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16672,"src":"4213:13:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":16695,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16674,"src":"4240:18:61","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":16696,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16677,"src":"4272:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState storage pointer"}],"id":16689,"name":"computeCurrentVirtualBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17117,"src":"4041:29:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint32_$_t_uint64_$_t_struct$_PriceRatioState_$16635_storage_ptr_$returns$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint32,uint64,struct PriceRatioState storage pointer) view returns (uint256,uint256,bool)"}},"id":16697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4041:256:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"3986:311:61"},{"expression":{"arguments":[{"id":16700,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16664,"src":"4332:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16701,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16686,"src":"4350:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16702,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16688,"src":"4367:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16703,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16680,"src":"4384:8:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}],"id":16699,"name":"computeInvariant","nodeType":"Identifier","overloadedDeclarations":[16707,16759],"referencedDeclaration":16759,"src":"4315:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2470_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,enum Rounding) pure returns (uint256)"}},"id":16704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4315:78:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16684,"id":16705,"nodeType":"Return","src":"4308:85:61"}]},"documentation":{"id":16661,"nodeType":"StructuredDocumentation","src":"2649:953:61","text":" @notice Get the current virtual balances and compute the invariant of the pool using constant product.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param lastVirtualBalanceA The last virtual balance of token A\n @param lastVirtualBalanceB The last virtual balance of token B\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n @param lastTimestamp The timestamp of the last user interaction with the pool\n @param centerednessMargin A symmetrical measure of how closely an unbalanced pool can approach the limits of the\n price range before it is considered outside the target range\n @param priceRatioState A struct containing start and end price ratios and a time interval\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The invariant of the pool"},"id":16707,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"3616:16:61","nodeType":"FunctionDefinition","parameters":{"id":16681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16664,"mutability":"mutable","name":"balancesScaled18","nameLocation":"3659:16:61","nodeType":"VariableDeclaration","scope":16707,"src":"3642:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16662,"name":"uint256","nodeType":"ElementaryTypeName","src":"3642:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16663,"nodeType":"ArrayTypeName","src":"3642:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16666,"mutability":"mutable","name":"lastVirtualBalanceA","nameLocation":"3693:19:61","nodeType":"VariableDeclaration","scope":16707,"src":"3685:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16665,"name":"uint256","nodeType":"ElementaryTypeName","src":"3685:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16668,"mutability":"mutable","name":"lastVirtualBalanceB","nameLocation":"3730:19:61","nodeType":"VariableDeclaration","scope":16707,"src":"3722:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16667,"name":"uint256","nodeType":"ElementaryTypeName","src":"3722:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16670,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"3767:19:61","nodeType":"VariableDeclaration","scope":16707,"src":"3759:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16669,"name":"uint256","nodeType":"ElementaryTypeName","src":"3759:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16672,"mutability":"mutable","name":"lastTimestamp","nameLocation":"3803:13:61","nodeType":"VariableDeclaration","scope":16707,"src":"3796:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16671,"name":"uint32","nodeType":"ElementaryTypeName","src":"3796:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":16674,"mutability":"mutable","name":"centerednessMargin","nameLocation":"3833:18:61","nodeType":"VariableDeclaration","scope":16707,"src":"3826:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":16673,"name":"uint64","nodeType":"ElementaryTypeName","src":"3826:6:61","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":16677,"mutability":"mutable","name":"priceRatioState","nameLocation":"3885:15:61","nodeType":"VariableDeclaration","scope":16707,"src":"3861:39:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":16676,"nodeType":"UserDefinedTypeName","pathNode":{"id":16675,"name":"PriceRatioState","nameLocations":["3861:15:61"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"3861:15:61"},"referencedDeclaration":16635,"src":"3861:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"},{"constant":false,"id":16680,"mutability":"mutable","name":"rounding","nameLocation":"3919:8:61","nodeType":"VariableDeclaration","scope":16707,"src":"3910:17:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"},"typeName":{"id":16679,"nodeType":"UserDefinedTypeName","pathNode":{"id":16678,"name":"Rounding","nameLocations":["3910:8:61"],"nodeType":"IdentifierPath","referencedDeclaration":2470,"src":"3910:8:61"},"referencedDeclaration":2470,"src":"3910:8:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"3632:301:61"},"returnParameters":{"id":16684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16683,"mutability":"mutable","name":"invariant","nameLocation":"3965:9:61","nodeType":"VariableDeclaration","scope":16707,"src":"3957:17:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16682,"name":"uint256","nodeType":"ElementaryTypeName","src":"3957:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3956:19:61"},"scope":17701,"src":"3607:793:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":16758,"nodeType":"Block","src":"5775:289:61","statements":[{"assignments":[16732],"declarations":[{"constant":false,"id":16732,"mutability":"mutable","name":"_mulUpOrDown","nameLocation":"5835:12:61","nodeType":"VariableDeclaration","scope":16758,"src":"5785:62:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"typeName":{"id":16731,"nodeType":"FunctionTypeName","parameterTypes":{"id":16727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16731,"src":"5794:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16723,"name":"uint256","nodeType":"ElementaryTypeName","src":"5794:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16731,"src":"5803:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16725,"name":"uint256","nodeType":"ElementaryTypeName","src":"5803:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5793:18:61"},"returnParameterTypes":{"id":16730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16731,"src":"5826:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16728,"name":"uint256","nodeType":"ElementaryTypeName","src":"5826:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5825:9:61"},"src":"5785:62:61","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":16742,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"},"id":16736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16733,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16718,"src":"5850:8:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":16734,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"5862:8:61","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2470_$","typeString":"type(enum Rounding)"}},"id":16735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5871:10:61","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2469,"src":"5862:19:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"src":"5850:31:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":16739,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"5929:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5940:5:61","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4580,"src":"5929:16:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5850:95:61","trueExpression":{"expression":{"id":16737,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"5896:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5907:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"5896:18:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5785:160:61"},{"expression":{"arguments":[{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16744,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16711,"src":"5977:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16746,"indexExpression":{"id":16745,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"5994:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5977:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16747,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16713,"src":"5999:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5977:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16749,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5976:39:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16750,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16711,"src":"6018:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16752,"indexExpression":{"id":16751,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"6035:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6018:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16753,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16715,"src":"6040:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6018:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16755,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6017:39:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16743,"name":"_mulUpOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16732,"src":"5963:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5963:94:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16722,"id":16757,"nodeType":"Return","src":"5956:101:61"}]},"documentation":{"id":16708,"nodeType":"StructuredDocumentation","src":"4406:1164:61","text":" @notice Compute the invariant of the pool using constant product.\n @dev Note that the invariant is computed as (x+a)(y+b), without a square root. This is because the calculations\n of virtual balance updates are easier with this invariant. Unlike most other pools, the ReClamm invariant will\n change over time, if the pool is outside the target range, or the price ratio is updating, so these pools are\n not composable. Therefore, the BPT value is meaningless.\n Consequently, liquidity can only be added or removed proportionally, as these operations do not depend on the\n invariant. Therefore, it does not matter that the relationship between the invariant and liquidity is non-\n linear; the invariant is only used to calculate swaps.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA The last virtual balance of token A\n @param virtualBalanceB The last virtual balance of token B\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The invariant of the pool"},"id":16759,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"5584:16:61","nodeType":"FunctionDefinition","parameters":{"id":16719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16711,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5627:16:61","nodeType":"VariableDeclaration","scope":16759,"src":"5610:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16709,"name":"uint256","nodeType":"ElementaryTypeName","src":"5610:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16710,"nodeType":"ArrayTypeName","src":"5610:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16713,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"5661:15:61","nodeType":"VariableDeclaration","scope":16759,"src":"5653:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16712,"name":"uint256","nodeType":"ElementaryTypeName","src":"5653:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16715,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"5694:15:61","nodeType":"VariableDeclaration","scope":16759,"src":"5686:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16714,"name":"uint256","nodeType":"ElementaryTypeName","src":"5686:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16718,"mutability":"mutable","name":"rounding","nameLocation":"5728:8:61","nodeType":"VariableDeclaration","scope":16759,"src":"5719:17:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"},"typeName":{"id":16717,"nodeType":"UserDefinedTypeName","pathNode":{"id":16716,"name":"Rounding","nameLocations":["5719:8:61"],"nodeType":"IdentifierPath","referencedDeclaration":2470,"src":"5719:8:61"},"referencedDeclaration":2470,"src":"5719:8:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"5600:142:61"},"returnParameters":{"id":16722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16721,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":16759,"src":"5766:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16720,"name":"uint256","nodeType":"ElementaryTypeName","src":"5766:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5765:9:61"},"scope":17701,"src":"5575:489:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16824,"nodeType":"Block","src":"7037:2280:61","statements":[{"assignments":[16779,16781],"declarations":[{"constant":false,"id":16779,"mutability":"mutable","name":"virtualBalanceTokenIn","nameLocation":"8706:21:61","nodeType":"VariableDeclaration","scope":16824,"src":"8698:29:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16778,"name":"uint256","nodeType":"ElementaryTypeName","src":"8698:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16781,"mutability":"mutable","name":"virtualBalanceTokenOut","nameLocation":"8737:22:61","nodeType":"VariableDeclaration","scope":16824,"src":"8729:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16780,"name":"uint256","nodeType":"ElementaryTypeName","src":"8729:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16792,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16782,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16769,"src":"8763:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":16783,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"8779:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8763:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":16788,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16767,"src":"8845:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16789,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16765,"src":"8862:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16790,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8844:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":16791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8763:115:61","trueExpression":{"components":[{"id":16785,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16765,"src":"8796:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16786,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16767,"src":"8813:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16787,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8795:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8697:181:61"},{"expression":{"id":16812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16793,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16776,"src":"8889:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16794,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"8923:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16796,"indexExpression":{"id":16795,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16771,"src":"8940:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8923:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16797,"name":"virtualBalanceTokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16781,"src":"8957:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8923:56:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16799,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8922:58:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":16800,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16773,"src":"8983:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8922:77:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16802,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8921:79:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16803,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"9016:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16805,"indexExpression":{"id":16804,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16769,"src":"9033:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9016:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16806,"name":"virtualBalanceTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16779,"src":"9049:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9016:54:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16808,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16773,"src":"9073:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9016:73:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16810,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9015:75:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8921:169:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8889:201:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16813,"nodeType":"ExpressionStatement","src":"8889:201:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16814,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16776,"src":"9105:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":16815,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16763,"src":"9125:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16817,"indexExpression":{"id":16816,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16771,"src":"9142:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9125:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9105:51:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16823,"nodeType":"IfStatement","src":"9101:210:61","trueBody":{"id":16822,"nodeType":"Block","src":"9158:153:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16819,"name":"AmountOutGreaterThanBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16652,"src":"9271:27:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9271:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16821,"nodeType":"RevertStatement","src":"9264:36:61"}]}}]},"documentation":{"id":16760,"nodeType":"StructuredDocumentation","src":"6070:675:61","text":" @notice Compute the `amountOut` of tokenOut in a swap, given the current balances and virtual balances.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceAе The last virtual balance of token A\n @param virtualBalanceB The last virtual balance of token B\n @param tokenInIndex Index of the token being swapped in\n @param tokenOutIndex Index of the token being swapped out\n @param amountInScaled18 The exact amount of `tokenIn` (i.e., the amount given in an ExactIn swap)\n @return amountOutScaled18 The calculated amount of `tokenOut` returned in an ExactIn swap"},"id":16825,"implemented":true,"kind":"function","modifiers":[],"name":"computeOutGivenIn","nameLocation":"6759:17:61","nodeType":"FunctionDefinition","parameters":{"id":16774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16763,"mutability":"mutable","name":"balancesScaled18","nameLocation":"6803:16:61","nodeType":"VariableDeclaration","scope":16825,"src":"6786:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16761,"name":"uint256","nodeType":"ElementaryTypeName","src":"6786:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16762,"nodeType":"ArrayTypeName","src":"6786:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16765,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"6837:15:61","nodeType":"VariableDeclaration","scope":16825,"src":"6829:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16764,"name":"uint256","nodeType":"ElementaryTypeName","src":"6829:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16767,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"6870:15:61","nodeType":"VariableDeclaration","scope":16825,"src":"6862:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16766,"name":"uint256","nodeType":"ElementaryTypeName","src":"6862:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16769,"mutability":"mutable","name":"tokenInIndex","nameLocation":"6903:12:61","nodeType":"VariableDeclaration","scope":16825,"src":"6895:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16768,"name":"uint256","nodeType":"ElementaryTypeName","src":"6895:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16771,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"6933:13:61","nodeType":"VariableDeclaration","scope":16825,"src":"6925:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16770,"name":"uint256","nodeType":"ElementaryTypeName","src":"6925:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16773,"mutability":"mutable","name":"amountInScaled18","nameLocation":"6964:16:61","nodeType":"VariableDeclaration","scope":16825,"src":"6956:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16772,"name":"uint256","nodeType":"ElementaryTypeName","src":"6956:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6776:210:61"},"returnParameters":{"id":16777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16776,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"7018:17:61","nodeType":"VariableDeclaration","scope":16825,"src":"7010:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16775,"name":"uint256","nodeType":"ElementaryTypeName","src":"7010:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7009:27:61"},"scope":17701,"src":"6750:2567:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16888,"nodeType":"Block","src":"10290:2400:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16844,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16839,"src":"11952:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":16845,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16829,"src":"11972:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16847,"indexExpression":{"id":16846,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16837,"src":"11989:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11972:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11952:51:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16853,"nodeType":"IfStatement","src":"11948:210:61","trueBody":{"id":16852,"nodeType":"Block","src":"12005:153:61","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":16849,"name":"AmountOutGreaterThanBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16652,"src":"12118:27:61","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12118:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16851,"nodeType":"RevertStatement","src":"12111:36:61"}]}},{"assignments":[16855,16857],"declarations":[{"constant":false,"id":16855,"mutability":"mutable","name":"virtualBalanceTokenIn","nameLocation":"12177:21:61","nodeType":"VariableDeclaration","scope":16888,"src":"12169:29:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16854,"name":"uint256","nodeType":"ElementaryTypeName","src":"12169:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16857,"mutability":"mutable","name":"virtualBalanceTokenOut","nameLocation":"12208:22:61","nodeType":"VariableDeclaration","scope":16888,"src":"12200:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16856,"name":"uint256","nodeType":"ElementaryTypeName","src":"12200:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16868,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16858,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16835,"src":"12234:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":16859,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"12250:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12234:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":16864,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16833,"src":"12316:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16865,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16831,"src":"12333:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16866,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12315:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":16867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12234:115:61","trueExpression":{"components":[{"id":16861,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16831,"src":"12267:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16862,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16833,"src":"12284:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16863,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12266:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"12168:181:61"},{"expression":{"id":16886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16869,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16842,"src":"12446:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16872,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16829,"src":"12498:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16874,"indexExpression":{"id":16873,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16835,"src":"12515:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12498:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16875,"name":"virtualBalanceTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16855,"src":"12531:21:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12498:54:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16877,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16839,"src":"12566:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16878,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16829,"src":"12597:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16880,"indexExpression":{"id":16879,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16837,"src":"12614:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12597:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16881,"name":"virtualBalanceTokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16857,"src":"12631:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12597:56:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16883,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16839,"src":"12656:17:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12597:76:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16870,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"12465:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12476:8:61","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":4644,"src":"12465:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":16885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12465:218:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12446:237:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16887,"nodeType":"ExpressionStatement","src":"12446:237:61"}]},"documentation":{"id":16826,"nodeType":"StructuredDocumentation","src":"9323:675:61","text":" @notice Compute the `amountIn` of tokenIn in a swap, given the current balances and virtual balances.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA The last virtual balances of token A\n @param virtualBalanceB The last virtual balances of token B\n @param tokenInIndex Index of the token being swapped in\n @param tokenOutIndex Index of the token being swapped out\n @param amountOutScaled18 The exact amount of `tokenOut` (i.e., the amount given in an ExactOut swap)\n @return amountInScaled18 The calculated amount of `tokenIn` returned in an ExactOut swap"},"id":16889,"implemented":true,"kind":"function","modifiers":[],"name":"computeInGivenOut","nameLocation":"10012:17:61","nodeType":"FunctionDefinition","parameters":{"id":16840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16829,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10056:16:61","nodeType":"VariableDeclaration","scope":16889,"src":"10039:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16827,"name":"uint256","nodeType":"ElementaryTypeName","src":"10039:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16828,"nodeType":"ArrayTypeName","src":"10039:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16831,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"10090:15:61","nodeType":"VariableDeclaration","scope":16889,"src":"10082:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16830,"name":"uint256","nodeType":"ElementaryTypeName","src":"10082:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16833,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"10123:15:61","nodeType":"VariableDeclaration","scope":16889,"src":"10115:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16832,"name":"uint256","nodeType":"ElementaryTypeName","src":"10115:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16835,"mutability":"mutable","name":"tokenInIndex","nameLocation":"10156:12:61","nodeType":"VariableDeclaration","scope":16889,"src":"10148:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16834,"name":"uint256","nodeType":"ElementaryTypeName","src":"10148:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16837,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"10186:13:61","nodeType":"VariableDeclaration","scope":16889,"src":"10178:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16836,"name":"uint256","nodeType":"ElementaryTypeName","src":"10178:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16839,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"10217:17:61","nodeType":"VariableDeclaration","scope":16889,"src":"10209:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16838,"name":"uint256","nodeType":"ElementaryTypeName","src":"10209:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10029:211:61"},"returnParameters":{"id":16843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16842,"mutability":"mutable","name":"amountInScaled18","nameLocation":"10272:16:61","nodeType":"VariableDeclaration","scope":16889,"src":"10264:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16841,"name":"uint256","nodeType":"ElementaryTypeName","src":"10264:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10263:26:61"},"scope":17701,"src":"10003:2687:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":16985,"nodeType":"Block","src":"14942:1369:61","statements":[{"expression":{"id":16913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16908,"name":"priceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16906,"src":"14952:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16911,"name":"minPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16892,"src":"14990:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16909,"name":"maxPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16894,"src":"14965:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14982:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"14965:24:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14965:42:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14952:55:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16914,"nodeType":"ExpressionStatement","src":"14952:55:61"},{"assignments":[16916],"declarations":[{"constant":false,"id":16916,"mutability":"mutable","name":"sqrtPriceRatio","nameLocation":"15305:14:61","nodeType":"VariableDeclaration","scope":16985,"src":"15297:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16915,"name":"uint256","nodeType":"ElementaryTypeName","src":"15297:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16920,"initialValue":{"arguments":[{"id":16918,"name":"priceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16906,"src":"15335:10:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16917,"name":"sqrtScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17677,"src":"15322:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":16919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15322:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15297:49:61"},{"expression":{"id":16929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16921,"name":"virtualBalanceAScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16902,"src":"15403:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16924,"name":"sqrtPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16916,"src":"15467:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":16925,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"15484:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":16926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15495:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"15484:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15467:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16922,"name":"_INITIALIZATION_MAX_BALANCE_A","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"15429:29:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15459:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"15429:37:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:70:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15403:96:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16930,"nodeType":"ExpressionStatement","src":"15403:96:61"},{"expression":{"id":16938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16931,"name":"virtualBalanceBScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16904,"src":"15550:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16934,"name":"virtualBalanceAScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16902,"src":"15601:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16935,"name":"_INITIALIZATION_MAX_BALANCE_A","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"15627:29:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15601:55:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16932,"name":"minPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16892,"src":"15576:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15593:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"15576:24:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15576:81:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15550:107:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16939,"nodeType":"ExpressionStatement","src":"15550:107:61"},{"expression":{"id":16946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16940,"name":"realBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16900,"src":"15668:20:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"32","id":16944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15705:1:61","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":16943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15691:13:61","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":16941,"name":"uint256","nodeType":"ElementaryTypeName","src":"15695:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16942,"nodeType":"ArrayTypeName","src":"15695:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":16945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15691:16:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15668:39:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16947,"nodeType":"ExpressionStatement","src":"15668:39:61"},{"expression":{"id":16964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16948,"name":"realBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16900,"src":"15777:20:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16950,"indexExpression":{"id":16949,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"15798:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15777:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16957,"name":"_INITIALIZATION_MAX_BALANCE_A","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16660,"src":"15923:29:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16958,"name":"virtualBalanceAScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16902,"src":"15955:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15923:55:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":16954,"name":"virtualBalanceBScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16904,"src":"15871:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16952,"name":"targetPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"15845:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15865:5:61","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4580,"src":"15845:25:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15845:50:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15896:5:61","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":4580,"src":"15845:56:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15845:151:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16951,"name":"sqrtScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17677,"src":"15815:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":16961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15815:195:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":16962,"name":"virtualBalanceBScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16904,"src":"16025:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15815:233:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15777:271:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16965,"nodeType":"ExpressionStatement","src":"15777:271:61"},{"expression":{"id":16983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16966,"name":"realBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16900,"src":"16119:20:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16968,"indexExpression":{"id":16967,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"16140:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16119:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":16981,"name":"targetPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"16284:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":16969,"name":"realBalancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16900,"src":"16146:20:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16971,"indexExpression":{"id":16970,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"16167:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16146:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":16972,"name":"virtualBalanceBScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16904,"src":"16184:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16146:61:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[{"id":16976,"name":"targetPriceScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16896,"src":"16254:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16974,"name":"virtualBalanceAScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16902,"src":"16222:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16246:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"16222:31:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16222:52:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16146:128:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16979,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16145:130:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16276:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"16145:138:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":16982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16145:159:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16119:185:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16984,"nodeType":"ExpressionStatement","src":"16119:185:61"}]},"documentation":{"id":16890,"nodeType":"StructuredDocumentation","src":"12696:1847:61","text":" @notice Computes the theoretical initial state of a ReClamm pool based on its price parameters.\n @dev This function calculates three key components needed to initialize a ReClamm pool:\n 1. Initial real token balances - Using a reference value (_INITIALIZATION_MAX_BALANCE_A) that will be\n scaled later during actual pool initialization based on the actual tokens provided\n 2. Initial virtual balances - Additional balances used to control the pool's price range\n 3. Price ratio - The ratio between the pool's minimum and maximum price boundaries\n Note: The actual balances used in pool initialization will be proportionally scaled versions\n of these theoretical values, maintaining the same ratios but adjusted to the actual amount of\n liquidity provided.\n Price is defined as (balanceB + virtualBalanceB) / (balanceA + virtualBalanceA),\n where A and B are the pool tokens, sorted by address (A is the token with the lowest address).\n For example, if the pool is ETH/USDC, and USDC has an address that is smaller than ETH, this price will\n be defined as ETH/USDC (meaning, how much ETH is required to buy 1 USDC).\n @param minPriceScaled18 The minimum price limit of the pool\n @param maxPriceScaled18 The maximum price limit of the pool\n @param targetPriceScaled18 The desired initial price point within the total price range (i.e., the midpoint)\n @return realBalancesScaled18 Array of theoretical initial token balances [tokenA, tokenB]\n @return virtualBalanceAScaled18 The theoretical initial virtual balance of token A [virtualA]\n @return virtualBalanceBScaled18 The theoretical initial virtual balance of token B [virtualB]\n @return priceRatio The ratio of the max price to the min price"},"id":16986,"implemented":true,"kind":"function","modifiers":[],"name":"computeTheoreticalPriceRatioAndBalances","nameLocation":"14557:39:61","nodeType":"FunctionDefinition","parameters":{"id":16897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16892,"mutability":"mutable","name":"minPriceScaled18","nameLocation":"14614:16:61","nodeType":"VariableDeclaration","scope":16986,"src":"14606:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16891,"name":"uint256","nodeType":"ElementaryTypeName","src":"14606:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16894,"mutability":"mutable","name":"maxPriceScaled18","nameLocation":"14648:16:61","nodeType":"VariableDeclaration","scope":16986,"src":"14640:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16893,"name":"uint256","nodeType":"ElementaryTypeName","src":"14640:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16896,"mutability":"mutable","name":"targetPriceScaled18","nameLocation":"14682:19:61","nodeType":"VariableDeclaration","scope":16986,"src":"14674:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16895,"name":"uint256","nodeType":"ElementaryTypeName","src":"14674:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14596:111:61"},"returnParameters":{"id":16907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16900,"mutability":"mutable","name":"realBalancesScaled18","nameLocation":"14785:20:61","nodeType":"VariableDeclaration","scope":16986,"src":"14768:37:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16898,"name":"uint256","nodeType":"ElementaryTypeName","src":"14768:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16899,"nodeType":"ArrayTypeName","src":"14768:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16902,"mutability":"mutable","name":"virtualBalanceAScaled18","nameLocation":"14827:23:61","nodeType":"VariableDeclaration","scope":16986,"src":"14819:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16901,"name":"uint256","nodeType":"ElementaryTypeName","src":"14819:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16904,"mutability":"mutable","name":"virtualBalanceBScaled18","nameLocation":"14872:23:61","nodeType":"VariableDeclaration","scope":16986,"src":"14864:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16903,"name":"uint256","nodeType":"ElementaryTypeName","src":"14864:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16906,"mutability":"mutable","name":"priceRatio","nameLocation":"14917:10:61","nodeType":"VariableDeclaration","scope":16986,"src":"14909:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16905,"name":"uint256","nodeType":"ElementaryTypeName","src":"14909:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14754:183:61"},"scope":17701,"src":"14548:1763:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17116,"nodeType":"Block","src":"18322:2341:61","statements":[{"assignments":[17013],"declarations":[{"constant":false,"id":17013,"mutability":"mutable","name":"currentTimestamp","nameLocation":"18339:16:61","nodeType":"VariableDeclaration","scope":17116,"src":"18332:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17012,"name":"uint32","nodeType":"ElementaryTypeName","src":"18332:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":17018,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":17014,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"18358:5:61","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18364:9:61","memberName":"timestamp","nodeType":"MemberAccess","src":"18358:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18374:8:61","memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":12349,"src":"18358:24:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":17017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18358:26:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"18332:52:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17019,"name":"lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16998,"src":"18542:13:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17020,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"18559:16:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"18542:33:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17028,"nodeType":"IfStatement","src":"18538:120:61","trueBody":{"id":17027,"nodeType":"Block","src":"18577:81:61","statements":[{"expression":{"components":[{"id":17022,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16992,"src":"18599:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17023,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16994,"src":"18620:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":17024,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18641:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"id":17025,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18598:49:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,uint256,bool)"}},"functionReturnParameters":17011,"id":17026,"nodeType":"Return","src":"18591:56:61"}]}},{"expression":{"id":17031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17029,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"18668:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17030,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16992,"src":"18693:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18668:44:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17032,"nodeType":"ExpressionStatement","src":"18668:44:61"},{"expression":{"id":17035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17033,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"18722:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":17034,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16994,"src":"18747:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18722:44:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17036,"nodeType":"ExpressionStatement","src":"18722:44:61"},{"id":17082,"nodeType":"Block","src":"18777:1125:61","statements":[{"assignments":[17039],"declarations":[{"constant":false,"id":17039,"mutability":"mutable","name":"priceRatioState","nameLocation":"18844:15:61","nodeType":"VariableDeclaration","scope":17082,"src":"18821:38:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":17038,"nodeType":"UserDefinedTypeName","pathNode":{"id":17037,"name":"PriceRatioState","nameLocations":["18821:15:61"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"18821:15:61"},"referencedDeclaration":16635,"src":"18821:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"id":17041,"initialValue":{"id":17040,"name":"storedPriceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17003,"src":"18862:21:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"18821:62:61"},{"assignments":[17043],"declarations":[{"constant":false,"id":17043,"mutability":"mutable","name":"currentFourthRootPriceRatio","nameLocation":"18906:27:61","nodeType":"VariableDeclaration","scope":17082,"src":"18898:35:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17042,"name":"uint256","nodeType":"ElementaryTypeName","src":"18898:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17055,"initialValue":{"arguments":[{"id":17045,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"18981:16:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":17046,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19015:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17047,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19031:25:61","memberName":"startFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16628,"src":"19015:41:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"expression":{"id":17048,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19074:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17049,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19090:23:61","memberName":"endFourthRootPriceRatio","nodeType":"MemberAccess","referencedDeclaration":16630,"src":"19074:39:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"expression":{"id":17050,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19131:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19147:25:61","memberName":"priceRatioUpdateStartTime","nodeType":"MemberAccess","referencedDeclaration":16632,"src":"19131:41:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":17052,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19190:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19206:23:61","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16634,"src":"19190:39:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":17044,"name":"computeFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17552,"src":"18936:27:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint32_$_t_uint96_$_t_uint96_$_t_uint32_$_t_uint32_$returns$_t_uint96_$","typeString":"function (uint32,uint96,uint96,uint32,uint32) pure returns (uint96)"}},"id":17054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18936:307:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"nodeType":"VariableDeclarationStatement","src":"18898:345:61"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17056,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"19398:16:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":17057,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19417:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19433:25:61","memberName":"priceRatioUpdateStartTime","nodeType":"MemberAccess","referencedDeclaration":16632,"src":"19417:41:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"19398:60:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17060,"name":"lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16998,"src":"19478:13:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17061,"name":"priceRatioState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"19494:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_memory_ptr","typeString":"struct PriceRatioState memory"}},"id":17062,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19510:23:61","memberName":"priceRatioUpdateEndTime","nodeType":"MemberAccess","referencedDeclaration":16634,"src":"19494:39:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"19478:55:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19398:135:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17081,"nodeType":"IfStatement","src":"19377:515:61","trueBody":{"id":17080,"nodeType":"Block","src":"19548:344:61","statements":[{"expression":{"id":17074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17065,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"19567:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17066,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"19591:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17067,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19566:48:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17069,"name":"currentFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17043,"src":"19679:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17070,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16990,"src":"19728:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17071,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16992,"src":"19766:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17072,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16994,"src":"19807:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17068,"name":"computeVirtualBalancesUpdatingPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17231,"src":"19617:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256,uint256)"}},"id":17073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19617:227:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"19566:278:61","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17075,"nodeType":"ExpressionStatement","src":"19566:278:61"},{"expression":{"id":17078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17076,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17010,"src":"19863:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":17077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19873:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"19863:14:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17079,"nodeType":"ExpressionStatement","src":"19863:14:61"}]}}]},{"assignments":[17084,17086],"declarations":[{"constant":false,"id":17084,"mutability":"mutable","name":"centeredness","nameLocation":"19921:12:61","nodeType":"VariableDeclaration","scope":17116,"src":"19913:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17083,"name":"uint256","nodeType":"ElementaryTypeName","src":"19913:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17086,"mutability":"mutable","name":"isPoolAboveCenter","nameLocation":"19940:17:61","nodeType":"VariableDeclaration","scope":17116,"src":"19935:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17085,"name":"bool","nodeType":"ElementaryTypeName","src":"19935:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":17092,"initialValue":{"arguments":[{"id":17088,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16990,"src":"19994:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17089,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"20024:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17090,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"20060:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17087,"name":"computeCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17468,"src":"19961:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,bool)"}},"id":17091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19961:131:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"19912:180:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17093,"name":"centeredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17084,"src":"20212:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":17094,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17000,"src":"20227:18:61","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"20212:33:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17115,"nodeType":"IfStatement","src":"20208:449:61","trueBody":{"id":17114,"nodeType":"Block","src":"20247:410:61","statements":[{"expression":{"id":17108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17096,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"20262:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17097,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"20286:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17098,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"20261:48:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17100,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16990,"src":"20370:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17101,"name":"currentVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17006,"src":"20404:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17102,"name":"currentVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17008,"src":"20444:22:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17103,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17086,"src":"20484:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17104,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16996,"src":"20519:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17105,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17013,"src":"20556:16:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":17106,"name":"lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16998,"src":"20590:13:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":17099,"name":"computeVirtualBalancesUpdatingPriceRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17354,"src":"20312:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$_t_uint32_$_t_uint32_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,bool,uint256,uint32,uint32) pure returns (uint256,uint256)"}},"id":17107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20312:305:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"20261:356:61","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17109,"nodeType":"ExpressionStatement","src":"20261:356:61"},{"expression":{"id":17112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17110,"name":"changed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17010,"src":"20632:7:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":17111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20642:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"20632:14:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17113,"nodeType":"ExpressionStatement","src":"20632:14:61"}]}}]},"documentation":{"id":16987,"nodeType":"StructuredDocumentation","src":"16317:1580:61","text":" @notice Calculate the current virtual balances of the pool.\n @dev If the pool is within the target range, or the price ratio is not updating, the virtual balances do not\n change, and we return lastVirtualBalances. Otherwise, follow these three steps:\n 1. Calculate the current fourth root of price ratio.\n 2. Shrink/Expand the price interval considering the current fourth root of price ratio (if the price ratio\n is updating).\n 3. Track the market price by moving the price interval (if the pool is outside the target range).\n Note: Virtual balances will be rounded down so that the swap result favors the Vault.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param lastVirtualBalanceA The last virtual balance of token A\n @param lastVirtualBalanceB The last virtual balance of token B\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n @param lastTimestamp The timestamp of the last user interaction with the pool\n @param centerednessMargin A limit of the pool centeredness that defines if pool is outside the target range\n @param storedPriceRatioState A struct containing start and end price ratios and a time interval\n @return currentVirtualBalanceA The current virtual balance of token A\n @return currentVirtualBalanceB The current virtual balance of token B\n @return changed Whether the virtual balances have changed and must be updated in the pool"},"id":17117,"implemented":true,"kind":"function","modifiers":[],"name":"computeCurrentVirtualBalances","nameLocation":"17911:29:61","nodeType":"FunctionDefinition","parameters":{"id":17004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16990,"mutability":"mutable","name":"balancesScaled18","nameLocation":"17967:16:61","nodeType":"VariableDeclaration","scope":17117,"src":"17950:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16988,"name":"uint256","nodeType":"ElementaryTypeName","src":"17950:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16989,"nodeType":"ArrayTypeName","src":"17950:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16992,"mutability":"mutable","name":"lastVirtualBalanceA","nameLocation":"18001:19:61","nodeType":"VariableDeclaration","scope":17117,"src":"17993:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16991,"name":"uint256","nodeType":"ElementaryTypeName","src":"17993:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16994,"mutability":"mutable","name":"lastVirtualBalanceB","nameLocation":"18038:19:61","nodeType":"VariableDeclaration","scope":17117,"src":"18030:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16993,"name":"uint256","nodeType":"ElementaryTypeName","src":"18030:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16996,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"18075:19:61","nodeType":"VariableDeclaration","scope":17117,"src":"18067:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16995,"name":"uint256","nodeType":"ElementaryTypeName","src":"18067:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16998,"mutability":"mutable","name":"lastTimestamp","nameLocation":"18111:13:61","nodeType":"VariableDeclaration","scope":17117,"src":"18104:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":16997,"name":"uint32","nodeType":"ElementaryTypeName","src":"18104:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17000,"mutability":"mutable","name":"centerednessMargin","nameLocation":"18141:18:61","nodeType":"VariableDeclaration","scope":17117,"src":"18134:25:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":16999,"name":"uint64","nodeType":"ElementaryTypeName","src":"18134:6:61","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":17003,"mutability":"mutable","name":"storedPriceRatioState","nameLocation":"18193:21:61","nodeType":"VariableDeclaration","scope":17117,"src":"18169:45:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"},"typeName":{"id":17002,"nodeType":"UserDefinedTypeName","pathNode":{"id":17001,"name":"PriceRatioState","nameLocations":["18169:15:61"],"nodeType":"IdentifierPath","referencedDeclaration":16635,"src":"18169:15:61"},"referencedDeclaration":16635,"src":"18169:15:61","typeDescriptions":{"typeIdentifier":"t_struct$_PriceRatioState_$16635_storage_ptr","typeString":"struct PriceRatioState"}},"visibility":"internal"}],"src":"17940:280:61"},"returnParameters":{"id":17011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17006,"mutability":"mutable","name":"currentVirtualBalanceA","nameLocation":"18252:22:61","nodeType":"VariableDeclaration","scope":17117,"src":"18244:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17005,"name":"uint256","nodeType":"ElementaryTypeName","src":"18244:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17008,"mutability":"mutable","name":"currentVirtualBalanceB","nameLocation":"18284:22:61","nodeType":"VariableDeclaration","scope":17117,"src":"18276:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17007,"name":"uint256","nodeType":"ElementaryTypeName","src":"18276:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17010,"mutability":"mutable","name":"changed","nameLocation":"18313:7:61","nodeType":"VariableDeclaration","scope":17117,"src":"18308:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17009,"name":"bool","nodeType":"ElementaryTypeName","src":"18308:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18243:78:61"},"scope":17701,"src":"17902:2761:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":17230,"nodeType":"Block","src":"22166:2661:61","statements":[{"assignments":[17135,17137],"declarations":[{"constant":false,"id":17135,"mutability":"mutable","name":"poolCenteredness","nameLocation":"22263:16:61","nodeType":"VariableDeclaration","scope":17230,"src":"22255:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17134,"name":"uint256","nodeType":"ElementaryTypeName","src":"22255:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17137,"mutability":"mutable","name":"isPoolAboveCenter","nameLocation":"22286:17:61","nodeType":"VariableDeclaration","scope":17230,"src":"22281:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17136,"name":"bool","nodeType":"ElementaryTypeName","src":"22281:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":17143,"initialValue":{"arguments":[{"id":17139,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17123,"src":"22340:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17140,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"22370:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17141,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17127,"src":"22403:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17138,"name":"computeCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17468,"src":"22307:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,bool)"}},"id":17142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22307:125:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"22254:178:61"},{"assignments":[17145,17147,17149],"declarations":[{"constant":false,"id":17145,"mutability":"mutable","name":"balanceTokenUndervalued","nameLocation":"22573:23:61","nodeType":"VariableDeclaration","scope":17230,"src":"22565:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17144,"name":"uint256","nodeType":"ElementaryTypeName","src":"22565:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17147,"mutability":"mutable","name":"lastVirtualBalanceUndervalued","nameLocation":"22618:29:61","nodeType":"VariableDeclaration","scope":17230,"src":"22610:37:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17146,"name":"uint256","nodeType":"ElementaryTypeName","src":"22610:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17149,"mutability":"mutable","name":"lastVirtualBalanceOvervalued","nameLocation":"22669:28:61","nodeType":"VariableDeclaration","scope":17230,"src":"22661:36:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17148,"name":"uint256","nodeType":"ElementaryTypeName","src":"22661:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17164,"initialValue":{"condition":{"id":17150,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17137,"src":"22710:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"baseExpression":{"id":17157,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17123,"src":"22829:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17159,"indexExpression":{"id":17158,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"22846:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22829:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17160,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17127,"src":"22850:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17161,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"22871:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17162,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22828:63:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"id":17163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"22710:181:61","trueExpression":{"components":[{"baseExpression":{"id":17151,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17123,"src":"22747:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17153,"indexExpression":{"id":17152,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"22764:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22747:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17154,"name":"lastVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"22768:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17155,"name":"lastVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17127,"src":"22789:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17156,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22746:63:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"22551:340:61"},{"assignments":[17166],"declarations":[{"constant":false,"id":17166,"mutability":"mutable","name":"sqrtPriceRatio","nameLocation":"23891:14:61","nodeType":"VariableDeclaration","scope":17230,"src":"23883:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17165,"name":"uint256","nodeType":"ElementaryTypeName","src":"23883:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17171,"initialValue":{"arguments":[{"id":17169,"name":"currentFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17120,"src":"23944:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17167,"name":"currentFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17120,"src":"23908:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23936:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"23908:35:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23908:64:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23883:89:61"},{"assignments":[17173],"declarations":[{"constant":false,"id":17173,"mutability":"mutable","name":"virtualBalanceUndervalued","nameLocation":"24196:25:61","nodeType":"VariableDeclaration","scope":17230,"src":"24188:33:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17172,"name":"uint256","nodeType":"ElementaryTypeName","src":"24188:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17207,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17174,"name":"balanceTokenUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17145,"src":"24225:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17175,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"24264:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24275:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"24264:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17177,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17135,"src":"24297:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24264:49:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17181,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17135,"src":"24342:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17182,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17135,"src":"24362:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":17183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24381:1:61","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17184,"name":"sqrtPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17166,"src":"24385:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24381:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24362:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"32653138","id":17187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24402:4:61","typeDescriptions":{"typeIdentifier":"t_rational_2000000000000000000_by_1","typeString":"int_const 2000000000000000000"},"value":"2e18"},"src":"24362:44:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17189,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24361:46:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24342:65:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653336","id":17191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24410:4:61","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"src":"24342:72:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17179,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"24332:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24337:4:61","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":10917,"src":"24332:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24332:83:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24264:151:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24263:153:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24225:191:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24224:193:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":17198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24433:1:61","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17199,"name":"sqrtPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17166,"src":"24438:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":17200,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"24455:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24466:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"24455:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24438:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17203,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24437:33:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24433:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17205,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24432:39:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24224:247:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24188:283:61"},{"assignments":[17209],"declarations":[{"constant":false,"id":17209,"mutability":"mutable","name":"virtualBalanceOvervalued","nameLocation":"24490:24:61","nodeType":"VariableDeclaration","scope":17230,"src":"24482:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17208,"name":"uint256","nodeType":"ElementaryTypeName","src":"24482:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17216,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17210,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17173,"src":"24518:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17211,"name":"lastVirtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17149,"src":"24546:28:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24518:56:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17213,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24517:58:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":17214,"name":"lastVirtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17147,"src":"24590:29:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24517:102:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24482:137:61"},{"expression":{"id":17228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17217,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17130,"src":"24631:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17218,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17132,"src":"24648:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17219,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24630:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":17220,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17137,"src":"24667:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":17224,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"24768:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17225,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17173,"src":"24794:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17226,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24767:53:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":17227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"24667:153:61","trueExpression":{"components":[{"id":17221,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17173,"src":"24700:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17222,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17209,"src":"24727:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17223,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24699:53:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"24630:190:61","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17229,"nodeType":"ExpressionStatement","src":"24630:190:61"}]},"documentation":{"id":17118,"nodeType":"StructuredDocumentation","src":"20669:1201:61","text":" @notice Compute the virtual balances of the pool when the price ratio is updating.\n @dev This function uses a Bhaskara formula to shrink/expand the price interval by recalculating the virtual\n balances. It'll keep the pool centeredness constant, and track the desired price ratio. To derive this formula,\n we need to solve the following simultaneous equations:\n 1. centeredness = (Ra * Vb) / (Rb * Va)\n 2. PriceRatio = invariant^2/(Va * Vb)^2 (maxPrice / minPrice)\n 3. invariant = (Va + Ra) * (Vb + Rb)\n Substitute [3] in [2]. Then, isolate one of the V's. Finally, replace the isolated V in [1]. We get a quadratic\n equation that will be solved in this function.\n @param currentFourthRootPriceRatio The current fourth root of the price ratio of the pool\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param lastVirtualBalanceA The last virtual balance of token A\n @param lastVirtualBalanceB The last virtual balance of token B\n @return virtualBalanceA The virtual balance of token A\n @return virtualBalanceB The virtual balance of token B"},"id":17231,"implemented":true,"kind":"function","modifiers":[],"name":"computeVirtualBalancesUpdatingPriceRatio","nameLocation":"21884:40:61","nodeType":"FunctionDefinition","parameters":{"id":17128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17120,"mutability":"mutable","name":"currentFourthRootPriceRatio","nameLocation":"21942:27:61","nodeType":"VariableDeclaration","scope":17231,"src":"21934:35:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17119,"name":"uint256","nodeType":"ElementaryTypeName","src":"21934:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17123,"mutability":"mutable","name":"balancesScaled18","nameLocation":"21996:16:61","nodeType":"VariableDeclaration","scope":17231,"src":"21979:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17121,"name":"uint256","nodeType":"ElementaryTypeName","src":"21979:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17122,"nodeType":"ArrayTypeName","src":"21979:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17125,"mutability":"mutable","name":"lastVirtualBalanceA","nameLocation":"22030:19:61","nodeType":"VariableDeclaration","scope":17231,"src":"22022:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17124,"name":"uint256","nodeType":"ElementaryTypeName","src":"22022:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17127,"mutability":"mutable","name":"lastVirtualBalanceB","nameLocation":"22067:19:61","nodeType":"VariableDeclaration","scope":17231,"src":"22059:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17126,"name":"uint256","nodeType":"ElementaryTypeName","src":"22059:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21924:168:61"},"returnParameters":{"id":17133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17130,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"22124:15:61","nodeType":"VariableDeclaration","scope":17231,"src":"22116:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17129,"name":"uint256","nodeType":"ElementaryTypeName","src":"22116:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17132,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"22149:15:61","nodeType":"VariableDeclaration","scope":17231,"src":"22141:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17131,"name":"uint256","nodeType":"ElementaryTypeName","src":"22141:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22115:50:61"},"scope":17701,"src":"21875:2952:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17353,"nodeType":"Block","src":"26181:2460:61","statements":[{"assignments":[17255],"declarations":[{"constant":false,"id":17255,"mutability":"mutable","name":"sqrtPriceRatio","nameLocation":"26199:14:61","nodeType":"VariableDeclaration","scope":17353,"src":"26191:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17254,"name":"uint256","nodeType":"ElementaryTypeName","src":"26191:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17267,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":17259,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"26257:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17260,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"26275:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17261,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17239,"src":"26292:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17258,"name":"computePriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17581,"src":"26239:17:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256)"}},"id":17262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26239:69:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17263,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"26311:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26322:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"26311:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26239:86:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17256,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"26216:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26221:4:61","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":10917,"src":"26216:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26216:119:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26191:144:61"},{"assignments":[17269,17271],"declarations":[{"constant":false,"id":17269,"mutability":"mutable","name":"balancesScaledUndervalued","nameLocation":"26463:25:61","nodeType":"VariableDeclaration","scope":17353,"src":"26455:33:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17268,"name":"uint256","nodeType":"ElementaryTypeName","src":"26455:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17271,"mutability":"mutable","name":"balancesScaledOvervalued","nameLocation":"26498:24:61","nodeType":"VariableDeclaration","scope":17353,"src":"26490:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17270,"name":"uint256","nodeType":"ElementaryTypeName","src":"26490:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17288,"initialValue":{"condition":{"id":17272,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17241,"src":"26526:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"baseExpression":{"id":17280,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"26616:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17282,"indexExpression":{"id":17281,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"26633:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26616:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":17283,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"26637:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17285,"indexExpression":{"id":17284,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"26654:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26637:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26615:42:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":17287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"26526:131:61","trueExpression":{"components":[{"baseExpression":{"id":17273,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"26559:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17275,"indexExpression":{"id":17274,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"26576:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26559:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":17276,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17235,"src":"26580:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17278,"indexExpression":{"id":17277,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"26597:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26580:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26558:42:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"26454:203:61"},{"assignments":[17290,17292],"declarations":[{"constant":false,"id":17290,"mutability":"mutable","name":"virtualBalanceUndervalued","nameLocation":"26676:25:61","nodeType":"VariableDeclaration","scope":17353,"src":"26668:33:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17289,"name":"uint256","nodeType":"ElementaryTypeName","src":"26668:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17292,"mutability":"mutable","name":"virtualBalanceOvervalued","nameLocation":"26711:24:61","nodeType":"VariableDeclaration","scope":17353,"src":"26703:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17291,"name":"uint256","nodeType":"ElementaryTypeName","src":"26703:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17301,"initialValue":{"condition":{"id":17293,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17241,"src":"26739:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":17297,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17239,"src":"26821:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17298,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"26838:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17299,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26820:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":17300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"26739:115:61","trueExpression":{"components":[{"id":17294,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17237,"src":"26772:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17295,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17239,"src":"26789:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17296,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"26771:34:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"26667:187:61"},{"expression":{"id":17316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17302,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28020:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17307,"name":"currentTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17245,"src":"28122:16:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17308,"name":"lastTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17247,"src":"28141:13:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"28122:32:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":17310,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28121:34:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17311,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"28158:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28169:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"28158:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28121:51:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17305,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17243,"src":"28093:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28113:7:61","memberName":"powDown","nodeType":"MemberAccess","referencedDeclaration":4740,"src":"28093:27:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28093:80:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17303,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28047:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28072:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"28047:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28047:136:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28020:163:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17317,"nodeType":"ExpressionStatement","src":"28020:163:61"},{"expression":{"id":17338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17318,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17290,"src":"28193:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17319,"name":"balancesScaledUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17269,"src":"28234:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17320,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28263:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":17321,"name":"balancesScaledOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17271,"src":"28290:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28263:51:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17323,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28262:53:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28234:81:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28233:83:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":17332,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28374:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17326,"name":"sqrtPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17255,"src":"28333:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":17327,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"28350:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28361:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"28350:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28333:31:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17330,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28332:33:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28366:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"28332:41:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28332:67:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17334,"name":"balancesScaledOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17271,"src":"28402:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28332:94:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17336,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28331:96:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28233:194:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28193:234:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17339,"nodeType":"ExpressionStatement","src":"28193:234:61"},{"expression":{"id":17351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17340,"name":"newVirtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17250,"src":"28439:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17341,"name":"newVirtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17252,"src":"28459:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17342,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"28438:40:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":17343,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17241,"src":"28481:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":17347,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28582:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17348,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17290,"src":"28608:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17349,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28581:53:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":17350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28481:153:61","trueExpression":{"components":[{"id":17344,"name":"virtualBalanceUndervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17290,"src":"28514:25:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17345,"name":"virtualBalanceOvervalued","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17292,"src":"28541:24:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17346,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28513:53:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"28438:196:61","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17352,"nodeType":"ExpressionStatement","src":"28438:196:61"}]},"documentation":{"id":17232,"nodeType":"StructuredDocumentation","src":"24833:967:61","text":" @notice Compute new virtual balances when the pool is outside the target range.\n @dev This function will track the market price by moving the price interval. Note that it will increase the\n pool centeredness and change the token prices.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA The last virtual balance of token A\n @param virtualBalanceB The last virtual balance of token B\n @param isPoolAboveCenter Whether the pool is above or below the center of the price range\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n @param currentTimestamp The current timestamp\n @param lastTimestamp The timestamp of the last user interaction with the pool\n @return newVirtualBalanceA The new virtual balance of token A\n @return newVirtualBalanceB The new virtual balance of token B"},"id":17354,"implemented":true,"kind":"function","modifiers":[],"name":"computeVirtualBalancesUpdatingPriceRange","nameLocation":"25814:40:61","nodeType":"FunctionDefinition","parameters":{"id":17248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17235,"mutability":"mutable","name":"balancesScaled18","nameLocation":"25881:16:61","nodeType":"VariableDeclaration","scope":17354,"src":"25864:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17233,"name":"uint256","nodeType":"ElementaryTypeName","src":"25864:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17234,"nodeType":"ArrayTypeName","src":"25864:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17237,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"25915:15:61","nodeType":"VariableDeclaration","scope":17354,"src":"25907:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17236,"name":"uint256","nodeType":"ElementaryTypeName","src":"25907:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17239,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"25948:15:61","nodeType":"VariableDeclaration","scope":17354,"src":"25940:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17238,"name":"uint256","nodeType":"ElementaryTypeName","src":"25940:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17241,"mutability":"mutable","name":"isPoolAboveCenter","nameLocation":"25978:17:61","nodeType":"VariableDeclaration","scope":17354,"src":"25973:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17240,"name":"bool","nodeType":"ElementaryTypeName","src":"25973:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17243,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"26013:19:61","nodeType":"VariableDeclaration","scope":17354,"src":"26005:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17242,"name":"uint256","nodeType":"ElementaryTypeName","src":"26005:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17245,"mutability":"mutable","name":"currentTimestamp","nameLocation":"26049:16:61","nodeType":"VariableDeclaration","scope":17354,"src":"26042:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17244,"name":"uint32","nodeType":"ElementaryTypeName","src":"26042:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17247,"mutability":"mutable","name":"lastTimestamp","nameLocation":"26082:13:61","nodeType":"VariableDeclaration","scope":17354,"src":"26075:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17246,"name":"uint32","nodeType":"ElementaryTypeName","src":"26075:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"25854:247:61"},"returnParameters":{"id":17253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17250,"mutability":"mutable","name":"newVirtualBalanceA","nameLocation":"26133:18:61","nodeType":"VariableDeclaration","scope":17354,"src":"26125:26:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17249,"name":"uint256","nodeType":"ElementaryTypeName","src":"26125:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17252,"mutability":"mutable","name":"newVirtualBalanceB","nameLocation":"26161:18:61","nodeType":"VariableDeclaration","scope":17354,"src":"26153:26:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17251,"name":"uint256","nodeType":"ElementaryTypeName","src":"26153:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26124:56:61"},"scope":17701,"src":"25805:2836:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17381,"nodeType":"Block","src":"29517:166:61","statements":[{"assignments":[17370,null],"declarations":[{"constant":false,"id":17370,"mutability":"mutable","name":"centeredness","nameLocation":"29536:12:61","nodeType":"VariableDeclaration","scope":17381,"src":"29528:20:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17369,"name":"uint256","nodeType":"ElementaryTypeName","src":"29528:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":17376,"initialValue":{"arguments":[{"id":17372,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17358,"src":"29574:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17373,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17360,"src":"29592:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17374,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17362,"src":"29609:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17371,"name":"computeCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17468,"src":"29554:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_bool_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,bool)"}},"id":17375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29554:71:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"29527:98:61"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17377,"name":"centeredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17370,"src":"29642:12:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":17378,"name":"centerednessMargin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17364,"src":"29658:18:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29642:34:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":17368,"id":17380,"nodeType":"Return","src":"29635:41:61"}]},"documentation":{"id":17355,"nodeType":"StructuredDocumentation","src":"28647:652:61","text":" @notice Check whether the pool is in range.\n @dev The pool is in range if the centeredness is greater than or equal to the centeredness margin.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA The last virtual balances of token A\n @param virtualBalanceB The last virtual balances of token B\n @param centerednessMargin A symmetrical measure of how closely an unbalanced pool can approach the limits of the\n price range before it is considered out of range\n @return isWithinTargetRange Whether the pool is within the target price range"},"id":17382,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolWithinTargetRange","nameLocation":"29313:23:61","nodeType":"FunctionDefinition","parameters":{"id":17365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17358,"mutability":"mutable","name":"balancesScaled18","nameLocation":"29363:16:61","nodeType":"VariableDeclaration","scope":17382,"src":"29346:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17356,"name":"uint256","nodeType":"ElementaryTypeName","src":"29346:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17357,"nodeType":"ArrayTypeName","src":"29346:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17360,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"29397:15:61","nodeType":"VariableDeclaration","scope":17382,"src":"29389:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17359,"name":"uint256","nodeType":"ElementaryTypeName","src":"29389:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17362,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"29430:15:61","nodeType":"VariableDeclaration","scope":17382,"src":"29422:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17361,"name":"uint256","nodeType":"ElementaryTypeName","src":"29422:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17364,"mutability":"mutable","name":"centerednessMargin","nameLocation":"29463:18:61","nodeType":"VariableDeclaration","scope":17382,"src":"29455:26:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17363,"name":"uint256","nodeType":"ElementaryTypeName","src":"29455:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29336:151:61"},"returnParameters":{"id":17368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17382,"src":"29511:4:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17366,"name":"bool","nodeType":"ElementaryTypeName","src":"29511:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"29510:6:61"},"scope":17701,"src":"29304:379:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17467,"nodeType":"Block","src":"30642:861:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17397,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"30656:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17399,"indexExpression":{"id":17398,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"30673:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30656:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17400,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30679:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30656:24:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17407,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"30820:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17409,"indexExpression":{"id":17408,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"30837:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30820:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30843:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30820:24:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17417,"nodeType":"IfStatement","src":"30816:71:61","trueBody":{"id":17416,"nodeType":"Block","src":"30846:41:61","statements":[{"expression":{"components":[{"hexValue":"30","id":17412,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30868:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"74727565","id":17413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30871:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"id":17414,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"30867:9:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_bool_$","typeString":"tuple(int_const 0,bool)"}},"functionReturnParameters":17396,"id":17415,"nodeType":"Return","src":"30860:16:61"}]}},"id":17418,"nodeType":"IfStatement","src":"30652:235:61","trueBody":{"id":17406,"nodeType":"Block","src":"30682:128:61","statements":[{"expression":{"components":[{"hexValue":"30","id":17402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30790:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"66616c7365","id":17403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30793:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"id":17404,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"30789:10:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_bool_$","typeString":"tuple(int_const 0,bool)"}},"functionReturnParameters":17396,"id":17405,"nodeType":"Return","src":"30782:17:61"}]}},{"assignments":[17420],"declarations":[{"constant":false,"id":17420,"mutability":"mutable","name":"numerator","nameLocation":"30905:9:61","nodeType":"VariableDeclaration","scope":17467,"src":"30897:17:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17419,"name":"uint256","nodeType":"ElementaryTypeName","src":"30897:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17426,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":17421,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"30917:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17423,"indexExpression":{"id":17422,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16638,"src":"30934:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30917:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17424,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17390,"src":"30939:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30917:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30897:57:61"},{"assignments":[17428],"declarations":[{"constant":false,"id":17428,"mutability":"mutable","name":"denominator","nameLocation":"30972:11:61","nodeType":"VariableDeclaration","scope":17467,"src":"30964:19:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17427,"name":"uint256","nodeType":"ElementaryTypeName","src":"30964:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17434,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17429,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17388,"src":"30986:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":17430,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17386,"src":"31004:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17432,"indexExpression":{"id":17431,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16641,"src":"31021:1:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31004:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30986:37:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30964:59:61"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17435,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17420,"src":"31185:9:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":17436,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17428,"src":"31198:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31185:24:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17461,"nodeType":"Block","src":"31330:112:61","statements":[{"expression":{"id":17455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17450,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17393,"src":"31344:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17453,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17420,"src":"31383:9:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17451,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17428,"src":"31363:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31375:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"31363:19:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31363:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31344:49:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17456,"nodeType":"ExpressionStatement","src":"31344:49:61"},{"expression":{"id":17459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17457,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17395,"src":"31407:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":17458,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"31427:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"31407:24:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17460,"nodeType":"ExpressionStatement","src":"31407:24:61"}]},"id":17462,"nodeType":"IfStatement","src":"31181:261:61","trueBody":{"id":17449,"nodeType":"Block","src":"31211:113:61","statements":[{"expression":{"id":17443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17438,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17393,"src":"31225:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17441,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17428,"src":"31262:11:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17439,"name":"numerator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17420,"src":"31244:9:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31254:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"31244:17:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31244:30:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31225:49:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17444,"nodeType":"ExpressionStatement","src":"31225:49:61"},{"expression":{"id":17447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17445,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17395,"src":"31288:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":17446,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"31308:5:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"31288:25:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17448,"nodeType":"ExpressionStatement","src":"31288:25:61"}]}},{"expression":{"components":[{"id":17463,"name":"poolCenteredness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17393,"src":"31460:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17464,"name":"isPoolAboveCenter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17395,"src":"31478:17:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":17465,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31459:37:61","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"functionReturnParameters":17396,"id":17466,"nodeType":"Return","src":"31452:44:61"}]},"documentation":{"id":17383,"nodeType":"StructuredDocumentation","src":"29689:731:61","text":" @notice Compute the centeredness of the pool.\n @dev The centeredness is calculated as the ratio of the real balances divided by the ratio of the virtual\n balances. It's a percentage value, where 100% means that the token prices are centered, and 0% means that the\n token prices are at the edge of the price interval.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA The last virtual balances of token A\n @param virtualBalanceB The last virtual balances of token B\n @return poolCenteredness The centeredness of the pool\n @return isPoolAboveCenter True if the pool is above the center, false otherwise"},"id":17468,"implemented":true,"kind":"function","modifiers":[],"name":"computeCenteredness","nameLocation":"30434:19:61","nodeType":"FunctionDefinition","parameters":{"id":17391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17386,"mutability":"mutable","name":"balancesScaled18","nameLocation":"30480:16:61","nodeType":"VariableDeclaration","scope":17468,"src":"30463:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17384,"name":"uint256","nodeType":"ElementaryTypeName","src":"30463:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17385,"nodeType":"ArrayTypeName","src":"30463:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17388,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"30514:15:61","nodeType":"VariableDeclaration","scope":17468,"src":"30506:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17387,"name":"uint256","nodeType":"ElementaryTypeName","src":"30506:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17390,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"30547:15:61","nodeType":"VariableDeclaration","scope":17468,"src":"30539:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17389,"name":"uint256","nodeType":"ElementaryTypeName","src":"30539:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30453:115:61"},"returnParameters":{"id":17396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17393,"mutability":"mutable","name":"poolCenteredness","nameLocation":"30600:16:61","nodeType":"VariableDeclaration","scope":17468,"src":"30592:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17392,"name":"uint256","nodeType":"ElementaryTypeName","src":"30592:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17395,"mutability":"mutable","name":"isPoolAboveCenter","nameLocation":"30623:17:61","nodeType":"VariableDeclaration","scope":17468,"src":"30618:22:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17394,"name":"bool","nodeType":"ElementaryTypeName","src":"30618:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30591:50:61"},"scope":17701,"src":"30425:1078:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17551,"nodeType":"Block","src":"32580:1985:61","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17484,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17471,"src":"32659:11:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":17485,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"32674:23:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32659:38:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17490,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17471,"src":"32764:11:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":17491,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17477,"src":"32779:25:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"32764:40:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17496,"nodeType":"IfStatement","src":"32760:103:61","trueBody":{"id":17495,"nodeType":"Block","src":"32806:57:61","statements":[{"expression":{"id":17493,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17473,"src":"32827:25:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":17483,"id":17494,"nodeType":"Return","src":"32820:32:61"}]}},"id":17497,"nodeType":"IfStatement","src":"32655:208:61","trueBody":{"id":17489,"nodeType":"Block","src":"32699:55:61","statements":[{"expression":{"id":17487,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17475,"src":"32720:23:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":17483,"id":17488,"nodeType":"Return","src":"32713:30:61"}]}},{"assignments":[17499],"declarations":[{"constant":false,"id":17499,"mutability":"mutable","name":"exponent","nameLocation":"33890:8:61","nodeType":"VariableDeclaration","scope":17551,"src":"33882:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17498,"name":"uint256","nodeType":"ElementaryTypeName","src":"33882:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17511,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17507,"name":"priceRatioUpdateEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17479,"src":"33971:23:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17508,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17477,"src":"33997:25:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33971:51:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":17504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17502,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17471,"src":"33909:11:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17503,"name":"priceRatioUpdateStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17477,"src":"33923:25:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"33909:39:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":17501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33901:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17500,"name":"uint256","nodeType":"ElementaryTypeName","src":"33901:7:61","typeDescriptions":{}}},"id":17505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33901:48:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33950:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"33901:56:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33901:131:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"33882:150:61"},{"assignments":[17513],"declarations":[{"constant":false,"id":17513,"mutability":"mutable","name":"currentFourthRootPriceRatio","nameLocation":"34051:27:61","nodeType":"VariableDeclaration","scope":17551,"src":"34043:35:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17512,"name":"uint256","nodeType":"ElementaryTypeName","src":"34043:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17534,"initialValue":{"arguments":[{"arguments":[{"id":17531,"name":"exponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17499,"src":"34224:8:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"arguments":[{"arguments":[{"id":17526,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17473,"src":"34187:25:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":17525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34179:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17524,"name":"uint256","nodeType":"ElementaryTypeName","src":"34179:7:61","typeDescriptions":{}}},"id":17527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34179:34:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":17521,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17475,"src":"34146:23:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":17520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34138:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17519,"name":"uint256","nodeType":"ElementaryTypeName","src":"34138:7:61","typeDescriptions":{}}},"id":17522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34138:32:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34171:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"34138:40:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34138:76:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17529,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"34137:78:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34216:7:61","memberName":"powDown","nodeType":"MemberAccess","referencedDeclaration":4740,"src":"34137:86:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34137:96:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":17516,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17473,"src":"34089:25:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"}],"id":17515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34081:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17514,"name":"uint256","nodeType":"ElementaryTypeName","src":"34081:7:61","typeDescriptions":{}}},"id":17517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:34:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34116:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"34081:42:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34081:162:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34043:200:61"},{"assignments":[17536],"declarations":[{"constant":false,"id":17536,"mutability":"mutable","name":"minimumFourthRootPriceRatio","nameLocation":"34374:27:61","nodeType":"VariableDeclaration","scope":17551,"src":"34366:35:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17535,"name":"uint256","nodeType":"ElementaryTypeName","src":"34366:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17542,"initialValue":{"arguments":[{"id":17539,"name":"startFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17473,"src":"34413:25:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},{"id":17540,"name":"endFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17475,"src":"34440:23:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint96","typeString":"uint96"},{"typeIdentifier":"t_uint96","typeString":"uint96"}],"expression":{"id":17537,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"34404:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34409:3:61","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":10167,"src":"34404:8:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34404:60:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34366:98:61"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":17545,"name":"minimumFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17536,"src":"34490:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17546,"name":"currentFourthRootPriceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17513,"src":"34519:27:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17543,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"34481:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34486:3:61","memberName":"max","nodeType":"MemberAccess","referencedDeclaration":10148,"src":"34481:8:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34481:66:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34548:8:61","memberName":"toUint96","nodeType":"MemberAccess","referencedDeclaration":12125,"src":"34481:75:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint96_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint96)"}},"id":17549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34481:77:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":17483,"id":17550,"nodeType":"Return","src":"34474:84:61"}]},"documentation":{"id":17469,"nodeType":"StructuredDocumentation","src":"31509:800:61","text":" @notice Compute the fourth root of the price ratio of the pool.\n @dev The current fourth root of price ratio is an interpolation of the price ratio between the start and end\n values in the price ratio state, using the percentage elapsed between the start and end times.\n @param currentTime The current timestamp\n @param startFourthRootPriceRatio The start fourth root of price ratio of the pool\n @param endFourthRootPriceRatio The end fourth root of price ratio of the pool\n @param priceRatioUpdateStartTime The timestamp of the last user interaction with the pool\n @param priceRatioUpdateEndTime The timestamp of the next user interaction with the pool\n @return fourthRootPriceRatio The fourth root of price ratio of the pool"},"id":17552,"implemented":true,"kind":"function","modifiers":[],"name":"computeFourthRootPriceRatio","nameLocation":"32323:27:61","nodeType":"FunctionDefinition","parameters":{"id":17480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17471,"mutability":"mutable","name":"currentTime","nameLocation":"32367:11:61","nodeType":"VariableDeclaration","scope":17552,"src":"32360:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17470,"name":"uint32","nodeType":"ElementaryTypeName","src":"32360:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17473,"mutability":"mutable","name":"startFourthRootPriceRatio","nameLocation":"32395:25:61","nodeType":"VariableDeclaration","scope":17552,"src":"32388:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":17472,"name":"uint96","nodeType":"ElementaryTypeName","src":"32388:6:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":17475,"mutability":"mutable","name":"endFourthRootPriceRatio","nameLocation":"32437:23:61","nodeType":"VariableDeclaration","scope":17552,"src":"32430:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":17474,"name":"uint96","nodeType":"ElementaryTypeName","src":"32430:6:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"},{"constant":false,"id":17477,"mutability":"mutable","name":"priceRatioUpdateStartTime","nameLocation":"32477:25:61","nodeType":"VariableDeclaration","scope":17552,"src":"32470:32:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17476,"name":"uint32","nodeType":"ElementaryTypeName","src":"32470:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":17479,"mutability":"mutable","name":"priceRatioUpdateEndTime","nameLocation":"32519:23:61","nodeType":"VariableDeclaration","scope":17552,"src":"32512:30:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":17478,"name":"uint32","nodeType":"ElementaryTypeName","src":"32512:6:61","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"32350:198:61"},"returnParameters":{"id":17483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17482,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17552,"src":"32572:6:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":17481,"name":"uint96","nodeType":"ElementaryTypeName","src":"32572:6:61","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"32571:8:61"},"scope":17701,"src":"32314:2251:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17580,"nodeType":"Block","src":"35308:167:61","statements":[{"assignments":[17566,17568],"declarations":[{"constant":false,"id":17566,"mutability":"mutable","name":"minPrice","nameLocation":"35327:8:61","nodeType":"VariableDeclaration","scope":17580,"src":"35319:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17565,"name":"uint256","nodeType":"ElementaryTypeName","src":"35319:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17568,"mutability":"mutable","name":"maxPrice","nameLocation":"35345:8:61","nodeType":"VariableDeclaration","scope":17580,"src":"35337:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17567,"name":"uint256","nodeType":"ElementaryTypeName","src":"35337:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17574,"initialValue":{"arguments":[{"id":17570,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17556,"src":"35375:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17571,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17558,"src":"35393:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17572,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17560,"src":"35410:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17569,"name":"computePriceRange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17627,"src":"35357:17:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256,uint256)"}},"id":17573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35357:69:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"35318:108:61"},{"expression":{"arguments":[{"id":17577,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17566,"src":"35459:8:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17575,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17568,"src":"35444:8:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35453:5:61","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":4616,"src":"35444:14:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35444:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17564,"id":17579,"nodeType":"Return","src":"35437:31:61"}]},"documentation":{"id":17553,"nodeType":"StructuredDocumentation","src":"34571:547:61","text":" @notice Compute the price ratio of the pool by dividing the maximum price by the minimum price.\n @dev The price ratio is calculated as maxPrice/minPrice, where maxPrice and minPrice are obtained\n from computePriceRange.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA Virtual balance of token A\n @param virtualBalanceB Virtual balance of token B\n @return priceRatio The ratio between the maximum and minimum prices of the pool"},"id":17581,"implemented":true,"kind":"function","modifiers":[],"name":"computePriceRatio","nameLocation":"35132:17:61","nodeType":"FunctionDefinition","parameters":{"id":17561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17556,"mutability":"mutable","name":"balancesScaled18","nameLocation":"35176:16:61","nodeType":"VariableDeclaration","scope":17581,"src":"35159:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17554,"name":"uint256","nodeType":"ElementaryTypeName","src":"35159:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17555,"nodeType":"ArrayTypeName","src":"35159:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17558,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"35210:15:61","nodeType":"VariableDeclaration","scope":17581,"src":"35202:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17557,"name":"uint256","nodeType":"ElementaryTypeName","src":"35202:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17560,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"35243:15:61","nodeType":"VariableDeclaration","scope":17581,"src":"35235:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17559,"name":"uint256","nodeType":"ElementaryTypeName","src":"35235:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35149:115:61"},"returnParameters":{"id":17564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17563,"mutability":"mutable","name":"priceRatio","nameLocation":"35296:10:61","nodeType":"VariableDeclaration","scope":17581,"src":"35288:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17562,"name":"uint256","nodeType":"ElementaryTypeName","src":"35288:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"35287:20:61"},"scope":17701,"src":"35123:352:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17626,"nodeType":"Block","src":"36555:784:61","statements":[{"assignments":[17597],"declarations":[{"constant":false,"id":17597,"mutability":"mutable","name":"currentInvariant","nameLocation":"36573:16:61","nodeType":"VariableDeclaration","scope":17626,"src":"36565:24:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17596,"name":"uint256","nodeType":"ElementaryTypeName","src":"36565:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17606,"initialValue":{"arguments":[{"id":17600,"name":"balancesScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17585,"src":"36634:16:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17601,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17587,"src":"36664:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17602,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17589,"src":"36693:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17603,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2470,"src":"36722:8:61","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$2470_$","typeString":"type(enum Rounding)"}},"id":17604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36731:10:61","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":2469,"src":"36722:19:61","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$2470","typeString":"enum Rounding"}],"expression":{"id":17598,"name":"ReClammMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17701,"src":"36592:11:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ReClammMath_$17701_$","typeString":"type(library ReClammMath)"}},"id":17599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36604:16:61","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":16759,"src":"36592:28:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$2470_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256,enum Rounding) pure returns (uint256)"}},"id":17605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36592:159:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"36565:186:61"},{"expression":{"id":17614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17607,"name":"minPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17592,"src":"36965:8:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17608,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17589,"src":"36977:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17609,"name":"virtualBalanceB","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17589,"src":"36995:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36977:33:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17611,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"36976:35:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":17612,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17597,"src":"37014:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36976:54:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36965:65:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17615,"nodeType":"ExpressionStatement","src":"36965:65:61"},{"expression":{"id":17624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17616,"name":"maxPrice","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17594,"src":"37255:8:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":17621,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17587,"src":"37315:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17619,"name":"virtualBalanceA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17587,"src":"37291:15:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37307:7:61","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":4563,"src":"37291:23:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37291:40:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17617,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17597,"src":"37266:16:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37283:7:61","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"37266:24:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":17623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37266:66:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37255:77:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17625,"nodeType":"ExpressionStatement","src":"37255:77:61"}]},"documentation":{"id":17582,"nodeType":"StructuredDocumentation","src":"35481:868:61","text":" @notice Compute the minimum and maximum prices for the pool based on virtual balances and current invariant.\n @dev The minimum price is calculated as Vb^2/invariant, where Vb is the virtual balance of token B.\n The maximum price is calculated as invariant/Va^2, where Va is the virtual balance of token A.\n These calculations are derived from the invariant equation: invariant = (Ra + Va)(Rb + Vb),\n where Ra and Rb are the real balances of tokens A and B respectively.\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param virtualBalanceA Virtual balance of token A\n @param virtualBalanceB Virtual balance of token B\n @return minPrice The minimum price of token A in terms of token B\n @return maxPrice The maximum price of token A in terms of token B"},"id":17627,"implemented":true,"kind":"function","modifiers":[],"name":"computePriceRange","nameLocation":"36363:17:61","nodeType":"FunctionDefinition","parameters":{"id":17590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17585,"mutability":"mutable","name":"balancesScaled18","nameLocation":"36407:16:61","nodeType":"VariableDeclaration","scope":17627,"src":"36390:33:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17583,"name":"uint256","nodeType":"ElementaryTypeName","src":"36390:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17584,"nodeType":"ArrayTypeName","src":"36390:9:61","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17587,"mutability":"mutable","name":"virtualBalanceA","nameLocation":"36441:15:61","nodeType":"VariableDeclaration","scope":17627,"src":"36433:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17586,"name":"uint256","nodeType":"ElementaryTypeName","src":"36433:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17589,"mutability":"mutable","name":"virtualBalanceB","nameLocation":"36474:15:61","nodeType":"VariableDeclaration","scope":17627,"src":"36466:23:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17588,"name":"uint256","nodeType":"ElementaryTypeName","src":"36466:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36380:115:61"},"returnParameters":{"id":17595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17592,"mutability":"mutable","name":"minPrice","nameLocation":"36527:8:61","nodeType":"VariableDeclaration","scope":17627,"src":"36519:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17591,"name":"uint256","nodeType":"ElementaryTypeName","src":"36519:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17594,"mutability":"mutable","name":"maxPrice","nameLocation":"36545:8:61","nodeType":"VariableDeclaration","scope":17627,"src":"36537:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17593,"name":"uint256","nodeType":"ElementaryTypeName","src":"36537:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36518:36:61"},"scope":17701,"src":"36354:985:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17642,"nodeType":"Block","src":"37753:108:61","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17635,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"37770:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37781:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"37770:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17637,"name":"dailyPriceShiftExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17630,"src":"37787:23:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":17638,"name":"_PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16655,"src":"37813:41:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37787:67:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"37770:84:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17634,"id":17641,"nodeType":"Return","src":"37763:91:61"}]},"documentation":{"id":17628,"nodeType":"StructuredDocumentation","src":"37345:307:61","text":" @notice Convert from the external to the internal representation of the daily price shift exponent.\n @param dailyPriceShiftExponent The daily price shift exponent as an 18-decimal FP\n @return dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)"},"id":17643,"implemented":true,"kind":"function","modifiers":[],"name":"toDailyPriceShiftBase","nameLocation":"37666:21:61","nodeType":"FunctionDefinition","parameters":{"id":17631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17630,"mutability":"mutable","name":"dailyPriceShiftExponent","nameLocation":"37696:23:61","nodeType":"VariableDeclaration","scope":17643,"src":"37688:31:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17629,"name":"uint256","nodeType":"ElementaryTypeName","src":"37688:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37687:33:61"},"returnParameters":{"id":17634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17633,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17643,"src":"37744:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17632,"name":"uint256","nodeType":"ElementaryTypeName","src":"37744:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37743:9:61"},"scope":17701,"src":"37657:204:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17659,"nodeType":"Block","src":"38341:106:61","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17651,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"38359:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17652,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38370:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"38359:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":17653,"name":"dailyPriceShiftBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17646,"src":"38376:19:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38359:36:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17655,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"38358:38:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":17656,"name":"_PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16655,"src":"38399:41:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38358:82:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17650,"id":17658,"nodeType":"Return","src":"38351:89:61"}]},"documentation":{"id":17644,"nodeType":"StructuredDocumentation","src":"37867:373:61","text":" @notice Convert from the internal to the external representation of the daily price shift exponent.\n @dev The result is an 18-decimal FP percentage.\n @param dailyPriceShiftBase Internal time constant used to update virtual balances (1 - tau)\n @return dailyPriceShiftExponent The daily price shift exponent as an 18-decimal FP percentage"},"id":17660,"implemented":true,"kind":"function","modifiers":[],"name":"toDailyPriceShiftExponent","nameLocation":"38254:25:61","nodeType":"FunctionDefinition","parameters":{"id":17647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17646,"mutability":"mutable","name":"dailyPriceShiftBase","nameLocation":"38288:19:61","nodeType":"VariableDeclaration","scope":17660,"src":"38280:27:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17645,"name":"uint256","nodeType":"ElementaryTypeName","src":"38280:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38279:29:61"},"returnParameters":{"id":17650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17660,"src":"38332:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17648,"name":"uint256","nodeType":"ElementaryTypeName","src":"38332:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38331:9:61"},"scope":17701,"src":"38245:202:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17676,"nodeType":"Block","src":"38798:65:61","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17670,"name":"valueScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17663,"src":"38825:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17671,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"38841:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38852:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"38841:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"38825:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17668,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"38815:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38820:4:61","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":10917,"src":"38815:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38815:41:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17667,"id":17675,"nodeType":"Return","src":"38808:48:61"}]},"documentation":{"id":17661,"nodeType":"StructuredDocumentation","src":"38453:263:61","text":" @notice Calculate the square root of a value scaled by 18 decimals.\n @param valueScaled18 The value to calculate the square root of, scaled by 18 decimals\n @return sqrtValueScaled18 The square root of the value scaled by 18 decimals"},"id":17677,"implemented":true,"kind":"function","modifiers":[],"name":"sqrtScaled18","nameLocation":"38730:12:61","nodeType":"FunctionDefinition","parameters":{"id":17664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17663,"mutability":"mutable","name":"valueScaled18","nameLocation":"38751:13:61","nodeType":"VariableDeclaration","scope":17677,"src":"38743:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17662,"name":"uint256","nodeType":"ElementaryTypeName","src":"38743:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38742:23:61"},"returnParameters":{"id":17667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17677,"src":"38789:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17665,"name":"uint256","nodeType":"ElementaryTypeName","src":"38789:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38788:9:61"},"scope":17701,"src":"38721:142:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":17699,"nodeType":"Block","src":"39226:93:61","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17689,"name":"valueScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17680,"src":"39263:13:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17690,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"39279:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39290:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"39279:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39263:30:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17687,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"39253:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39258:4:61","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":10917,"src":"39253:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39253:41:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":17694,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4818,"src":"39297:10:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$4818_$","typeString":"type(library FixedPoint)"}},"id":17695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39308:3:61","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":4530,"src":"39297:14:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"39253:58:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17685,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11538,"src":"39243:4:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$11538_$","typeString":"type(library Math)"}},"id":17686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39248:4:61","memberName":"sqrt","nodeType":"MemberAccess","referencedDeclaration":10917,"src":"39243:9:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":17697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39243:69:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17684,"id":17698,"nodeType":"Return","src":"39236:76:61"}]},"documentation":{"id":17678,"nodeType":"StructuredDocumentation","src":"38869:269:61","text":" @notice Calculate the fourth root of a value scaled by 18 decimals.\n @param valueScaled18 The value to calculate the fourth root of, scaled by 18 decimals\n @return fourthRootValueScaled18 The fourth root of the value scaled by 18 decimals"},"id":17700,"implemented":true,"kind":"function","modifiers":[],"name":"fourthRootScaled18","nameLocation":"39152:18:61","nodeType":"FunctionDefinition","parameters":{"id":17681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17680,"mutability":"mutable","name":"valueScaled18","nameLocation":"39179:13:61","nodeType":"VariableDeclaration","scope":17700,"src":"39171:21:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17679,"name":"uint256","nodeType":"ElementaryTypeName","src":"39171:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39170:23:61"},"returnParameters":{"id":17684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17683,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17700,"src":"39217:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17682,"name":"uint256","nodeType":"ElementaryTypeName","src":"39217:7:61","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39216:9:61"},"scope":17701,"src":"39143:176:61","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":17702,"src":"887:38434:61","usedErrors":[16652],"usedEvents":[]}],"src":"82:39240:61"},"id":61},"contracts/lib/ReClammPoolFactoryLib.sol":{"ast":{"absolutePath":"contracts/lib/ReClammPoolFactoryLib.sol","exportedSymbols":{"IVaultErrors":[1506],"ReClammPoolFactoryLib":[17777],"ReClammPriceParams":[17720],"TokenConfig":[2432],"TokenType":[2419]},"id":17778,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":17703,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:62"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":17706,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17778,"sourceUnit":2610,"src":"72:101:62","symbolAliases":[{"foreign":{"id":17704,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2432,"src":"81:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":17705,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"94:9:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":17708,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":17778,"sourceUnit":1507,"src":"174:93:62","symbolAliases":[{"foreign":{"id":17707,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"183:12:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"ReClammPriceParams","documentation":{"id":17709,"nodeType":"StructuredDocumentation","src":"269:1093:62","text":" @notice ReClammPool initialization parameters.\n @dev ReClamm pools may contain wrapped tokens (with rate providers), in which case there are two options for\n providing the initialization prices (and the initialization balances can be calculated in terms of either\n token). If the price is that of the wrapped token, we should not apply the rate, so the flag for that token\n should be false. If the price is given in terms of the underlying, we do need to apply the rate when computing\n the initialization balances.\n @param initialMinPrice The initial minimum price of token A in terms of token B as an 18-decimal FP value\n @param initialMaxPrice The initial maximum price of token A in terms of token B as an 18-decimal FP value\n @param initialTargetPrice The initial target price of token A in terms of token B as an 18-decimal FP value\n @param tokenAPriceIncludesRate Whether the amount of token A is scaled by the rate when calculating the price\n @param tokenBPriceIncludesRate Whether the amount of token B is scaled by the rate when calculating the price"},"id":17720,"members":[{"constant":false,"id":17711,"mutability":"mutable","name":"initialMinPrice","nameLocation":"1403:15:62","nodeType":"VariableDeclaration","scope":17720,"src":"1395:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17710,"name":"uint256","nodeType":"ElementaryTypeName","src":"1395:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17713,"mutability":"mutable","name":"initialMaxPrice","nameLocation":"1432:15:62","nodeType":"VariableDeclaration","scope":17720,"src":"1424:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17712,"name":"uint256","nodeType":"ElementaryTypeName","src":"1424:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17715,"mutability":"mutable","name":"initialTargetPrice","nameLocation":"1461:18:62","nodeType":"VariableDeclaration","scope":17720,"src":"1453:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17714,"name":"uint256","nodeType":"ElementaryTypeName","src":"1453:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17717,"mutability":"mutable","name":"tokenAPriceIncludesRate","nameLocation":"1490:23:62","nodeType":"VariableDeclaration","scope":17720,"src":"1485:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17716,"name":"bool","nodeType":"ElementaryTypeName","src":"1485:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17719,"mutability":"mutable","name":"tokenBPriceIncludesRate","nameLocation":"1524:23:62","nodeType":"VariableDeclaration","scope":17720,"src":"1519:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17718,"name":"bool","nodeType":"ElementaryTypeName","src":"1519:4:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ReClammPriceParams","nameLocation":"1370:18:62","nodeType":"StructDefinition","scope":17778,"src":"1363:187:62","visibility":"public"},{"abstract":false,"baseContracts":[],"canonicalName":"ReClammPoolFactoryLib","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":17777,"linearizedBaseContracts":[17777],"name":"ReClammPoolFactoryLib","nameLocation":"1560:21:62","nodeType":"ContractDefinition","nodes":[{"body":{"id":17775,"nodeType":"Block","src":"1699:465:62","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17730,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17724,"src":"1764:6:62","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":17731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1771:6:62","memberName":"length","nodeType":"MemberAccess","src":"1764:13:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":17732,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1780:1:62","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1764:17:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17740,"nodeType":"IfStatement","src":"1760:79:62","trueBody":{"id":17739,"nodeType":"Block","src":"1783:56:62","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17734,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"1804:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1506_$","typeString":"type(contract IVaultErrors)"}},"id":17736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1817:9:62","memberName":"MaxTokens","nodeType":"MemberAccess","referencedDeclaration":1187,"src":"1804:22:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1804:24:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17738,"nodeType":"RevertStatement","src":"1797:31:62"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17741,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17727,"src":"1853:11:62","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":17742,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1865:23:62","memberName":"tokenAPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":17717,"src":"1853:35:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"},"id":17749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":17743,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17724,"src":"1892:6:62","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":17745,"indexExpression":{"hexValue":"30","id":17744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1899:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1892:9:62","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_memory_ptr","typeString":"struct TokenConfig memory"}},"id":17746,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1902:9:62","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":2426,"src":"1892:19:62","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":17747,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"1915:9:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2419_$","typeString":"type(enum TokenType)"}},"id":17748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1925:9:62","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":2418,"src":"1915:19:62","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"src":"1892:42:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1853:81:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17757,"nodeType":"IfStatement","src":"1849:150:62","trueBody":{"id":17756,"nodeType":"Block","src":"1936:63:62","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17751,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"1957:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1506_$","typeString":"type(contract IVaultErrors)"}},"id":17753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1970:16:62","memberName":"InvalidTokenType","nodeType":"MemberAccess","referencedDeclaration":1193,"src":"1957:29:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:31:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17755,"nodeType":"RevertStatement","src":"1950:38:62"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17758,"name":"priceParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17727,"src":"2012:11:62","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams memory"}},"id":17759,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2024:23:62","memberName":"tokenBPriceIncludesRate","nodeType":"MemberAccess","referencedDeclaration":17719,"src":"2012:35:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"},"id":17766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":17760,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17724,"src":"2051:6:62","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":17762,"indexExpression":{"hexValue":"31","id":17761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2058:1:62","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2051:9:62","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_memory_ptr","typeString":"struct TokenConfig memory"}},"id":17763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2061:9:62","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":2426,"src":"2051:19:62","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":17764,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2419,"src":"2074:9:62","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$2419_$","typeString":"type(enum TokenType)"}},"id":17765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2084:9:62","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":2418,"src":"2074:19:62","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2419","typeString":"enum TokenType"}},"src":"2051:42:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2012:81:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17774,"nodeType":"IfStatement","src":"2008:150:62","trueBody":{"id":17773,"nodeType":"Block","src":"2095:63:62","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":17768,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1506,"src":"2116:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1506_$","typeString":"type(contract IVaultErrors)"}},"id":17770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2129:16:62","memberName":"InvalidTokenType","nodeType":"MemberAccess","referencedDeclaration":1193,"src":"2116:29:62","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2116:31:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17772,"nodeType":"RevertStatement","src":"2109:38:62"}]}}]},"id":17776,"implemented":true,"kind":"function","modifiers":[],"name":"validateTokenConfig","nameLocation":"1597:19:62","nodeType":"FunctionDefinition","parameters":{"id":17728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17724,"mutability":"mutable","name":"tokens","nameLocation":"1638:6:62","nodeType":"VariableDeclaration","scope":17776,"src":"1617:27:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":17722,"nodeType":"UserDefinedTypeName","pathNode":{"id":17721,"name":"TokenConfig","nameLocations":["1617:11:62"],"nodeType":"IdentifierPath","referencedDeclaration":2432,"src":"1617:11:62"},"referencedDeclaration":2432,"src":"1617:11:62","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2432_storage_ptr","typeString":"struct TokenConfig"}},"id":17723,"nodeType":"ArrayTypeName","src":"1617:13:62","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2432_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":17727,"mutability":"mutable","name":"priceParams","nameLocation":"1672:11:62","nodeType":"VariableDeclaration","scope":17776,"src":"1646:37:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_memory_ptr","typeString":"struct ReClammPriceParams"},"typeName":{"id":17726,"nodeType":"UserDefinedTypeName","pathNode":{"id":17725,"name":"ReClammPriceParams","nameLocations":["1646:18:62"],"nodeType":"IdentifierPath","referencedDeclaration":17720,"src":"1646:18:62"},"referencedDeclaration":17720,"src":"1646:18:62","typeDescriptions":{"typeIdentifier":"t_struct$_ReClammPriceParams_$17720_storage_ptr","typeString":"struct ReClammPriceParams"}},"visibility":"internal"}],"src":"1616:68:62"},"returnParameters":{"id":17729,"nodeType":"ParameterList","parameters":[],"src":"1699:0:62"},"scope":17777,"src":"1588:576:62","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":17778,"src":"1552:614:62","usedErrors":[],"usedEvents":[]}],"src":"46:2121:62"},"id":62}},"contracts":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"IPoolInfo":{"abi":[{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"}},\"notice\":\"Convenience interface for pools, to get easy access to information stored in the Vault. Intended mostly for off-chain requests; pools do not need to implement this to work properly.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":\"IPoolInfo\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"IPoolVersion":{"abi":[{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"poolVersion","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPoolVersion()":"3f819b6f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"poolVersion\":\"A string representation of the pool version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"}},\"notice\":\"Simple interface to retrieve the version of pools deployed by a pool factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":\"IPoolVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"IBasePool":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool types should implement this interface. Note that it also requires implementation of: - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages. - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced liquidity operation.\",\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Base interface for a Balancer Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":\"IBasePool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ISwapFeePercentageBounds":{"abi":[{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumSwapFeePercentage()":"654cf15d","getMinimumSwapFeePercentage()":"ce20ece7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their specific pool type. A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level, a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as LVR/MEV strategies, where a very high fee makes sense. Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is the highest value below 100% that satisfies the precision requirements.\",\"kind\":\"dev\",\"methods\":{\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum swap fee percentages for a pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":\"ISwapFeePercentageBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"IUnbalancedLiquidityInvariantRatioBounds":{"abi":[{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumInvariantRatio()":"273c1adf","getMinimumInvariantRatio()":"b677fa56"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce any \\\"baseline\\\" bounds on invariant ratios, since such bounds are highly specific and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools. `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their pool type's math. For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\",\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":\"IUnbalancedLiquidityInvariantRatioBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"BasePoolAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Pools should use the pool factory as the disambiguator passed into the base Authentication contract. Otherwise, permissions would conflict if different pools reused function names.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":\"BasePoolAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0xf8557bcfefe95c0164faf3e840552d7e07899116e18ee58894acef85eb90d0ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://effbe33d58fcf3128cf1d861789f7032913a2054946391e8b2766bf02688ab76\",\"dweb:/ipfs/QmYrejbXfKNbN1bUWQPoneRgfnkn3r574i7jJ7rTb8XewE\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"BasePoolFactory":{"abi":[{"inputs":[],"name":"CodeDeploymentFailed","type":"error"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreationCode","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreationCodeContracts","outputs":[{"internalType":"address","name":"contractA","type":"address"},{"internalType":"address","name":"contractB","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getCreationCode()":"00c194db","getCreationCodeContracts()":"174481fa","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CodeDeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract created by this factory is stored.\"},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base contract for Pool factories. Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts created by the factory) is very powerful. Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token count and weights are fixed). Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently prevent the creation of any future pools from the factory. Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by deploying and registering in a single `create` function. It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious consequences, beyond being a DoS. Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning, the best practice would be to create (i.e., deploy and register) and initialize in the same transaction.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":\"BasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0xd92ad66da6036962f4b4ddd054a389ba65f1d64ed540c0c210bc42de3e44e435\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://755bc7bbf7e16f272bcbfd5212dcd8e6371431973b17b96370839ca230a761db\",\"dweb:/ipfs/QmaiYCXVqZriea8tbJFjJQbx1kSA5arRQhqyv1F9CMzCQo\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0x2520a18de2423ccd618a6ac00cbb4d97637856c5dd9fc68af5e95e2b42013adc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1d762d46a94a7028c19ebe688a152ed8ff9f55d76a5d347c080b7ddf5fe891e\",\"dweb:/ipfs/QmPaR4HYhHkUGiL5SV4QyjvfmauEUwDVAAHa7wFAW2uviB\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x58297dc76e77a5427fe2a527d616e4bee048770fde8205ab8928b119925b1449\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5b24fd7b82652d7e53b5d06d834dedcc2ce0d972568c8bdf299c43defa7c9145\",\"dweb:/ipfs/QmRfSzPyVNajcjjcLyvw2hSCMhUMu1SCCEsYCf8G4xPGM9\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0xbb7e8401583d26268ea9103013bcdcd90866a7718bd91105ebd21c9bf11f4f06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://866a11ad89c93ee918078f7a46ae31e17d89216ce64603f0d34be7ed0a5c520e\",\"dweb:/ipfs/QmW3ckLEJg2v2NzuVLNJFmRuerGSipw6Dzg6ntbmqbAGoC\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"PoolInfo":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a03461008557601f61094538819003918201601f19168301916001600160401b038311848410176100895780849260209460405283398101031261008557516001600160a01b0381168103610085576080526040516108a7908161009e8239608051818181608801528181610136015281816101fa0152818161045e01526105150152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816381fa807c146104e957508063aa6ca8081461042c578063abb1dc44146101c5578063b156aa0a146101045763d335b0cf14610056575f80fd5b346100ef575f3660031901126100ef5780519163b45090f960e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f916100c2575b6020925051908152f35b90506020823d6020116100f3575b816100dd60209383610744565b810103126100ef5760209151906100b8565b5f80fd5b3d91506100d0565b513d5f823e3d90fd5b50346100ef575f3660031901126100ef578051916329ae7ec560e11b835230908301525f826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f91610181575b61017d925051918291602083526020830190610711565b0390f35b90503d805f843e6101928184610744565b8201916020818403126100ef5780519267ffffffffffffffff84116100ef5761017d936101bf9201610810565b90610166565b50346100ef575f3660031901126100ef5780516333f0703b60e11b815230838201526001600160a01b0391602491905f8284817f000000000000000000000000000000000000000000000000000000000000000088165afa928315610422575f945f965f945f966102de575b5090916102488451976080895260808901906106d5565b91602091888403838a015282808b5195868152019a01945f925b85841061028f5750898b03878b0152898061017d8b6102818f8d610711565b908382036060850152610711565b9091929394959a8b51805160028110156102cc578252808701518416878301528801511515888201526060019a8501959493600101929190610262565b85602185634e487b7160e01b5f52525ffd5b94509450955093503d805f843e6102f58184610744565b8201936080838603126100ef5782519567ffffffffffffffff968781116100ef578661032291860161079f565b93602096878201518981116100ef57820181601f820112156100ef5780519061034a82610787565b9961035788519b8c610744565b828b52808b01816060809502840101928584116100ef578201905b8382106103b7575050505050848201518981116100ef5781610395918401610810565b9860608301519081116100ef576103ac9201610810565b93959693945f610231565b84828703126100ef578951908582018f811183821017610410578b52825160028110156100ef578252838301519089821682036100ef5782859283899501526104018d860161077a565b8d820152815201910190610372565b8a60418f634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b50346100ef575f3660031901126100ef5780519163ca4f280360e01b835230908301525f826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f916104a5575b61017d9250519182916020835260208301906106d5565b90503d805f843e6104b68184610744565b8201916020818403126100ef5780519267ffffffffffffffff84116100ef5761017d936104e3920161079f565b9061048e565b839150346100ef575f3660031901126100ef5763f29486a160e01b815230828201526101a080826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9283156106cb575f93610565575b50505060608282015191015182519182526020820152f35b9091809350823d84116106c4575b61057d8183610744565b810103918083126100ef57845193610140938486019367ffffffffffffffff91878610838711176106b1576080136100ef576101c087019182118583101761069e575086526105cb8161077a565b83526105d96020820161077a565b9261016093848701526105ed87830161077a565b9261018093848801526106026060840161077a565b9087015285526080810151602086015260a08101518686015260c0810151606086015260e081015164ffffffffff811681036100ef5760808601526101008082015163ffffffff811681036100ef57610692946106889160a089015261067c6101209761067089870161077a565b60c08b0152850161077a565b60e0890152830161077a565b908601520161077a565b9082015282808061054d565b604190634e487b7160e01b5f525260245ffd5b604182634e487b7160e01b5f525260245ffd5b503d610573565b84513d5f823e3d90fd5b9081518082526020808093019301915f5b8281106106f4575050505090565b83516001600160a01b0316855293810193928101926001016106e6565b9081518082526020808093019301915f5b828110610730575050505090565b835185529381019392810192600101610722565b90601f8019910116810190811067ffffffffffffffff82111761076657604052565b634e487b7160e01b5f52604160045260245ffd5b519081151582036100ef57565b67ffffffffffffffff81116107665760051b60200190565b9080601f830112156100ef578151906020916107ba81610787565b936107c86040519586610744565b81855260208086019260051b8201019283116100ef57602001905b8282106107f1575050505090565b81516001600160a01b03811681036100ef5781529083019083016107e3565b9080601f830112156100ef5781519060209161082b81610787565b936108396040519586610744565b81855260208086019260051b8201019283116100ef57602001905b828210610862575050505090565b8151815290830190830161085456fea2646970667358221220340fe0593808b2351b35ee769b78cb93b5e1a8df3a475032a498f0da902b808b64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0x85 JUMPI PUSH1 0x1F PUSH2 0x945 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x89 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x85 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x85 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0x8A7 SWAP1 DUP2 PUSH2 0x9E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0x88 ADD MSTORE DUP2 DUP2 PUSH2 0x136 ADD MSTORE DUP2 DUP2 PUSH2 0x1FA ADD MSTORE DUP2 DUP2 PUSH2 0x45E ADD MSTORE PUSH2 0x515 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x81FA807C EQ PUSH2 0x4E9 JUMPI POP DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0x104 JUMPI PUSH4 0xD335B0CF EQ PUSH2 0x56 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF3 JUMPI JUMPDEST DUP2 PUSH2 0xDD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x744 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0xB8 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xD0 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0x181 JUMPI JUMPDEST PUSH2 0x17D SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x711 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x192 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xEF JUMPI PUSH2 0x17D SWAP4 PUSH2 0x1BF SWAP3 ADD PUSH2 0x810 JUMP JUMPDEST SWAP1 PUSH2 0x166 JUMP JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x24 SWAP2 SWAP1 PUSH0 DUP3 DUP5 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x422 JUMPI PUSH0 SWAP5 PUSH0 SWAP7 PUSH0 SWAP5 PUSH0 SWAP7 PUSH2 0x2DE JUMPI JUMPDEST POP SWAP1 SWAP2 PUSH2 0x248 DUP5 MLOAD SWAP8 PUSH1 0x80 DUP10 MSTORE PUSH1 0x80 DUP10 ADD SWAP1 PUSH2 0x6D5 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP9 DUP5 SUB DUP4 DUP11 ADD MSTORE DUP3 DUP1 DUP12 MLOAD SWAP6 DUP7 DUP2 MSTORE ADD SWAP11 ADD SWAP5 PUSH0 SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0x28F JUMPI POP DUP10 DUP12 SUB DUP8 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x17D DUP12 PUSH2 0x281 DUP16 DUP14 PUSH2 0x711 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x711 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP11 DUP12 MLOAD DUP1 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2CC JUMPI DUP3 MSTORE DUP1 DUP8 ADD MLOAD DUP5 AND DUP8 DUP4 ADD MSTORE DUP9 ADD MLOAD ISZERO ISZERO DUP9 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP11 DUP6 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x262 JUMP JUMPDEST DUP6 PUSH1 0x21 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP5 POP SWAP5 POP SWAP6 POP SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x2F5 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP4 PUSH1 0x80 DUP4 DUP7 SUB SLT PUSH2 0xEF JUMPI DUP3 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0xEF JUMPI DUP7 PUSH2 0x322 SWAP2 DUP7 ADD PUSH2 0x79F JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP7 DUP8 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0xEF JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP1 MLOAD SWAP1 PUSH2 0x34A DUP3 PUSH2 0x787 JUMP JUMPDEST SWAP10 PUSH2 0x357 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x744 JUMP JUMPDEST DUP3 DUP12 MSTORE DUP1 DUP12 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0xEF JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3B7 JUMPI POP POP POP POP POP DUP5 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0xEF JUMPI DUP2 PUSH2 0x395 SWAP2 DUP5 ADD PUSH2 0x810 JUMP JUMPDEST SWAP9 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xEF JUMPI PUSH2 0x3AC SWAP3 ADD PUSH2 0x810 JUMP JUMPDEST SWAP4 SWAP6 SWAP7 SWAP4 SWAP5 PUSH0 PUSH2 0x231 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0xEF JUMPI DUP10 MLOAD SWAP1 DUP6 DUP3 ADD DUP16 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x410 JUMPI DUP12 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xEF JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP10 DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x401 DUP14 DUP7 ADD PUSH2 0x77A JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x372 JUMP JUMPDEST DUP11 PUSH1 0x41 DUP16 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0x4A5 JUMPI JUMPDEST PUSH2 0x17D SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6D5 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x4B6 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xEF JUMPI PUSH2 0x17D SWAP4 PUSH2 0x4E3 SWAP3 ADD PUSH2 0x79F JUMP JUMPDEST SWAP1 PUSH2 0x48E JUMP JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6CB JUMPI PUSH0 SWAP4 PUSH2 0x565 JUMPI JUMPDEST POP POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x6C4 JUMPI JUMPDEST PUSH2 0x57D DUP2 DUP4 PUSH2 0x744 JUMP JUMPDEST DUP2 ADD SUB SWAP2 DUP1 DUP4 SLT PUSH2 0xEF JUMPI DUP5 MLOAD SWAP4 PUSH2 0x140 SWAP4 DUP5 DUP7 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP8 DUP7 LT DUP4 DUP8 GT OR PUSH2 0x6B1 JUMPI PUSH1 0x80 SGT PUSH2 0xEF JUMPI PUSH2 0x1C0 DUP8 ADD SWAP2 DUP3 GT DUP6 DUP4 LT OR PUSH2 0x69E JUMPI POP DUP7 MSTORE PUSH2 0x5CB DUP2 PUSH2 0x77A JUMP JUMPDEST DUP4 MSTORE PUSH2 0x5D9 PUSH1 0x20 DUP3 ADD PUSH2 0x77A JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x5ED DUP8 DUP4 ADD PUSH2 0x77A JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x602 PUSH1 0x60 DUP5 ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP7 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI PUSH2 0x692 SWAP5 PUSH2 0x688 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x67C PUSH2 0x120 SWAP8 PUSH2 0x670 DUP10 DUP8 ADD PUSH2 0x77A JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x77A JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP3 DUP1 DUP1 PUSH2 0x54D JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x573 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6F4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6E6 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x730 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x722 JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x766 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x766 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x7BA DUP2 PUSH2 0x787 JUMP JUMPDEST SWAP4 PUSH2 0x7C8 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x744 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xEF JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x7E3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x82B DUP2 PUSH2 0x787 JUMP JUMPDEST SWAP4 PUSH2 0x839 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x744 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xEF JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x862 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x854 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xF 0xE0 MSIZE CODESIZE ADDMOD 0xB2 CALLDATALOAD SHL CALLDATALOAD 0xEE PUSH23 0x9B78CB93B5E1A8DF3A475032A498F0DA902B808B64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"639:1471:21:-:0;;;;;;;;;;;;;-1:-1:-1;;639:1471:21;;;;-1:-1:-1;;;;;639:1471:21;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;639:1471:21;;;;;;750:14;;639:1471;;;;;;;;750:14;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:21;;;;;;-1:-1:-1;639:1471:21;;;;;-1:-1:-1;639:1471:21"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":1951,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":2064,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":1914,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":1749,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":1809,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":1927,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":1860,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"3012":[{"length":32,"start":136},{"length":32,"start":310},{"length":32,"start":506},{"length":32,"start":1118},{"length":32,"start":1301}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816381fa807c146104e957508063aa6ca8081461042c578063abb1dc44146101c5578063b156aa0a146101045763d335b0cf14610056575f80fd5b346100ef575f3660031901126100ef5780519163b45090f960e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f916100c2575b6020925051908152f35b90506020823d6020116100f3575b816100dd60209383610744565b810103126100ef5760209151906100b8565b5f80fd5b3d91506100d0565b513d5f823e3d90fd5b50346100ef575f3660031901126100ef578051916329ae7ec560e11b835230908301525f826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f91610181575b61017d925051918291602083526020830190610711565b0390f35b90503d805f843e6101928184610744565b8201916020818403126100ef5780519267ffffffffffffffff84116100ef5761017d936101bf9201610810565b90610166565b50346100ef575f3660031901126100ef5780516333f0703b60e11b815230838201526001600160a01b0391602491905f8284817f000000000000000000000000000000000000000000000000000000000000000088165afa928315610422575f945f965f945f966102de575b5090916102488451976080895260808901906106d5565b91602091888403838a015282808b5195868152019a01945f925b85841061028f5750898b03878b0152898061017d8b6102818f8d610711565b908382036060850152610711565b9091929394959a8b51805160028110156102cc578252808701518416878301528801511515888201526060019a8501959493600101929190610262565b85602185634e487b7160e01b5f52525ffd5b94509450955093503d805f843e6102f58184610744565b8201936080838603126100ef5782519567ffffffffffffffff968781116100ef578661032291860161079f565b93602096878201518981116100ef57820181601f820112156100ef5780519061034a82610787565b9961035788519b8c610744565b828b52808b01816060809502840101928584116100ef578201905b8382106103b7575050505050848201518981116100ef5781610395918401610810565b9860608301519081116100ef576103ac9201610810565b93959693945f610231565b84828703126100ef578951908582018f811183821017610410578b52825160028110156100ef578252838301519089821682036100ef5782859283899501526104018d860161077a565b8d820152815201910190610372565b8a60418f634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b50346100ef575f3660031901126100ef5780519163ca4f280360e01b835230908301525f826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156100fb575f916104a5575b61017d9250519182916020835260208301906106d5565b90503d805f843e6104b68184610744565b8201916020818403126100ef5780519267ffffffffffffffff84116100ef5761017d936104e3920161079f565b9061048e565b839150346100ef575f3660031901126100ef5763f29486a160e01b815230828201526101a080826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9283156106cb575f93610565575b50505060608282015191015182519182526020820152f35b9091809350823d84116106c4575b61057d8183610744565b810103918083126100ef57845193610140938486019367ffffffffffffffff91878610838711176106b1576080136100ef576101c087019182118583101761069e575086526105cb8161077a565b83526105d96020820161077a565b9261016093848701526105ed87830161077a565b9261018093848801526106026060840161077a565b9087015285526080810151602086015260a08101518686015260c0810151606086015260e081015164ffffffffff811681036100ef5760808601526101008082015163ffffffff811681036100ef57610692946106889160a089015261067c6101209761067089870161077a565b60c08b0152850161077a565b60e0890152830161077a565b908601520161077a565b9082015282808061054d565b604190634e487b7160e01b5f525260245ffd5b604182634e487b7160e01b5f525260245ffd5b503d610573565b84513d5f823e3d90fd5b9081518082526020808093019301915f5b8281106106f4575050505090565b83516001600160a01b0316855293810193928101926001016106e6565b9081518082526020808093019301915f5b828110610730575050505090565b835185529381019392810192600101610722565b90601f8019910116810190811067ffffffffffffffff82111761076657604052565b634e487b7160e01b5f52604160045260245ffd5b519081151582036100ef57565b67ffffffffffffffff81116107665760051b60200190565b9080601f830112156100ef578151906020916107ba81610787565b936107c86040519586610744565b81855260208086019260051b8201019283116100ef57602001905b8282106107f1575050505090565b81516001600160a01b03811681036100ef5781529083019083016107e3565b9080601f830112156100ef5781519060209161082b81610787565b936108396040519586610744565b81855260208086019260051b8201019283116100ef57602001905b828210610862575050505090565b8151815290830190830161085456fea2646970667358221220340fe0593808b2351b35ee769b78cb93b5e1a8df3a475032a498f0da902b808b64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x81FA807C EQ PUSH2 0x4E9 JUMPI POP DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x42C JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0x104 JUMPI PUSH4 0xD335B0CF EQ PUSH2 0x56 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0xC2 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF3 JUMPI JUMPDEST DUP2 PUSH2 0xDD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x744 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xEF JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0xB8 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xD0 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0x181 JUMPI JUMPDEST PUSH2 0x17D SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x711 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x192 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xEF JUMPI PUSH2 0x17D SWAP4 PUSH2 0x1BF SWAP3 ADD PUSH2 0x810 JUMP JUMPDEST SWAP1 PUSH2 0x166 JUMP JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x24 SWAP2 SWAP1 PUSH0 DUP3 DUP5 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x422 JUMPI PUSH0 SWAP5 PUSH0 SWAP7 PUSH0 SWAP5 PUSH0 SWAP7 PUSH2 0x2DE JUMPI JUMPDEST POP SWAP1 SWAP2 PUSH2 0x248 DUP5 MLOAD SWAP8 PUSH1 0x80 DUP10 MSTORE PUSH1 0x80 DUP10 ADD SWAP1 PUSH2 0x6D5 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP9 DUP5 SUB DUP4 DUP11 ADD MSTORE DUP3 DUP1 DUP12 MLOAD SWAP6 DUP7 DUP2 MSTORE ADD SWAP11 ADD SWAP5 PUSH0 SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0x28F JUMPI POP DUP10 DUP12 SUB DUP8 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x17D DUP12 PUSH2 0x281 DUP16 DUP14 PUSH2 0x711 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x711 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP11 DUP12 MLOAD DUP1 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2CC JUMPI DUP3 MSTORE DUP1 DUP8 ADD MLOAD DUP5 AND DUP8 DUP4 ADD MSTORE DUP9 ADD MLOAD ISZERO ISZERO DUP9 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP11 DUP6 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x262 JUMP JUMPDEST DUP6 PUSH1 0x21 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP5 POP SWAP5 POP SWAP6 POP SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x2F5 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP4 PUSH1 0x80 DUP4 DUP7 SUB SLT PUSH2 0xEF JUMPI DUP3 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0xEF JUMPI DUP7 PUSH2 0x322 SWAP2 DUP7 ADD PUSH2 0x79F JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP7 DUP8 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0xEF JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP1 MLOAD SWAP1 PUSH2 0x34A DUP3 PUSH2 0x787 JUMP JUMPDEST SWAP10 PUSH2 0x357 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x744 JUMP JUMPDEST DUP3 DUP12 MSTORE DUP1 DUP12 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0xEF JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3B7 JUMPI POP POP POP POP POP DUP5 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0xEF JUMPI DUP2 PUSH2 0x395 SWAP2 DUP5 ADD PUSH2 0x810 JUMP JUMPDEST SWAP9 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xEF JUMPI PUSH2 0x3AC SWAP3 ADD PUSH2 0x810 JUMP JUMPDEST SWAP4 SWAP6 SWAP7 SWAP4 SWAP5 PUSH0 PUSH2 0x231 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0xEF JUMPI DUP10 MLOAD SWAP1 DUP6 DUP3 ADD DUP16 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x410 JUMPI DUP12 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xEF JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP10 DUP3 AND DUP3 SUB PUSH2 0xEF JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x401 DUP14 DUP7 ADD PUSH2 0x77A JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x372 JUMP JUMPDEST DUP11 PUSH1 0x41 DUP16 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP2 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFB JUMPI PUSH0 SWAP2 PUSH2 0x4A5 JUMPI JUMPDEST PUSH2 0x17D SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6D5 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x4B6 DUP2 DUP5 PUSH2 0x744 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0xEF JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0xEF JUMPI PUSH2 0x17D SWAP4 PUSH2 0x4E3 SWAP3 ADD PUSH2 0x79F JUMP JUMPDEST SWAP1 PUSH2 0x48E JUMP JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0xEF JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0xEF JUMPI PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x6CB JUMPI PUSH0 SWAP4 PUSH2 0x565 JUMPI JUMPDEST POP POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x6C4 JUMPI JUMPDEST PUSH2 0x57D DUP2 DUP4 PUSH2 0x744 JUMP JUMPDEST DUP2 ADD SUB SWAP2 DUP1 DUP4 SLT PUSH2 0xEF JUMPI DUP5 MLOAD SWAP4 PUSH2 0x140 SWAP4 DUP5 DUP7 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP8 DUP7 LT DUP4 DUP8 GT OR PUSH2 0x6B1 JUMPI PUSH1 0x80 SGT PUSH2 0xEF JUMPI PUSH2 0x1C0 DUP8 ADD SWAP2 DUP3 GT DUP6 DUP4 LT OR PUSH2 0x69E JUMPI POP DUP7 MSTORE PUSH2 0x5CB DUP2 PUSH2 0x77A JUMP JUMPDEST DUP4 MSTORE PUSH2 0x5D9 PUSH1 0x20 DUP3 ADD PUSH2 0x77A JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x5ED DUP8 DUP4 ADD PUSH2 0x77A JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x602 PUSH1 0x60 DUP5 ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP7 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI PUSH2 0x692 SWAP5 PUSH2 0x688 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x67C PUSH2 0x120 SWAP8 PUSH2 0x670 DUP10 DUP8 ADD PUSH2 0x77A JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x77A JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x77A JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP3 DUP1 DUP1 PUSH2 0x54D JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x573 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6F4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x6E6 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x730 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x722 JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x766 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xEF JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x766 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x7BA DUP2 PUSH2 0x787 JUMP JUMPDEST SWAP4 PUSH2 0x7C8 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x744 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xEF JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x7F1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xEF JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x7E3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xEF JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x82B DUP2 PUSH2 0x787 JUMP JUMPDEST SWAP4 PUSH2 0x839 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x744 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xEF JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x862 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x854 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xF 0xE0 MSIZE CODESIZE ADDMOD 0xB2 CALLDATALOAD SHL CALLDATALOAD 0xEE PUSH23 0x9B78CB93B5E1A8DF3A475032A498F0DA902B808B64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"639:1471:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;639:1471:21;;;;;;;;;;1615:50;;1658:4;1615:50;;;639:1471;1615:50;:6;639:1471;1615:6;-1:-1:-1;;;;;1615:6:21;639:1471;1615:50;;;;;;;639:1471;1615:50;;;639:1471;1615:50;639:1471;;;;;;;1615:50;;;;;;;;;;;;;;;;;:::i;:::-;;;639:1471;;;;1615:50;639:1471;;1615:50;;;639:1471;;;;1615:50;;;-1:-1:-1;1615:50:21;;;639:1471;;;;;;;;;;;;;;;-1:-1:-1;;639:1471:21;;;;;;;;;;1441:44;;1479:4;1441:44;;;639:1471;;1441:6;639:1471;1441:6;-1:-1:-1;;;;;1441:6:21;639:1471;1441:44;;;;;;;639:1471;1441:44;;;639:1471;;;;;;;;;;;;;;;;:::i;:::-;;;;1441:44;;;;;639:1471;1441:44;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1441:44;;;639:1471;;;;;;;-1:-1:-1;;639:1471:21;;;;;;-1:-1:-1;;;1247:38:21;;1279:4;1247:38;;;639:1471;-1:-1:-1;;;;;639:1471:21;;;;;;;;1247:6;639:1471;;1247:38;;;;;;;639:1471;;;;;;;1247:38;;;639:1471;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38;;;;;;;;;;;639:1471;1247:38;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38;;;;;;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1247:38;639:1471;;;;;;;;;;;;;;;;-1:-1:-1;;639:1471:21;;;;;;;;;;892:35;;921:4;892:35;;;639:1471;;892:6;639:1471;892:6;-1:-1:-1;;;;;892:6:21;639:1471;892:35;;;;;;;639:1471;892:35;;;639:1471;;;;;;;;;;;;;;;;:::i;892:35::-;;;;;639:1471;892:35;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;892:35;;;639:1471;;;;;;;;;-1:-1:-1;;639:1471:21;;;;-1:-1:-1;;;1911:35:21;;1940:4;1911:35;;;639:1471;1911:35;;;639:1471;1911:35;:6;-1:-1:-1;;;;;639:1471:21;1911:35;;;;;;;639:1471;1911:35;;;639:1471;1986:37;;;2063:38;1986:37;;;639:1471;2063:38;;639:1471;;;;;;;;;;;1911:35;;;;;;;;;;;;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1911:35;;;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;1911:35;;;;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:21;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;639:1471:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:21;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;639:1471:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;"},"methodIdentifiers":{"getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for commonly requested data.\",\"kind\":\"dev\",\"methods\":{\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"}},\"notice\":\"Standard implementation of the `IPoolInfo` interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":\"PoolInfo\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol":{"GradualValueChange":{"abi":[{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidStartTime","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220194a3ca58079df58732994dcf3defa85e26286451056b3970c2987aecfe9e2ed64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT BLOBBASEFEE EXTCODECOPY 0xA5 DUP1 PUSH26 0xDF58732994DCF3DEFA85E26286451056B3970C2987AECFE9E2ED PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"271:2950:22:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220194a3ca58079df58732994dcf3defa85e26286451056b3970c2987aecfe9e2ed64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NOT BLOBBASEFEE EXTCODECOPY 0xA5 DUP1 PUSH26 0xDF58732994DCF3DEFA85E26286451056B3970C2987AECFE9E2ED PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"271:2950:22:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"InvalidStartTime\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"InvalidStartTime(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol\":\"GradualValueChange\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xd0a69d3c1a5711de402c56714381b9c2382e2b8c9036365107c33fdb612a1f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cbe86c3e7d8a45a114528c4eae13a26d660e31bbf1483e2f687364b07859924\",\"dweb:/ipfs/QmWTqLX6azYtUaD4PRobczB8Khig1tc51JmgGtdMckVUhm\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol":{"BaseSplitCodeFactory":{"abi":[{"inputs":[{"internalType":"bytes","name":"creationCode","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CodeDeploymentFailed","type":"error"},{"inputs":[],"name":"getCreationCode","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreationCodeContracts","outputs":[{"internalType":"address","name":"contractA","type":"address"},{"internalType":"address","name":"contractB","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":221,"id":null,"parameterSlots":1,"returnSlots":1},"constructor_BaseSplitCodeFactory":{"entryPoint":258,"id":3482,"parameterSlots":1,"returnSlots":0},"panic_error_0x41":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"610100604052346100c5576103e08038038061001a816100dd565b9283398101602080838303126100c55782516001600160401b03938482116100c557019082601f830112156100c55781519384116100c957610064601f8501601f191682016100dd565b928484528185840101116100c5578361008894825f94018386015e83010152610102565b60405161021b90816101c5823960805181818160c60152610179015260a051816051015260c05181818160eb015261019d015260e0518160720152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176100c957604052565b8051908160011c918260a052828103918183116101b05760e08390527f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe815260208401815ff08482526001600160a01b039490858116156101a1576080528101928351947f60fe600053602038038060206001396001016000f3fefefefefefefefefefefe855260208201855ff09185528116156101a15760c0525252565b63fef8220760e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8062c194db146100335763174481fa1461002e575f80fd5b61014d565b3461011f575f36600319011261011f5760a06040525f60805261011b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060a0602061009f83856101c4565b608051936001836100b087856101c4565b976040519882818b01016040528952805f838b017f00000000000000000000000000000000000000000000000000000000000000003c8801017f00000000000000000000000000000000000000000000000000000000000000003c8401015e60405191829182610123565b0390f35b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461011f575f36600319011261011f576040805173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b919082018092116101d157565b634e487b7160e01b5f52601160045260245ffdfea264697066735822122002b8751dd0929b4e3a25c67e9306c565562dc6838789651f50664cec64dc733f64736f6c634300081b0033","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0xC5 JUMPI PUSH2 0x3E0 DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0xDD JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x20 DUP1 DUP4 DUP4 SUB SLT PUSH2 0xC5 JUMPI DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 DUP5 DUP3 GT PUSH2 0xC5 JUMPI ADD SWAP1 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xC5 JUMPI DUP2 MLOAD SWAP4 DUP5 GT PUSH2 0xC9 JUMPI PUSH2 0x64 PUSH1 0x1F DUP6 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH2 0xDD JUMP JUMPDEST SWAP3 DUP5 DUP5 MSTORE DUP2 DUP6 DUP5 ADD ADD GT PUSH2 0xC5 JUMPI DUP4 PUSH2 0x88 SWAP5 DUP3 PUSH0 SWAP5 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE PUSH2 0x102 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21B SWAP1 DUP2 PUSH2 0x1C5 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xC6 ADD MSTORE PUSH2 0x179 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH1 0x51 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH1 0xEB ADD MSTORE PUSH2 0x19D ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH1 0x72 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0xC9 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 PUSH1 0x1 SHR SWAP2 DUP3 PUSH1 0xA0 MSTORE DUP3 DUP2 SUB SWAP2 DUP2 DUP4 GT PUSH2 0x1B0 JUMPI PUSH1 0xE0 DUP4 SWAP1 MSTORE PUSH32 0x602038038060206000396000F3FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE DUP2 MSTORE PUSH1 0x20 DUP5 ADD DUP2 PUSH0 CREATE DUP5 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 DUP6 DUP2 AND ISZERO PUSH2 0x1A1 JUMPI PUSH1 0x80 MSTORE DUP2 ADD SWAP3 DUP4 MLOAD SWAP5 PUSH32 0x60FE600053602038038060206001396001016000F3FEFEFEFEFEFEFEFEFEFEFE DUP6 MSTORE PUSH1 0x20 DUP3 ADD DUP6 PUSH0 CREATE SWAP2 DUP6 MSTORE DUP2 AND ISZERO PUSH2 0x1A1 JUMPI PUSH1 0xC0 MSTORE MSTORE MSTORE JUMP JUMPDEST PUSH4 0xFEF82207 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xC194DB EQ PUSH2 0x33 JUMPI PUSH4 0x174481FA EQ PUSH2 0x2E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST CALLVALUE PUSH2 0x11F JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11F JUMPI PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH0 PUSH1 0x80 MSTORE PUSH2 0x11B PUSH32 0x0 PUSH32 0x0 PUSH1 0xA0 PUSH1 0x20 PUSH2 0x9F DUP4 DUP6 PUSH2 0x1C4 JUMP JUMPDEST PUSH1 0x80 MLOAD SWAP4 PUSH1 0x1 DUP4 PUSH2 0xB0 DUP8 DUP6 PUSH2 0x1C4 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP9 DUP3 DUP2 DUP12 ADD ADD PUSH1 0x40 MSTORE DUP10 MSTORE DUP1 PUSH0 DUP4 DUP12 ADD PUSH32 0x0 EXTCODECOPY DUP9 ADD ADD PUSH32 0x0 EXTCODECOPY DUP5 ADD ADD MCOPY PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x123 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x40 SWAP3 DUP2 DUP4 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x11F JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP3 MSTORE PUSH32 0x0 AND PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1D1 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL 0xB8 PUSH22 0x1DD0929B4E3A25C67E9306C565562DC6838789651F50 PUSH7 0x4CEC64DC733F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"466:8376:24:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;466:8376:24;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;466:8376:24;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;466:8376:24;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;466:8376:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;466:8376:24;;;-1:-1:-1;;;;;466:8376:24;;;;;;;;;;:::o;1251:3347::-;466:8376;;;;;;1732:38;;;;466:8376;;;;;;;;;1855:38;;;;1817:66:26;4672:715;;;;;2492:115:24;-1:-1:-1;4672:715:26;;;;-1:-1:-1;;;;;3673:66:26;4672:715;3673:66;;;5515:25;5511:85;;2991:77:24;;3420:332;;;;;4672:715:26;3673:66;4672:715;;;;;;-1:-1:-1;4672:715:26;;;;3673:66;;5515:25;5511:85;;4266:77:24;;4475:117;;1251:3347::o;5511:85:26:-;5563:22;;;-1:-1:-1;5563:22:26;;-1:-1:-1;5563:22:26;466:8376:24;;;;-1:-1:-1;466:8376:24;;;;;-1:-1:-1;466:8376:24"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes":{"entryPoint":291,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":452,"id":null,"parameterSlots":2,"returnSlots":1},"external_fun_getCreationCodeContracts":{"entryPoint":333,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"3408":[{"length":32,"start":198},{"length":32,"start":377}],"3410":[{"length":32,"start":81}],"3412":[{"length":32,"start":235},{"length":32,"start":413}],"3414":[{"length":32,"start":114}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8062c194db146100335763174481fa1461002e575f80fd5b61014d565b3461011f575f36600319011261011f5760a06040525f60805261011b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060a0602061009f83856101c4565b608051936001836100b087856101c4565b976040519882818b01016040528952805f838b017f00000000000000000000000000000000000000000000000000000000000000003c8801017f00000000000000000000000000000000000000000000000000000000000000003c8401015e60405191829182610123565b0390f35b5f80fd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b3461011f575f36600319011261011f576040805173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b919082018092116101d157565b634e487b7160e01b5f52601160045260245ffdfea264697066735822122002b8751dd0929b4e3a25c67e9306c565562dc6838789651f50664cec64dc733f64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xC194DB EQ PUSH2 0x33 JUMPI PUSH4 0x174481FA EQ PUSH2 0x2E JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x14D JUMP JUMPDEST CALLVALUE PUSH2 0x11F JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11F JUMPI PUSH1 0xA0 PUSH1 0x40 MSTORE PUSH0 PUSH1 0x80 MSTORE PUSH2 0x11B PUSH32 0x0 PUSH32 0x0 PUSH1 0xA0 PUSH1 0x20 PUSH2 0x9F DUP4 DUP6 PUSH2 0x1C4 JUMP JUMPDEST PUSH1 0x80 MLOAD SWAP4 PUSH1 0x1 DUP4 PUSH2 0xB0 DUP8 DUP6 PUSH2 0x1C4 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP9 DUP3 DUP2 DUP12 ADD ADD PUSH1 0x40 MSTORE DUP10 MSTORE DUP1 PUSH0 DUP4 DUP12 ADD PUSH32 0x0 EXTCODECOPY DUP9 ADD ADD PUSH32 0x0 EXTCODECOPY DUP5 ADD ADD MCOPY PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x123 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x40 SWAP3 DUP2 DUP4 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP3 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x11F JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x11F JUMPI PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP3 MSTORE PUSH32 0x0 AND PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1D1 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MUL 0xB8 PUSH22 0x1DD0929B4E3A25C67E9306C565562DC6838789651F50 PUSH7 0x4CEC64DC733F64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"466:8376:24:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;466:8376:24;;;;;;;;;;;6220:18;6340;466:8376;6574:844;6396:37;;;;:::i;:::-;466:8376;;6525:38;6574:844;6525:38;;;;;:::i;:::-;6574:844;466:8376;6574:844;;;;;;;466:8376;6574:844;;;;466:8376;6574:844;;;6160:22;6574:844;;;;6280:22;6574:844;7730:162;;;7958:127;466:8376;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;466:8376:24;;;;:::o;:::-;;;;;;-1:-1:-1;;466:8376:24;;;;;;;;4831:22;;466:8376;;;4855:22;466:8376;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"methodIdentifiers":{"getCreationCode()":"00c194db","getCreationCodeContracts()":"174481fa"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"creationCode\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CodeDeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when the contract's creation code grows close to 24kB. Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`.\"},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract created by this factory is stored.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":\"BaseSplitCodeFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0x2520a18de2423ccd618a6ac00cbb4d97637856c5dd9fc68af5e95e2b42013adc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1d762d46a94a7028c19ebe688a152ed8ff9f55d76a5d347c080b7ddf5fe891e\",\"dweb:/ipfs/QmPaR4HYhHkUGiL5SV4QyjvfmauEUwDVAAHa7wFAW2uviB\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x58297dc76e77a5427fe2a527d616e4bee048770fde8205ab8928b119925b1449\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5b24fd7b82652d7e53b5d06d834dedcc2ce0d972568c8bdf299c43defa7c9145\",\"dweb:/ipfs/QmRfSzPyVNajcjjcLyvw2hSCMhUMu1SCCEsYCf8G4xPGM9\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0xbb7e8401583d26268ea9103013bcdcd90866a7718bd91105ebd21c9bf11f4f06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://866a11ad89c93ee918078f7a46ae31e17d89216ce64603f0d34be7ed0a5c520e\",\"dweb:/ipfs/QmW3ckLEJg2v2NzuVLNJFmRuerGSipw6Dzg6ntbmqbAGoC\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202f5f9ae3f2afef9be90228056aefffeffef4dbecb626c078e43c582f1fcf9d1d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F PUSH0 SWAP11 0xE3 CALLCODE 0xAF 0xEF SWAP12 0xE9 MUL 0x28 SDIV PUSH11 0xEFFFEFFEF4DBECB626C078 0xE4 EXTCODECOPY PC 0x2F 0x1F 0xCF SWAP14 SAR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"217:637:25:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202f5f9ae3f2afef9be90228056aefffeffef4dbecb626c078e43c582f1fcf9d1d64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2F PUSH0 SWAP11 0xE3 CALLCODE 0xAF 0xEF SWAP12 0xE9 MUL 0x28 SDIV PUSH11 0xEFFFEFFEF4DBECB626C078 0xE4 EXTCODECOPY PC 0x2F 0x1F 0xCF SWAP14 SAR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"217:637:25:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol":{"CodeDeployer":{"abi":[{"inputs":[],"name":"CodeDeploymentFailed","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122091da2759fa731b95779381b0520f455afce4cee359d2350e2eb5c55b8932580964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 0xDA 0x27 MSIZE STATICCALL PUSH20 0x1B95779381B0520F455AFCE4CEE359D2350E2EB5 0xC5 JUMPDEST DUP10 ORIGIN PC MULMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"272:5332:26:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122091da2759fa731b95779381b0520f455afce4cee359d2350e2eb5c55b8932580964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 0xDA 0x27 MSIZE STATICCALL PUSH20 0x1B95779381B0520F455AFCE4CEE359D2350E2EB5 0xC5 JUMPDEST DUP10 ORIGIN PC MULMOD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"272:5332:26:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CodeDeploymentFailed\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as contract code, which can be retrieved via the `extcodecopy` opcode.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol\":\"CodeDeployer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x58297dc76e77a5427fe2a527d616e4bee048770fde8205ab8928b119925b1449\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5b24fd7b82652d7e53b5d06d834dedcc2ce0d972568c8bdf299c43defa7c9145\",\"dweb:/ipfs/QmRfSzPyVNajcjjcLyvw2hSCMhUMu1SCCEsYCf8G4xPGM9\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"FactoryWidePauseWindow":{"abi":[{"inputs":[{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100af57601f61021238819003918201601f19168301916001600160401b038311848410176100b3578084926020946040528339810103126100af575163ffffffff908181168082036100af5742019081421161009b5782821161008c576080521660a05260405161014a90816100c882396080518160f0015260a05181818160590152609a0152f35b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816378da80cb146100d657508063db035ebc146100815763e9d56e191461003d575f80fd5b3461007d575f36600319011261007d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461007d575f36600319011261007d57602063ffffffff7f00000000000000000000000000000000000000000000000000000000000000008181164210156100ce57905b60405191168152f35b505f906100c5565b3461007d575f36600319011261007d5760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212203d907247f6901890ddacd9532f3045069b173656fc3defbf1e7a4bc0cfab258864736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xAF JUMPI PUSH1 0x1F PUSH2 0x212 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xB3 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xAF JUMPI MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 DUP3 SUB PUSH2 0xAF JUMPI TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x9B JUMPI DUP3 DUP3 GT PUSH2 0x8C JUMPI PUSH1 0x80 MSTORE AND PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x14A SWAP1 DUP2 PUSH2 0xC8 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH1 0xF0 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0x59 ADD MSTORE PUSH1 0x9A ADD MSTORE RETURN JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x78DA80CB EQ PUSH2 0xD6 JUMPI POP DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x81 JUMPI PUSH4 0xE9D56E19 EQ PUSH2 0x3D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH32 0x0 DUP2 DUP2 AND TIMESTAMP LT ISZERO PUSH2 0xCE JUMPI SWAP1 JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH0 SWAP1 PUSH2 0xC5 JUMP JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE SWAP1 PUSH19 0x47F6901890DDACD9532F3045069B173656FC3D 0xEF 0xBF 0x1E PUSH27 0x4BC0CFAB258864736F6C634300081B003300000000000000000000 ","sourceMap":"803:2453:27:-:0;;;;;;;;;;;;;-1:-1:-1;;803:2453:27;;;;-1:-1:-1;;;;;803:2453:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1461:15;803:2453;1461:15;;;803:2453;;;1513:35;;;1509:106;;1625:42;;803:2453;1735:53;;803:2453;;;;;;;;1625:42;803:2453;;;;;1735:53;803:2453;;;;;;;;;;;1509:106;1571:33;;;-1:-1:-1;1571:33:27;;-1:-1:-1;1571:33:27;803:2453;;;;-1:-1:-1;803:2453:27;;;;;-1:-1:-1;803:2453:27;;-1:-1:-1;803:2453:27;;;;;;-1:-1:-1;803:2453:27;;;;;-1:-1:-1;803:2453:27"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{"3692":[{"length":32,"start":240}],"3694":[{"length":32,"start":89},{"length":32,"start":154}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816378da80cb146100d657508063db035ebc146100815763e9d56e191461003d575f80fd5b3461007d575f36600319011261007d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461007d575f36600319011261007d57602063ffffffff7f00000000000000000000000000000000000000000000000000000000000000008181164210156100ce57905b60405191168152f35b505f906100c5565b3461007d575f36600319011261007d5760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212203d907247f6901890ddacd9532f3045069b173656fc3defbf1e7a4bc0cfab258864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x78DA80CB EQ PUSH2 0xD6 JUMPI POP DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x81 JUMPI PUSH4 0xE9D56E19 EQ PUSH2 0x3D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH32 0x0 DUP2 DUP2 AND TIMESTAMP LT ISZERO PUSH2 0xCE JUMPI SWAP1 JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH0 SWAP1 PUSH2 0xC5 JUMP JUMPDEST CALLVALUE PUSH2 0x7D JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x7D JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATASIZE SWAP1 PUSH19 0x47F6901890DDACD9532F3045069B173656FC3D 0xEF 0xBF 0x1E PUSH27 0x4BC0CFAB258864736F6C634300081B003300000000000000000000 ","sourceMap":"803:2453:27:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;803:2453:27;;;;;;;;2369:24;803:2453;;;;;;;;;;;;;;-1:-1:-1;;803:2453:27;;;;;;3191:24;803:2453;;;3173:15;:42;803:2453;;;3172:75;;803:2453;;;;;;;3172:75;;803:2453;3172:75;;;803:2453;;;;;;-1:-1:-1;;803:2453:27;;;;;2073:20;803:2453;2073:20;803:2453;;;"},"methodIdentifiers":{"getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory will share the same Pause Window end time, after which both old and new Pools will not be pausable. All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused through this buffer period, and cannot be unpaused. When the buffer period expires, it will unpause automatically, and remain permissionless forever after.\",\"kind\":\"dev\",\"methods\":{\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"}},\"notice\":\"Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":\"FactoryWidePauseWindow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122051a82a9a51e443291db878074dc8274cdb4d8e4b9f47fdbd203193f291be2af064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MLOAD 0xA8 0x2A SWAP11 MLOAD 0xE4 NUMBER 0x29 SAR 0xB8 PUSH25 0x74DC8274CDB4D8E4B9F47FDBD203193F291BE2AF064736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"202:4350:28:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122051a82a9a51e443291db878074dc8274cdb4d8e4b9f47fdbd203193f291be2af064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MLOAD 0xA8 0x2A SWAP11 MLOAD 0xE4 NUMBER 0x29 SAR 0xB8 PUSH25 0x74DC8274CDB4D8E4B9F47FDBD203193F291BE2AF064736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"202:4350:28:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ScalingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220cc44d7767b00cd1021d2c2933fa6067bf7ddb5b447229266df0adf77f171df4064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC PREVRANDAO 0xD7 PUSH23 0x7B00CD1021D2C2933FA6067BF7DDB5B447229266DF0ADF PUSH24 0xF171DF4064736F6C634300081B0033000000000000000000 ","sourceMap":"938:9455:29:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220cc44d7767b00cd1021d2c2933fa6067bf7ddb5b447229266df0adf77f171df4064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCC PREVRANDAO 0xD7 PUSH23 0x7B00CD1021D2C2933FA6067BF7DDB5B447229266DF0ADF PUSH24 0xF171DF4064736F6C634300081B0033000000000000000000 ","sourceMap":"938:9455:29:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool math, simplifying it greatly. The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`), or tokens that do not implement `IERC20Metadata.decimals`. These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":\"ScalingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761038b80380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161019690816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b3461015c575f36600319011261015c575f5f546001908060011c9260018216938415610154575b602093848210861461014057818752848701958794869082156101265750506001146100cf575b505003601f01601f1990811684019367ffffffffffffffff8511818610176100bb576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b634e487b7160e01b5f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b82841061010e575050508201015f8061006f565b8054848a0186015288955086949093019281016100fa565b925093505060ff19168552151560051b8201015f8061006f565b634e487b7160e01b5f52602260045260245ffd5b607f16610048565b5f80fdfea2646970667358221220ebc4c53153c7e5b5dc457be92a90739403445e83740e14f7d632080c6469bca764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x38B DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x196 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x15C JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x15C JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x154 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x140 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x126 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xCF JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xBB JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x10E JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x6F JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xFA JUMP JUMPDEST SWAP3 POP SWAP4 POP POP PUSH1 0xFF NOT AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x6F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x48 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB 0xC4 0xC5 BALANCE MSTORE8 0xC7 0xE5 0xB5 0xDC GASLIMIT PUSH28 0xE92A90739403445E83740E14F7D632080C6469BCA764736F6C634300 ADDMOD SHL STOP CALLER ","sourceMap":"666:520:30:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:30;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;-1:-1:-1;666:520:30;;;-1:-1:-1;666:520:30;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;-1:-1:-1;666:520:30;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;-1:-1:-1;666:520:30;;-1:-1:-1;666:520:30;;;;;;;;;-1:-1:-1;;666:520:30;;;-1:-1:-1;;;;;666:520:30;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b3461015c575f36600319011261015c575f5f546001908060011c9260018216938415610154575b602093848210861461014057818752848701958794869082156101265750506001146100cf575b505003601f01601f1990811684019367ffffffffffffffff8511818610176100bb576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b634e487b7160e01b5f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b82841061010e575050508201015f8061006f565b8054848a0186015288955086949093019281016100fa565b925093505060ff19168552151560051b8201015f8061006f565b634e487b7160e01b5f52602260045260245ffd5b607f16610048565b5f80fdfea2646970667358221220ebc4c53153c7e5b5dc457be92a90739403445e83740e14f7d632080c6469bca764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x15C JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x15C JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x154 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x140 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x126 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xCF JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH1 0x1F NOT SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xBB JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x10E JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x6F JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xFA JUMP JUMPDEST SWAP3 POP SWAP4 POP POP PUSH1 0xFF NOT AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x6F JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x48 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEB 0xC4 0xC5 BALANCE MSTORE8 0xC7 0xE5 0xB5 0xDC GASLIMIT PUSH28 0xE92A90739403445E83740E14F7D632080C6469BCA764736F6C634300 ADDMOD SHL STOP CALLER ","sourceMap":"666:520:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:30;;;-1:-1:-1;;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e50df49241bb0f6ea78413922bf1474ec572a3172d85df7d3760509a7a1db3f064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 0xD DELEGATECALL SWAP3 COINBASE 0xBB 0xF PUSH15 0xA78413922BF1474EC572A3172D85DF PUSH30 0x3760509A7A1DB3F064736F6C634300081B00330000000000000000000000 ","sourceMap":"239:5688:31:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e50df49241bb0f6ea78413922bf1474ec572a3172d85df7d3760509a7a1db3f064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 0xD DELEGATECALL SWAP3 COINBASE 0xBB 0xF PUSH15 0xA78413922BF1474EC572A3172D85DF PUSH30 0x3760509A7A1DB3F064736F6C634300081B00330000000000000000000000 ","sourceMap":"239:5688:31:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220adba0d9dd21dbf5ee0f2e2280d44540cc49c574761b01f7e1584524b399bf90c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD 0xBA 0xD SWAP14 0xD2 SAR 0xBF MCOPY 0xE0 CALLCODE 0xE2 0x28 0xD PREVRANDAO SLOAD 0xC 0xC4 SWAP13 JUMPI SELFBALANCE PUSH2 0xB01F PUSH31 0x1584524B399BF90C64736F6C634300081B0033000000000000000000000000 ","sourceMap":"595:21889:32:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220adba0d9dd21dbf5ee0f2e2280d44540cc49c574761b01f7e1584524b399bf90c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD 0xBA 0xD SWAP14 0xD2 SAR 0xBF MCOPY 0xE0 CALLCODE 0xE2 0x28 0xD PREVRANDAO SLOAD 0xC 0xC4 SWAP13 JUMPI SELFBALANCE PUSH2 0xB01F PUSH31 0x1584524B399BF90C64736F6C634300081B0033000000000000000000000000 ","sourceMap":"595:21889:32:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"BalancerPoolToken":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"string","name":"bptName","type":"string"},{"internalType":"string","name":"bptSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1104,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1069,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":1576,"id":7864,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_3774":{"entryPoint":1189,"id":7864,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61018060408181523461042957611882803803809161001e828661042d565b8439820190606083830312610429578251906001600160a01b0382168203610429576020848101516001600160401b0395919291908681116104295785610066918301610450565b94828201518781116104295761007c9201610450565b918151958287018781108282111761034057835260019081885282880194603160f81b86526100aa886104a5565b976101209889526100ba8a610628565b966101409788528151868301209a8b60e052519020996101009a808c524660a052875190878201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528983015260608201524660808201523060a082015260a0815260c08101818110868211176103405788525190206080523060c052610160978852805191838311610340576003928354928684811c9416801561041f575b8885101461040b578190601f948581116103bd575b50889085831160011461035f575f92610354575b50505f1982861b1c191690861b1783555b80519384116103405760049586548681811c91168015610336575b82821014610323578381116102e0575b508092851160011461027b57509383949184925f95610270575b50501b925f19911b1c19161790555b5192611123948561075f863960805185610d3f015260a05185610e0b015260c05185610d10015260e05185610d8e01525184610db4015251836105d0015251826105fa015251818181610150015281816103350152818161042c0152818161059501528181610756015281816107ef0152818161099801528181610a030152610ccb0152f35b015193505f806101db565b92919084601f198116885f52855f20955f905b898383106102c657505050106102ad575b50505050811b0190556101ea565b01519060f8845f19921b161c191690555f80808061029f565b85870151895590970196948501948893509081019061028e565b875f52815f208480880160051c82019284891061031a575b0160051c019087905b82811061030f5750506101c1565b5f8155018790610301565b925081926102f8565b602288634e487b7160e01b5f525260245ffd5b90607f16906101b1565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610185565b90889350601f19831691875f528a5f20925f5b8c8282106103a75750508411610390575b505050811b018355610196565b01515f1983881b60f8161c191690555f8080610383565b8385015186558c97909501949384019301610372565b909150855f52885f208580850160051c8201928b8610610402575b918a91869594930160051c01915b8281106103f4575050610171565b5f81558594508a91016103e6565b925081926103d8565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015c565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761034057604052565b81601f82011215610429578051906001600160401b0382116103405760405192610484601f8401601f19166020018561042d565b8284526020838301011161042957815f9260208093018386015e8301015290565b80516020908181101561051b5750601f8251116104dd57808251920151908083106104cf57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610340575f54926001938481811c9116801561061e575b8382101461040b57601f81116105eb575b5081601f841160011461058957509282939183925f9461057e575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610569565b919083601f1981165f8052845f20945f905b888383106105d157505050106105b9575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f80806105ac565b85870151885590960195948501948793509081019061059b565b5f805284601f845f20920160051c820191601f860160051c015b82811061061357505061054e565b5f8155018590610605565b90607f169061053d565b8051602090818110156106525750601f8251116104dd57808251920151908083106104cf57501790565b9192916001600160401b0381116103405760019182548381811c91168015610754575b8282101461040b57601f8111610721575b5080601f83116001146106c15750819293945f926106b6575b50505f19600383901b1c191690821b17905560ff90565b015190505f8061069f565b90601f19831695845f52825f20925f905b88821061070a57505083859697106106f2575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f80806106e5565b8087859682949686015181550195019301906106d2565b835f5283601f835f20920160051c820191601f850160051c015b828110610749575050610686565b5f815501849061073b565b90607f169061067556fe6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610b655750806306fdde0314610a93578063095ea7b314610a3c57806318160ddd146109d057806323b872dd1461094d57806323de66511461091b57806330adf81f146108e1578063313ce567146108c65780633644e515146108a35780635687f2b814610851578063627cdcb914610828578063679aefce146107bc57806370a082311461070e5780637ecebe00146106d757806384b0196e146105b95780638d928af81461057657806395d89b411461048a578063a9059cbb146103c8578063d505accf146101cc5763dd62ed3e146100fb575f80fd5b346101b757806003193601126101b7576020610115610bbe565b606461011f610bd4565b845163927da10560e01b815230968101969096526001600160a01b03928316602487015282166044860152849182907f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a575b6020925051908152f35b90506020823d6020116101bb575b816101a560209383610c87565b810103126101b7576020915190610180565b5f80fd5b3d9150610198565b513d5f823e3d90fd5b50346101b75760e03660031901126101b7576101e6610bbe565b906101ef610bd4565b604435926064359060843560ff811681036101b7578242116103b65761022f826001600160a01b03165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c982526001600160a01b039586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176103a357926102e6926102dd9288958b525190206102b7610d06565b908a519161190160f01b83526002830152602282015260c43591604260a4359220610fec565b90929192611079565b1681810361038f5750505f849596610331602096519889968795869463e1f21c6760e01b865285016040919493929460608201956001600160a01b0380921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101c3575061036557005b6103869060203d602011610388575b61037e8183610c87565b810190610ca9565b005b503d610374565b876325c0072360e11b5f525260245260445ffd5b60418b634e487b7160e01b5f525260245ffd5b828763313c898160e11b5f525260245ffd5b50346101b757806003193601126101b757602061041f926103e7610bbe565b83516317d5759960e31b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561048057602092610465575b505160018152f35b61047b90833d85116103885761037e8183610c87565b61045d565b50513d5f823e3d90fd5b5090346101b7575f3660031901126101b757815191825f83546104ac81610c1f565b90818452602095600191876001821691825f1461054f5750506001146104f3575b5050506104ef92916104e0910385610c87565b51928284938452830190610b9a565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061053757505050820101816104e06104ef6104cd565b8054848a01860152889550879490930192810161051e565b60ff19168782015293151560051b860190930193508492506104e091506104ef90506104cd565b50346101b7575f3660031901126101b757602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101b7575f3660031901126101b7576105f47f0000000000000000000000000000000000000000000000000000000000000000610e31565b9161061e7f0000000000000000000000000000000000000000000000000000000000000000610f2e565b815191602091602084019484861067ffffffffffffffff8711176106c45750610679826020928761066c99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190610b9a565b9188830390890152610b9a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106106ad57505050500390f35b83518552869550938101939281019260010161069e565b604190634e487b7160e01b5f525260245ffd5b50346101b75760203660031901126101b7576020906001600160a01b036106fc610bbe565b165f5260028252805f20549051908152f35b5090346101b757602091826003193601126101b7578261072c610bbe565b60446001600160a01b03948585519687948593633de222bb60e21b855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610480575f9261078d575b5051908152f35b9091508281813d83116107b5575b6107a58183610c87565b810103126101b75751905f610786565b503d61079b565b50346101b7575f3660031901126101b757805191634f037ee760e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b346101b7575f3660031901126101b757335f908152600260205260409020805460018101909155005b50346101b75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561088336610bea565b93919461088e610cc1565b519384526001600160a01b03908116941692a3005b50346101b7575f3660031901126101b7576020906108bf610d06565b9051908152f35b50346101b7575f3660031901126101b7576020905160128152f35b50346101b7575f3660031901126101b757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101b75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61088336610bea565b50346101b75760205f608461096136610bea565b8651630aed65f560e11b815233988101989098526001600160a01b03928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af19182156104805760209261046557505160018152f35b50346101b7575f3660031901126101b7578051916339370aa960e21b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b50346101b757806003193601126101b757602061041f92610a5b610bbe565b835163e1f21c6760e01b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b50346101b7575f3660031901126101b75780516003549091825f610ab684610c1f565b808352602094600190866001821691825f14610b43575050600114610ae8575b50506104ef92916104e0910385610c87565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610b2b57505050820101816104e0610ad6565b8054848a018601528895508794909301928101610b15565b60ff19168682015292151560051b850190920192508391506104e09050610ad6565b83346101b75760203660031901126101b757359063ffffffff60e01b82168092036101b7576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101b757565b602435906001600160a01b03821682036101b757565b60609060031901126101b7576001600160a01b039060043582811681036101b7579160243590811681036101b7579060443590565b90600182811c92168015610c4d575b6020831014610c3957565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610c2e565b6040810190811067ffffffffffffffff821117610c7357604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610c7357604052565b908160209103126101b7575180151581036101b75790565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cf357565b63089676d560e01b5f523360045260245ffd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480610e08575b15610d61577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610c735760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d38565b60ff8114610e6c5760ff811690601f8211610e5d5760405191610e5383610c57565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f5491610e7e83610c1f565b80835292602090600190818116908115610f0a5750600114610eac575b5050610ea992500382610c87565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410610ef25750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610ed7565b91505060209250610ea994915060ff191682840152151560051b8201015f80610e9b565b60ff8114610f505760ff811690601f8211610e5d5760405191610e5383610c57565b506040515f81600191600154610f6581610c1f565b8084529360209160018116908115610f0a5750600114610f8d575050610ea992500382610c87565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410610fd45750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610fb9565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161106e579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611063575f516001600160a01b0381161561105957905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156110d9578061108b575050565b600181036110a25763f645eedf60e01b5f5260045ffd5b600281036110bd575063fce698f760e01b5f5260045260245ffd5b6003146110c75750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f2645d596bead3444d0aa3074ceab7d3f80216f369968e3cb2a8551a6a458cac64736f6c634300081b0033","opcodes":"PUSH2 0x180 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x429 JUMPI PUSH2 0x1882 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x42D JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x429 JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x429 JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP2 SWAP3 SWAP2 SWAP1 DUP7 DUP2 GT PUSH2 0x429 JUMPI DUP6 PUSH2 0x66 SWAP2 DUP4 ADD PUSH2 0x450 JUMP JUMPDEST SWAP5 DUP3 DUP3 ADD MLOAD DUP8 DUP2 GT PUSH2 0x429 JUMPI PUSH2 0x7C SWAP3 ADD PUSH2 0x450 JUMP JUMPDEST SWAP2 DUP2 MLOAD SWAP6 DUP3 DUP8 ADD DUP8 DUP2 LT DUP3 DUP3 GT OR PUSH2 0x340 JUMPI DUP4 MSTORE PUSH1 0x1 SWAP1 DUP2 DUP9 MSTORE DUP3 DUP9 ADD SWAP5 PUSH1 0x31 PUSH1 0xF8 SHL DUP7 MSTORE PUSH2 0xAA DUP9 PUSH2 0x4A5 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xBA DUP11 PUSH2 0x628 JUMP JUMPDEST SWAP7 PUSH2 0x140 SWAP8 DUP9 MSTORE DUP2 MLOAD DUP7 DUP4 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP8 MLOAD SWAP1 DUP8 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP10 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x340 JUMPI DUP9 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP8 DUP9 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x340 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x41F JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x40B JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x3BD JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x35F JUMPI PUSH0 SWAP3 PUSH2 0x354 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x340 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x336 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x323 JUMPI DUP4 DUP2 GT PUSH2 0x2E0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x27B JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x270 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST MLOAD SWAP3 PUSH2 0x1123 SWAP5 DUP6 PUSH2 0x75F DUP7 CODECOPY PUSH1 0x80 MLOAD DUP6 PUSH2 0xD3F ADD MSTORE PUSH1 0xA0 MLOAD DUP6 PUSH2 0xE0B ADD MSTORE PUSH1 0xC0 MLOAD DUP6 PUSH2 0xD10 ADD MSTORE PUSH1 0xE0 MLOAD DUP6 PUSH2 0xD8E ADD MSTORE MLOAD DUP5 PUSH2 0xDB4 ADD MSTORE MLOAD DUP4 PUSH2 0x5D0 ADD MSTORE MLOAD DUP3 PUSH2 0x5FA ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x150 ADD MSTORE DUP2 DUP2 PUSH2 0x335 ADD MSTORE DUP2 DUP2 PUSH2 0x42C ADD MSTORE DUP2 DUP2 PUSH2 0x595 ADD MSTORE DUP2 DUP2 PUSH2 0x756 ADD MSTORE DUP2 DUP2 PUSH2 0x7EF ADD MSTORE DUP2 DUP2 PUSH2 0x998 ADD MSTORE DUP2 DUP2 PUSH2 0xA03 ADD MSTORE PUSH2 0xCCB ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1DB JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x2C6 JUMPI POP POP POP LT PUSH2 0x2AD JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1EA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x29F JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x28E JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x31A JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x30F JUMPI POP POP PUSH2 0x1C1 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x301 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2F8 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1B1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x185 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x3A7 JUMPI POP POP DUP5 GT PUSH2 0x390 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x196 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x383 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x372 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x402 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x3F4 JUMPI POP POP PUSH2 0x171 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x3E6 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x3D8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x340 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x429 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x484 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x42D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x429 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x51B JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x61E JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x5EB JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x589 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x57E JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x569 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x5D1 JUMPI POP POP POP LT PUSH2 0x5B9 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5AC JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x59B JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x613 JUMPI POP POP PUSH2 0x54E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x605 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x53D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x652 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x340 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x754 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x721 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6C1 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x6B6 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x69F JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x70A JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x6F2 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x6D2 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x749 JUMPI POP POP PUSH2 0x686 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x73B JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x675 JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xB65 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA93 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xA3C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x9D0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x8C6 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x8A3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x851 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x70E JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x6D7 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1CC JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xBD4 JUMP JUMPDEST DUP5 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP8 ADD MSTORE DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1BB JUMPI JUMPDEST DUP2 PUSH2 0x1A5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x180 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x1E6 PUSH2 0xBBE JUMP JUMPDEST SWAP1 PUSH2 0x1EF PUSH2 0xBD4 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI DUP3 TIMESTAMP GT PUSH2 0x3B6 JUMPI PUSH2 0x22F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x3A3 JUMPI SWAP3 PUSH2 0x2E6 SWAP3 PUSH2 0x2DD SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2B7 PUSH2 0xD06 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0xFEC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1079 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x38F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x331 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI POP PUSH2 0x365 JUMPI STOP JUMPDEST PUSH2 0x386 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x388 JUMPI JUMPDEST PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xCA9 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x374 JUMP JUMPDEST DUP8 PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0x3E7 PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x47B SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x388 JUMPI PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x45D JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x4AC DUP2 PUSH2 0xC1F JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x54F JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4F3 JUMPI JUMPDEST POP POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x537 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0x4EF PUSH2 0x4CD JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x51E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x4E0 SWAP2 POP PUSH2 0x4EF SWAP1 POP PUSH2 0x4CD JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x5F4 PUSH32 0x0 PUSH2 0xE31 JUMP JUMPDEST SWAP2 PUSH2 0x61E PUSH32 0x0 PUSH2 0xF2E JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x6C4 JUMPI POP PUSH2 0x679 DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x66C SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xF PUSH1 0xF8 SHL DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xB9A JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6AD JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x69E JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6FC PUSH2 0xBBE JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI DUP3 PUSH2 0x72C PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH0 SWAP3 PUSH2 0x78D JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7B5 JUMPI JUMPDEST PUSH2 0x7A5 DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x786 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x79B JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x4F037EE7 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x88E PUSH2 0xCC1 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x8BF PUSH2 0xD06 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x961 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST DUP7 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0xA5B PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xAB6 DUP5 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xB43 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI JUMPDEST POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xB2B JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0xAD6 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xB15 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x4E0 SWAP1 POP PUSH2 0xAD6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC4D JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xC39 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xC2E JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1B7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0xCF3 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0xE08 JUMPI JUMPDEST ISZERO PUSH2 0xD61 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0xD38 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xE6C JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0xE7E DUP4 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xEAC JUMPI JUMPDEST POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xEF2 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xED7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0xEA9 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xF50 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0xF65 DUP2 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xF8D JUMPI POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xFD4 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xFB9 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x106E JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x1063 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1059 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x10D9 JUMPI DUP1 PUSH2 0x108B JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x10A2 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x10BD JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x10C7 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE PUSH5 0x5D596BEAD3 PREVRANDAO 0x4D EXP LOG3 SMOD 0x4C 0xEA 0xB7 0xD3 0xF8 MUL AND RETURN PUSH10 0x968E3CB2A8551A6A458C 0xAC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1269:5749:33:-:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1269:5749:33;;3401:45:51;;;:::i;:::-;3393:53;;;;;3467:51;;;:::i;:::-;3456:62;;;;;1269:5749:33;;;;;3542:22:51;3528:36;;;;1269:5749:33;3591:25:51;;3574:42;;;;;;3644:13;3627:30;;1269:5749:33;;4204:80:51;;;;2079:95;;;;;;;;1269:5749:33;2079:95:51;;;3644:13;2079:95;;;;4278:4;3627:30;2079:95;;;3627:30;4204:80;;2079:95;1269:5749:33;;;;;;;;;;;;;;4194:91:51;;2079:95;3667:48;4278:4;2079:95;3725:27;409:14:37;;;;1269:5749:33;;;;;;;;2265:18;1269:5749;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;-1:-1:-1;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;2293:22;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:95:51;1269:5749:33;;;;;3627:30:51;1269:5749:33;;;;;2079:95:51;1269:5749:33;;;;;3528:36:51;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;4204:80:51;;;;;;1269:5749:33;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;2293:22;1269:5749;;-1:-1:-1;1269:5749:33;;;;;-1:-1:-1;1269:5749:33;;;;;4204:80:51;;;;;;1269:5749:33;;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;-1:-1:-1;;1269:5749:33;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;4204:80:51;1269:5749:33;;-1:-1:-1;;1269:5749:33;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;;:::o;2887:340:47:-;1269:5749:33;;3032:2:47;;3010:24;;;3032:2;;;1269:5749:33;1854:2:47;1269:5749:33;;1840:16:47;1836:72;;1269:5749:33;;;;;2079:95:51;1269:5749:33;;;;;;1949:36:47;;3050:27;:::o;1269:5749:33:-;;;;;;;;;;1949:36:47;3050:27;:::o;1836:72::-;1269:5749:33;;;;1879:18:47;;;;;;;;;;;;1269:5749:33;;;;;;;;;;;;;;;;3432:13:51;1269:5749:33;;;;;;1854:2:47;1269:5749:33;-1:-1:-1;;1269:5749:33;;;1879:18:47;;;;3006:215;1269:5749:33;-1:-1:-1;;;;;1269:5749:33;;;;3432:13:51;1269:5749:33;;;;;;;;;;;;;;3006:215:47;1269:5749:33;;;;;;;;;;;3006:215:47;1269:5749:33;;;;;;;;;;;;;;;;3432:13:51;1269:5749:33;;;;;;;;;;;;;;;;;3432:13:51;1269:5749:33;1390:66:47;3168:42;:::o;1269:5749:33:-;;;;-1:-1:-1;1269:5749:33;;;;;4204:80:51;;;;;1269:5749:33;;3432:13:51;1269:5749:33;;;3432:13:51;1269:5749:33;;3432:13:51;1269:5749:33;;;;;;;;;;;;;;;;;;;;;3432:13:51;1269:5749:33;1390:66:47;3168:42;:::o;1269:5749:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;3432:13:51;1269:5749:33;;;;;3432:13:51;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:51;1269:5749:33;;;;;;;;;;;;;;2887:340:47;1269:5749:33;;3032:2:47;;3010:24;;;3032:2;;;1269:5749:33;1854:2:47;1269:5749:33;;1840:16:47;1836:72;;1269:5749:33;;;;;2079:95:51;1269:5749:33;;;;;;1949:36:47;;3050:27;:::o;3006:215::-;1269:5749:33;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;3006:215:47;1269:5749:33;;;;;;;;;;;3006:215:47;1269:5749:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1269:5749:33;;;;;;;;;;;;;1390:66:47;;3168:42::o;1269:5749:33:-;;;;-1:-1:-1;1269:5749:33;;;;;4204:80:51;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:47;3168:42;:::o;1269:5749:33:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3028,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_7265":{"entryPoint":3006,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":3050,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_bool_fromMemory":{"entryPoint":3241,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_string":{"entryPoint":2970,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":3103,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":3207,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_11168":{"entryPoint":3159,"id":null,"parameterSlots":1,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":3334,"id":9718,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":3265,"id":7129,"parameterSlots":0,"returnSlots":0},"fun_throwError":{"entryPoint":4217,"id":9594,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":3886,"id":7891,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_7271":{"entryPoint":3633,"id":7891,"parameterSlots":1,"returnSlots":1},"fun_tryRecover":{"entryPoint":4076,"id":9509,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":7628,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"7091":[{"length":32,"start":336},{"length":32,"start":821},{"length":32,"start":1068},{"length":32,"start":1429},{"length":32,"start":1878},{"length":32,"start":2031},{"length":32,"start":2456},{"length":32,"start":2563},{"length":32,"start":3275}],"9616":[{"length":32,"start":3391}],"9618":[{"length":32,"start":3595}],"9620":[{"length":32,"start":3344}],"9622":[{"length":32,"start":3470}],"9624":[{"length":32,"start":3508}],"9627":[{"length":32,"start":1488}],"9630":[{"length":32,"start":1530}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610b655750806306fdde0314610a93578063095ea7b314610a3c57806318160ddd146109d057806323b872dd1461094d57806323de66511461091b57806330adf81f146108e1578063313ce567146108c65780633644e515146108a35780635687f2b814610851578063627cdcb914610828578063679aefce146107bc57806370a082311461070e5780637ecebe00146106d757806384b0196e146105b95780638d928af81461057657806395d89b411461048a578063a9059cbb146103c8578063d505accf146101cc5763dd62ed3e146100fb575f80fd5b346101b757806003193601126101b7576020610115610bbe565b606461011f610bd4565b845163927da10560e01b815230968101969096526001600160a01b03928316602487015282166044860152849182907f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a575b6020925051908152f35b90506020823d6020116101bb575b816101a560209383610c87565b810103126101b7576020915190610180565b5f80fd5b3d9150610198565b513d5f823e3d90fd5b50346101b75760e03660031901126101b7576101e6610bbe565b906101ef610bd4565b604435926064359060843560ff811681036101b7578242116103b65761022f826001600160a01b03165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c982526001600160a01b039586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176103a357926102e6926102dd9288958b525190206102b7610d06565b908a519161190160f01b83526002830152602282015260c43591604260a4359220610fec565b90929192611079565b1681810361038f5750505f849596610331602096519889968795869463e1f21c6760e01b865285016040919493929460608201956001600160a01b0380921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101c3575061036557005b6103869060203d602011610388575b61037e8183610c87565b810190610ca9565b005b503d610374565b876325c0072360e11b5f525260245260445ffd5b60418b634e487b7160e01b5f525260245ffd5b828763313c898160e11b5f525260245ffd5b50346101b757806003193601126101b757602061041f926103e7610bbe565b83516317d5759960e31b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561048057602092610465575b505160018152f35b61047b90833d85116103885761037e8183610c87565b61045d565b50513d5f823e3d90fd5b5090346101b7575f3660031901126101b757815191825f83546104ac81610c1f565b90818452602095600191876001821691825f1461054f5750506001146104f3575b5050506104ef92916104e0910385610c87565b51928284938452830190610b9a565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061053757505050820101816104e06104ef6104cd565b8054848a01860152889550879490930192810161051e565b60ff19168782015293151560051b860190930193508492506104e091506104ef90506104cd565b50346101b7575f3660031901126101b757602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101b7575f3660031901126101b7576105f47f0000000000000000000000000000000000000000000000000000000000000000610e31565b9161061e7f0000000000000000000000000000000000000000000000000000000000000000610f2e565b815191602091602084019484861067ffffffffffffffff8711176106c45750610679826020928761066c99989795525f85528151988998600f60f81b8a5260e0868b015260e08a0190610b9a565b9188830390890152610b9a565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106106ad57505050500390f35b83518552869550938101939281019260010161069e565b604190634e487b7160e01b5f525260245ffd5b50346101b75760203660031901126101b7576020906001600160a01b036106fc610bbe565b165f5260028252805f20549051908152f35b5090346101b757602091826003193601126101b7578261072c610bbe565b60446001600160a01b03948585519687948593633de222bb60e21b855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610480575f9261078d575b5051908152f35b9091508281813d83116107b5575b6107a58183610c87565b810103126101b75751905f610786565b503d61079b565b50346101b7575f3660031901126101b757805191634f037ee760e01b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b346101b7575f3660031901126101b757335f908152600260205260409020805460018101909155005b50346101b75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561088336610bea565b93919461088e610cc1565b519384526001600160a01b03908116941692a3005b50346101b7575f3660031901126101b7576020906108bf610d06565b9051908152f35b50346101b7575f3660031901126101b7576020905160128152f35b50346101b7575f3660031901126101b757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101b75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61088336610bea565b50346101b75760205f608461096136610bea565b8651630aed65f560e11b815233988101989098526001600160a01b03928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af19182156104805760209261046557505160018152f35b50346101b7575f3660031901126101b7578051916339370aa960e21b835230908301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101c3575f9161018a576020925051908152f35b50346101b757806003193601126101b757602061041f92610a5b610bbe565b835163e1f21c6760e01b8152339281019283526001600160a01b03909116602083015260243560408301529384918291606090910190565b50346101b7575f3660031901126101b75780516003549091825f610ab684610c1f565b808352602094600190866001821691825f14610b43575050600114610ae8575b50506104ef92916104e0910385610c87565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610b2b57505050820101816104e0610ad6565b8054848a018601528895508794909301928101610b15565b60ff19168682015292151560051b850190920192508391506104e09050610ad6565b83346101b75760203660031901126101b757359063ffffffff60e01b82168092036101b7576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036101b757565b602435906001600160a01b03821682036101b757565b60609060031901126101b7576001600160a01b039060043582811681036101b7579160243590811681036101b7579060443590565b90600182811c92168015610c4d575b6020831014610c3957565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610c2e565b6040810190811067ffffffffffffffff821117610c7357604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117610c7357604052565b908160209103126101b7575180151581036101b75790565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cf357565b63089676d560e01b5f523360045260245ffd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480610e08575b15610d61577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610c735760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614610d38565b60ff8114610e6c5760ff811690601f8211610e5d5760405191610e5383610c57565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f5491610e7e83610c1f565b80835292602090600190818116908115610f0a5750600114610eac575b5050610ea992500382610c87565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410610ef25750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610ed7565b91505060209250610ea994915060ff191682840152151560051b8201015f80610e9b565b60ff8114610f505760ff811690601f8211610e5d5760405191610e5383610c57565b506040515f81600191600154610f6581610c1f565b8084529360209160018116908115610f0a5750600114610f8d575050610ea992500382610c87565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410610fd45750610ea99450505081016020015f80610e9b565b85548785018301529485019486945092810192610fb9565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161106e579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611063575f516001600160a01b0381161561105957905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156110d9578061108b575050565b600181036110a25763f645eedf60e01b5f5260045ffd5b600281036110bd575063fce698f760e01b5f5260045260245ffd5b6003146110c75750565b6335e2f38360e21b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f2645d596bead3444d0aa3074ceab7d3f80216f369968e3cb2a8551a6a458cac64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xB65 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xA93 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xA3C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x9D0 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x91B JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x8E1 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x8C6 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x8A3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x851 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x828 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x7BC JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x70E JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x6D7 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x5B9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x576 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x48A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3C8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1CC JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xBD4 JUMP JUMPDEST DUP5 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS SWAP7 DUP2 ADD SWAP7 SWAP1 SWAP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP8 ADD MSTORE DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1BB JUMPI JUMPDEST DUP2 PUSH2 0x1A5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x180 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x198 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x1E6 PUSH2 0xBBE JUMP JUMPDEST SWAP1 PUSH2 0x1EF PUSH2 0xBD4 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI DUP3 TIMESTAMP GT PUSH2 0x3B6 JUMPI PUSH2 0x22F DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x3A3 JUMPI SWAP3 PUSH2 0x2E6 SWAP3 PUSH2 0x2DD SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2B7 PUSH2 0xD06 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0xFEC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1079 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x38F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x331 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI POP PUSH2 0x365 JUMPI STOP JUMPDEST PUSH2 0x386 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x388 JUMPI JUMPDEST PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xCA9 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x374 JUMP JUMPDEST DUP8 PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0x3E7 PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x47B SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x388 JUMPI PUSH2 0x37E DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x45D JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x4AC DUP2 PUSH2 0xC1F JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x54F JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4F3 JUMPI JUMPDEST POP POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x537 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0x4EF PUSH2 0x4CD JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x51E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x4E0 SWAP2 POP PUSH2 0x4EF SWAP1 POP PUSH2 0x4CD JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH2 0x5F4 PUSH32 0x0 PUSH2 0xE31 JUMP JUMPDEST SWAP2 PUSH2 0x61E PUSH32 0x0 PUSH2 0xF2E JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x6C4 JUMPI POP PUSH2 0x679 DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x66C SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xF PUSH1 0xF8 SHL DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xB9A JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6AD JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x69E JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6FC PUSH2 0xBBE JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI DUP3 PUSH2 0x72C PUSH2 0xBBE JUMP JUMPDEST PUSH1 0x44 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH0 SWAP3 PUSH2 0x78D JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x7B5 JUMPI JUMPDEST PUSH2 0x7A5 DUP2 DUP4 PUSH2 0xC87 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1B7 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x786 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x79B JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x4F037EE7 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x88E PUSH2 0xCC1 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x8BF PUSH2 0xD06 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x883 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x961 CALLDATASIZE PUSH2 0xBEA JUMP JUMPDEST DUP7 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x465 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD SWAP2 PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1C3 JUMPI PUSH0 SWAP2 PUSH2 0x18A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x20 PUSH2 0x41F SWAP3 PUSH2 0xA5B PUSH2 0xBBE JUMP JUMPDEST DUP4 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1B7 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xAB6 DUP5 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xB43 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI JUMPDEST POP POP PUSH2 0x4EF SWAP3 SWAP2 PUSH2 0x4E0 SWAP2 SUB DUP6 PUSH2 0xC87 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xB2B JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x4E0 PUSH2 0xAD6 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xB15 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x4E0 SWAP1 POP PUSH2 0xAD6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1B7 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1B7 JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x1B7 JUMPI JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x1B7 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC4D JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xC39 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xC2E JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1B7 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1B7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0xCF3 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0xE08 JUMPI JUMPDEST ISZERO PUSH2 0xD61 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC73 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0xD38 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xE6C JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0xE7E DUP4 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xEAC JUMPI JUMPDEST POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xEF2 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xED7 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0xEA9 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0xF50 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0xE5D JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0xE53 DUP4 PUSH2 0xC57 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0xF65 DUP2 PUSH2 0xC1F JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0xF0A JUMPI POP PUSH1 0x1 EQ PUSH2 0xF8D JUMPI POP POP PUSH2 0xEA9 SWAP3 POP SUB DUP3 PUSH2 0xC87 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xFD4 JUMPI POP PUSH2 0xEA9 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0xE9B JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0xFB9 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x106E JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x1063 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x1059 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x10D9 JUMPI DUP1 PUSH2 0x108B JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x10A2 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x10BD JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x10C7 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE PUSH5 0x5D596BEAD3 PREVRANDAO 0x4D EXP LOG3 SMOD 0x4C 0xEA 0xB7 0xD3 0xF8 MUL AND RETURN PUSH10 0x968E3CB2A8551A6A458C 0xAC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1269:5749:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:33;1269:5749;2839:33;;;4124:49;1269:5749;4124:49;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6973:36;1269:5749;6973:36;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;;;3545:47:33;;3570:4;3545:47;;;1269:5749;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;3545:6;1269:5749;3545:47;;;;;;;1269:5749;3545:47;;;1269:5749;;;;;;;;;3545:47;;;1269:5749;3545:47;;1269:5749;3545:47;;;;;;1269:5749;3545:47;;;:::i;:::-;;;1269:5749;;;;;;;3545:47;;;1269:5749;;;;3545:47;;;-1:-1:-1;3545:47:33;;;1269:5749;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;5510:15;;:26;5506:97;;5696:16;;-1:-1:-1;;;;;1269:5749:33;-1:-1:-1;1269:5749:33;1121:7:45;1269:5749:33;;;-1:-1:-1;1269:5749:33;;;;;;;;;759:395:45;;5696:16:33;1269:5749;;;;5644:79;;1269:5749;1443:95;1269:5749;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79;;1269:5749;;;;;;;;;;;;;7105:8:50;1269:5749:33;7051:25:50;1269:5749:33;;;;;;5634:90;;5053:20:51;;:::i;:::-;3445:249:52;;;;-1:-1:-1;;;3445:249:52;;;;;;;;;;1269:5749:33;;;3445:249:52;1269:5749:33;;3445:249:52;;7051:25:50;:::i;:::-;7105:8;;;;;:::i;:::-;1269:5749:33;5848:15;;;5844:88;;1269:5749;;;;;;5942:38;1269:5749;;;;;;;;;;;;;5942:38;;;;1269:5749;;;;;;;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;5942:38;;:6;;1269:5749;5942:38;;;;;;;;;;1269:5749;5942:38;;;1269:5749;5942:38;1269:5749;5942:38;;;;;;;;:::i;:::-;;;;;:::i;:::-;1269:5749;5942:38;;;;;5844:88;5886:35;;;;1269:5749;5886:35;1269:5749;;;;;5886:35;1269:5749;;;;;;;;;;;;5506:97;5559:33;;;;;1269:5749;5559:33;1269:5749;;;5559:33;1269:5749;;;;;;;;;;;;;;3345:39;1269:5749;;;:::i;:::-;;;-1:-1:-1;;;3345:39:33;;3361:10;3345:39;;;1269:5749;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;3345:39;;:6;1269:5749;-1:-1:-1;;;;;3345:6:33;1269:5749;3345:39;;;;;;;1269:5749;3345:39;;;1269:5749;;;;;;;3345:39;;;;;;;;;;;;;:::i;:::-;;;;1269:5749;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;-1:-1:-1;;;1269:5749:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;-1:-1:-1;;;;;2951:6:33;1269:5749;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;6099:41:51;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:51;;1269:5749:33;;;;5625:4:51;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;6584:16:51;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;-1:-1:-1;;;;;1269:5749:33;;:::i;:::-;;;;624:7:45;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;3082:40;;3107:4;3082:40;;;1269:5749;;;;;;3082:6;1269:5749;3082:40;;;;;;;1269:5749;3082:40;;;1269:5749;;;;;;;3082:40;;;;;;;;;;;;;;;;;:::i;:::-;;;1269:5749;;;;;3082:40;;;;;;;;;1269:5749;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;6973:36;;7003:4;6973:36;;;1269:5749;6973:36;2951:6;1269:5749;2951:6;-1:-1:-1;;;;;2951:6:33;1269:5749;6973:36;;;;;;;1269:5749;6973:36;;;;1269:5749;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;6339:10;-1:-1:-1;1269:5749:33;;;1121:7:45;1269:5749:33;;;;;;;;;;;;;;;;;;;;5175:32;1269:5749;;;:::i;:::-;436:67:37;;;;;:::i;:::-;1269:5749:33;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;5175:32;1269:5749;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;6533:20;;;:::i;:::-;1269:5749;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;2727:2;1269:5749;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;1443:95;1269:5749;;;;;;;;;4942:26;1269:5749;;;:::i;:::-;;;;;4124:49;1269:5749;;;;;:::i;:::-;;;-1:-1:-1;;;4124:49:33;;4144:10;4124:49;;;1269:5749;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;4124:6;1269:5749;4124:49;;;;;;;;;;;1269:5749;;4190:4;1269:5749;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;2839:33;;2866:4;2839:33;;;1269:5749;2839:33;:6;1269:5749;2839:6;-1:-1:-1;;;;;2839:6:33;1269:5749;2839:33;;;;;;;1269:5749;2839:33;;;;1269:5749;;;;;;;;;;;;;;;;;;;;;3819:43;1269:5749;;;:::i;:::-;;;-1:-1:-1;;;3819:43:33;;3834:10;3819:43;;;1269:5749;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;2434:8;1269:5749;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8;1269:5749;;;;;;;;;;;;-1:-1:-1;;;1269:5749:33;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;-1:-1:-1;1269:5749:33;;;;;;;;;-1:-1:-1;;1269:5749:33;;;;;;;;;;;;;;;;;877:25:53;;;;862:40;1269:5749:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;-1:-1:-1;;1269:5749:33;;;;:::o;:::-;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;509:165:37:-;-1:-1:-1;;;;;586:6:37;1269:5749:33;564:10:37;:29;560:108;;509:165::o;560:108::-;616:41;;;;;564:10;616:41;1269:5749:33;;616:41:37;;3845:262:51;-1:-1:-1;;;;;3938:11:51;1269:5749:33;3929:4:51;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1269:5749:33;;4204:80:51;;;1269:5749:33;2079:95:51;1269:5749:33;;4226:11:51;1269:5749:33;2079:95:51;;1269:5749:33;4239:14:51;2079:95;;;1269:5749:33;4255:13:51;2079:95;;;1269:5749:33;3929:4:51;2079:95;;;1269:5749:33;2079:95:51;4204:80;;2079:95;1269:5749:33;;;;;;;;;;;;;;4194:91:51;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;3358:267:47;1390:66;3481:46;;1390:66;;;2625:40;;2679:11;2688:2;2679:11;;2675:69;;1269:5749:33;;;;;;:::i;:::-;2324:106:47;;2311:2;1269:5749:33;;2324:106:47;3543:22;:::o;2675:69::-;2713:20;;;1269:5749:33;2713:20:47;;1269:5749:33;2713:20:47;3477:142;1269:5749:33;;;-1:-1:-1;1269:5749:33;-1:-1:-1;1269:5749:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:47;;;;;;;;:::i;:::-;3596:12;:::o;1269:5749:33:-;;;;-1:-1:-1;1269:5749:33;;;;-1:-1:-1;1269:5749:33;;;;;;;-1:-1:-1;1390:66:47;;-1:-1:-1;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;;;;;;;;1390:66:47;1269:5749:33;;;;;;;;;;;;;;;;;;;;;3358:267:47;1390:66;3481:46;;1390:66;;;2625:40;;2679:11;2688:2;2679:11;;2675:69;;1269:5749:33;;;;;;:::i;3477:142:47:-;1269:5749:33;;;-1:-1:-1;6584:16:51;;1269:5749:33;6584:16:51;1269:5749:33;;;;:::i;:::-;;;;;;;6584:16:51;1269:5749:33;;;6584:16:51;;;;1269:5749:33;;;;;1390:66:47;;;;;;;;:::i;1269:5749:33:-;;;;6584:16:51;-1:-1:-1;1269:5749:33;;;-1:-1:-1;1269:5749:33;;;;;;;-1:-1:-1;1390:66:47;;-1:-1:-1;;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:33;;;;;;5203:1551:50;;;6283:66;6270:79;;6266:164;;1269:5749:33;;;;;;;;;;;;;;;;;;;;;;;;;;6541:24:50;;;;;;;;;1269:5749:33;6541:24:50;-1:-1:-1;;;;;1269:5749:33;;6579:20:50;6575:113;;6698:49;1269:5749:33;6698:49:50;1269:5749:33;5203:1551:50;:::o;6575:113::-;6615:62;1269:5749:33;6615:62:50;6541:24;6615:62;1269:5749:33;6615:62:50;:::o;6541:24::-;1269:5749:33;;;;;;;;;6266:164:50;6365:54;;;1269:5749:33;6365:54:50;6385:30;6365:54;;:::o;7280:532::-;1269:5749:33;;;;;;7366:29:50;;;7411:7;;:::o;7362:444::-;1269:5749:33;7462:38:50;;1269:5749:33;;7523:23:50;;;-1:-1:-1;7523:23:50;1269:5749:33;-1:-1:-1;7523:23:50;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;-1:-1:-1;7634:46:50;1269:5749:33;;;-1:-1:-1;7634:46:50;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;-1:-1:-1;7763:32:50;1269:5749:33;;;-1:-1:-1;7763:32:50;1269:5749:33;;;;7375:20:50;1269:5749:33;;;;;7375:20:50;1269:5749:33"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getRate()":"679aefce","getVault()":"8d928af8","incrementNonce()":"627cdcb9","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"bptName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"bptSymbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getRate()\":{\"details\":\"The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate of any given pool, which should be sufficient in nearly all cases.\",\"returns\":{\"_0\":\"rate Rate of the pool's BPT\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}]},\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"Get the BPT rate, which is defined as: pool invariant/total supply.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"}},\"notice\":\"`BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools, with all the data and implementation delegated to the ERC20Multitoken contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":\"BalancerPoolToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3\",\"dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x7d94fa0af099a2172eb01f9c8a8a443cbe7e0e43654841563e4e09968efdb549\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65e38fb76b6add407d4557753ae83dd1268e8261195dbe5c19a580d5ba6e4e9a\",\"dweb:/ipfs/QmTkGSJtaQrqjcyWM4AgemeEmKgtDydKPPVRajsUJRQSrK\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x10eb97d047f8d84fe263a02bb4a656ac6674f6679d74532cc37546289e073a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e41287d40b0c46982f1083d40d32de2761f009c5c51627fe79a7feb0ab1cf5c\",\"dweb:/ipfs/Qme7dbh6HX3ZvUJdbQAcVqXkmyXyfcLiUZRhhon3cU6K8p\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"BaseHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks, and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used in this abstract contract, but should be used in real derived hook contracts.\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"_0\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsInRaw, potentially modified by the hook\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Base for pool hooks contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":\"BaseHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"errors\":{\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212206478f12909292d8fe0d69cd470ed3c0451fdfaf5e7581258d6feeab518c8483f64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x78F1290929 0x2D DUP16 0xE0 0xD6 SWAP13 0xD4 PUSH17 0xED3C0451FDFAF5E7581258D6FEEAB518C8 BASEFEE EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:37:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:37;;;;-1:-1:-1;;;;;308:368:37;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:37;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:37;;;;;;-1:-1:-1;308:368:37;;;;;-1:-1:-1;308:368:37"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212206478f12909292d8fe0d69cd470ed3c0451fdfaf5e7581258d6feeab518c8483f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x78F1290929 0x2D DUP16 0xE0 0xD6 SWAP13 0xD4 PUSH17 0xED3C0451FDFAF5E7581258D6FEEAB518C8 BASEFEE EXTCODEHASH PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:37:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"IERC5267":{"abi":[{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":\"IERC5267\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]. Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3\",\"dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Create2.sol":{"Create2":{"abi":[{"inputs":[],"name":"Create2EmptyBytecode","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220b2ef6de6b53cfe4e381cfed6b52979e798626a0a8c453088e0ea10ebee69be5564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 0xEF PUSH14 0xE6B53CFE4E381CFED6B52979E798 PUSH3 0x6A0A8C GASLIMIT ADDRESS DUP9 0xE0 0xEA LT 0xEB 0xEE PUSH10 0xBE5564736F6C63430008 SHL STOP CALLER ","sourceMap":"533:3932:43:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220b2ef6de6b53cfe4e381cfed6b52979e798626a0a8c453088e0ea10ebee69be5564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 0xEF PUSH14 0xE6B53CFE4E381CFED6B52979E798 PUSH3 0x6A0A8C GASLIMIT ADDRESS DUP9 0xE0 0xEA LT 0xEB 0xEE PUSH10 0xBE5564736F6C63430008 SHL STOP CALLER ","sourceMap":"533:3932:43:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Create2.sol\":\"Create2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0xbb7e8401583d26268ea9103013bcdcd90866a7718bd91105ebd21c9bf11f4f06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://866a11ad89c93ee918078f7a46ae31e17d89216ce64603f0d34be7ed0a5c520e\",\"dweb:/ipfs/QmW3ckLEJg2v2NzuVLNJFmRuerGSipw6Dzg6ntbmqbAGoC\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Errors.sol":{"Errors":{"abi":[{"inputs":[],"name":"FailedCall","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MissingPrecompile","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208031b43c705364e477a908b5bcb9f69d9bd2c74892963a7aa304fc69505e526864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 BALANCE 0xB4 EXTCODECOPY PUSH17 0x5364E477A908B5BCB9F69D9BD2C7489296 GASPRICE PUSH27 0xA304FC69505E526864736F6C634300081B00330000000000000000 ","sourceMap":"411:484:44:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208031b43c705364e477a908b5bcb9f69d9bd2c74892963a7aa304fc69505e526864736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP1 BALANCE 0xB4 EXTCODECOPY PUSH17 0x5364E477A908B5BCB9F69D9BD2C7489296 GASPRICE PUSH27 0xA304FC69505E526864736F6C634300081B00330000000000000000 ","sourceMap":"411:484:44:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Nonces.sol":{"Nonces":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides tracking nonces for addresses. Nonces will only increment.\",\"errors\":{\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"kind\":\"dev\",\"methods\":{\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Nonces.sol\":\"Nonces\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Panic.sol":{"Panic":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e0a5fab5bc78d85abbca59e4746653a3a5df1bfecd57a49fac4051802e67b88864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 0xA5 STATICCALL 0xB5 0xBC PUSH25 0xD85ABBCA59E4746653A3A5DF1BFECD57A49FAC4051802E67B8 DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"657:1315:46:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e0a5fab5bc78d85abbca59e4746653a3a5df1bfecd57a49fac4051802e67b88864736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE0 0xA5 STATICCALL 0xB5 0xBC PUSH25 0xD85ABBCA59E4746653A3A5DF1BFECD57A49FAC4051802E67B8 DUP9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"657:1315:46:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ShortStrings":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f2fb5b251521d35ed002b90c6270b6a63013422d8cf6b0d5390fefc3ab2c27ee64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE 0xFB JUMPDEST 0x25 ISZERO 0x21 0xD3 MCOPY 0xD0 MUL 0xB9 0xC PUSH3 0x70B6A6 ADDRESS SGT TIMESTAMP 0x2D DUP13 0xF6 0xB0 0xD5 CODECOPY 0xF 0xEF 0xC3 0xAB 0x2C 0x27 0xEE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1255:3026:47:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f2fb5b251521d35ed002b90c6270b6a63013422d8cf6b0d5390fefc3ab2c27ee64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLCODE 0xFB JUMPDEST 0x25 ISZERO 0x21 0xD3 MCOPY 0xD0 MUL 0xB9 0xC PUSH3 0x70B6A6 ADDRESS SGT TIMESTAMP 0x2D DUP13 0xF6 0xB0 0xD5 CODECOPY 0xF 0xEF 0xC3 0xAB 0x2C 0x27 0xEE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1255:3026:47:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This library provides functions to convert short memory strings into a `ShortString` type that can be used as an immutable variable. Strings of arbitrary length can be optimized using this library if they are short enough (up to 31 bytes) by packing them with their length (1 byte) in a single EVM word (32 bytes). Additionally, a fallback mechanism can be used for every other case. Usage example: ```solidity contract Named { using ShortStrings for *; ShortString private immutable _name; string private _nameFallback; constructor(string memory contractName) { _name = contractName.toShortStringWithFallback(_nameFallback); } function name() external view returns (string memory) { return _name.toStringWithFallback(_nameFallback); } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":\"ShortStrings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x7d94fa0af099a2172eb01f9c8a8a443cbe7e0e43654841563e4e09968efdb549\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65e38fb76b6add407d4557753ae83dd1268e8261195dbe5c19a580d5ba6e4e9a\",\"dweb:/ipfs/QmTkGSJtaQrqjcyWM4AgemeEmKgtDydKPPVRajsUJRQSrK\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212204e413ecb8434aea801d8f1c072173850b495c837f077cf05de64de7e60ad3b3564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4E COINBASE RETURNDATACOPY 0xCB DUP5 CALLVALUE 0xAE 0xA8 ADD 0xD8 CALL 0xC0 PUSH19 0x173850B495C837F077CF05DE64DE7E60AD3B35 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1407:2774:48:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212204e413ecb8434aea801d8f1c072173850b495c837f077cf05de64de7e60ad3b3564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4E COINBASE RETURNDATACOPY 0xCB DUP5 CALLVALUE 0xAE 0xA8 ADD 0xD8 CALL 0xC0 PUSH19 0x173850B495C837F077CF05DE64DE7E60AD3B35 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1407:2774:48:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 { // Define the slot. Alternatively, use the SlotDerivation library to derive the slot. bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"StringsInsufficientHexLength","type":"error"},{"inputs":[],"name":"StringsInvalidAddressFormat","type":"error"},{"inputs":[],"name":"StringsInvalidChar","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220718d85ad0f0038e13b5584d0fe97e312c86c98a19d163dfdf23661196b72252b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x8D85AD0F0038E13B5584D0FE97E312C86C98 LOG1 SWAP14 AND RETURNDATASIZE REVERT CALLCODE CALLDATASIZE PUSH2 0x196B PUSH19 0x252B64736F6C634300081B0033000000000000 ","sourceMap":"297:16541:49:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220718d85ad0f0038e13b5584d0fe97e312c86c98a19d163dfdf23661196b72252b64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0x8D85AD0F0038E13B5584D0FE97E312C86C98 LOG1 SWAP14 AND RETURNDATASIZE REVERT CALLCODE CALLDATASIZE PUSH2 0x196B PUSH19 0x252B64736F6C634300081B0033000000000000 ","sourceMap":"297:16541:49:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidAddressFormat\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidChar\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}],\"StringsInvalidAddressFormat()\":[{\"details\":\"The string being parsed is not a properly formatted address.\"}],\"StringsInvalidChar()\":[{\"details\":\"The string being parsed contains characters that are not in scope of the given base.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ECDSA":{"abi":[{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220979bc07a41761413b299866b498a94a5c5cb37d71473f666ab2736e2e893c4a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 SWAP12 0xC0 PUSH27 0x41761413B299866B498A94A5C5CB37D71473F666AB2736E2E893C4 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"344:7470:50:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220979bc07a41761413b299866b498a94a5c5cb37d71473f666ab2736e2e893c4a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP8 SWAP12 0xC0 PUSH27 0x41761413B299866B498A94A5C5CB37D71473F666AB2736E2E893C4 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"344:7470:50:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"EIP712":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\",\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP-712] is a standard for hashing and signing of typed structured data. The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to produce the hash of their typed data using a combination of `abi.encode` and `keccak256`. This contract implements the EIP-712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\",\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP-712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x7d94fa0af099a2172eb01f9c8a8a443cbe7e0e43654841563e4e09968efdb549\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65e38fb76b6add407d4557753ae83dd1268e8261195dbe5c19a580d5ba6e4e9a\",\"dweb:/ipfs/QmTkGSJtaQrqjcyWM4AgemeEmKgtDydKPPVRajsUJRQSrK\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x10eb97d047f8d84fe263a02bb4a656ac6674f6679d74532cc37546289e073a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e41287d40b0c46982f1083d40d32de2761f009c5c51627fe79a7feb0ab1cf5c\",\"dweb:/ipfs/Qme7dbh6HX3ZvUJdbQAcVqXkmyXyfcLiUZRhhon3cU6K8p\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"MessageHashUtils":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e3840eb603cecd74f2936c53ba4dec24dbdd15e3618a888bfc34d9597ef707e564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 DUP5 0xE 0xB6 SUB 0xCE 0xCD PUSH21 0xF2936C53BA4DEC24DBDD15E3618A888BFC34D9597E 0xF7 SMOD 0xE5 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"521:3181:52:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e3840eb603cecd74f2936c53ba4dec24dbdd15e3618a888bfc34d9597ef707e564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 DUP5 0xE 0xB6 SUB 0xCE 0xCD PUSH21 0xF2936C53BA4DEC24DBDD15E3618A888BFC34D9597E 0xF7 SMOD 0xE5 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"521:3181:52:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing. The library provides methods for generating a hash of a message that conforms to the https://eips.ethereum.org/EIPS/eip-191[ERC-191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712] specifications.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":\"MessageHashUtils\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eaa9665519dbc3fa28e88516ce560593a6429fa2869947fcfb1039d7ef69424764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA 0xA9 PUSH7 0x5519DBC3FA28E8 DUP6 AND 0xCE JUMP SDIV SWAP4 0xA6 TIMESTAMP SWAP16 LOG2 DUP7 SWAP10 SELFBALANCE 0xFC 0xFB LT CODECOPY 0xD7 0xEF PUSH10 0x424764736F6C63430008 SHL STOP CALLER ","sourceMap":"281:28026:55:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eaa9665519dbc3fa28e88516ce560593a6429fa2869947fcfb1039d7ef69424764736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEA 0xA9 PUSH7 0x5519DBC3FA28E8 DUP6 AND 0xCE JUMP SDIV SWAP4 0xA6 TIMESTAMP SWAP16 LOG2 DUP7 SWAP10 SELFBALANCE 0xFC 0xFB LT CODECOPY 0xD7 0xEF PUSH10 0x424764736F6C63430008 SHL STOP CALLER ","sourceMap":"281:28026:55:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208e18740053068c736ae5d0e993b822a34c70c07133ae97971ca221d489e0d90c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 XOR PUSH21 0x53068C736AE5D0E993B822A34C70C07133AE9797 SHR LOG2 0x21 0xD4 DUP10 0xE0 0xD9 0xC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"769:34173:56:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208e18740053068c736ae5d0e993b822a34c70c07133ae97971ca221d489e0d90c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 XOR PUSH21 0x53068C736AE5D0E993B822A34C70C07133AE9797 SHR LOG2 0x21 0xD4 DUP10 0xE0 0xD9 0xC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"769:34173:56:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"SignedMath":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122026e6aa9dc1ae6a2b6b90716729ee7af3a5b09a63c832e375af06e249d0f64c5c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 0xE6 0xAA SWAP14 0xC1 0xAE PUSH11 0x2B6B90716729EE7AF3A5B0 SWAP11 PUSH4 0xC832E375 0xAF MOD 0xE2 BLOBHASH 0xD0 0xF6 0x4C TLOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"258:2354:57:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122026e6aa9dc1ae6a2b6b90716729ee7af3a5b09a63c832e375af06e249d0f64c5c64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 0xE6 0xAA SWAP14 0xC1 0xAE PUSH11 0x2B6B90716729EE7AF3A5B0 SWAP11 PUSH4 0xC832E375 0xAF MOD 0xE2 BLOBHASH 0xD0 0xF6 0x4C TLOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"258:2354:57:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"}},"contracts/ReClammPool.sol":{"ReClammPool":{"abi":[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"internalType":"uint64","name":"centerednessMargin","type":"uint64"},{"internalType":"uint256","name":"initialMinPrice","type":"uint256"},{"internalType":"uint256","name":"initialMaxPrice","type":"uint256"},{"internalType":"uint256","name":"initialTargetPrice","type":"uint256"},{"internalType":"bool","name":"tokenAPriceIncludesRate","type":"bool"},{"internalType":"bool","name":"tokenBPriceIncludesRate","type":"bool"}],"internalType":"struct ReClammPoolParams","name":"params","type":"tuple"},{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountOutGreaterThanBalance","type":"error"},{"inputs":[],"name":"BalanceRatioExceedsTolerance","type":"error"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"DailyPriceShiftExponentTooHigh","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidCenterednessMargin","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"InvalidInitialPrice","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidStartTime","type":"error"},{"inputs":[],"name":"InvalidStartTime","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"NotImplemented","type":"error"},{"inputs":[],"name":"PoolNotInitialized","type":"error"},{"inputs":[],"name":"PoolOutsideTargetRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"fourthRootPriceRatioDelta","type":"uint256"}],"name":"PriceRatioDeltaBelowMin","type":"error"},{"inputs":[],"name":"PriceRatioNotUpdating","type":"error"},{"inputs":[],"name":"PriceRatioUpdateDurationTooShort","type":"error"},{"inputs":[],"name":"PriceRatioUpdateTooFast","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[],"name":"ReClammPoolBptRateUnsupported","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"VaultIsNotLocked","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"inputs":[],"name":"WrongInitializationPrices","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"centerednessMargin","type":"uint256"}],"name":"CenterednessMarginUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dailyPriceShiftBase","type":"uint256"}],"name":"DailyPriceShiftExponentUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"lastTimestamp","type":"uint32"}],"name":"LastTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startFourthRootPriceRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endFourthRootPriceRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceRatioUpdateStartTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceRatioUpdateEndTime","type":"uint256"}],"name":"PriceRatioStateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"virtualBalanceA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"virtualBalanceB","type":"uint256"}],"name":"VirtualBalancesUpdated","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"computeCurrentFourthRootPriceRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPoolCenteredness","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPriceRange","outputs":[{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPriceRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentSpotPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentVirtualBalances","outputs":[{"internalType":"uint256","name":"currentVirtualBalanceA","type":"uint256"},{"internalType":"uint256","name":"currentVirtualBalanceB","type":"uint256"},{"internalType":"bool","name":"changed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"referenceToken","type":"address"},{"internalType":"uint256","name":"referenceAmountInRaw","type":"uint256"}],"name":"computeInitialBalancesRaw","outputs":[{"internalType":"uint256[]","name":"initialBalancesRaw","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCenterednessMargin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDailyPriceShiftBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDailyPriceShiftExponent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getLastTimestamp","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastVirtualBalances","outputs":[{"internalType":"uint256","name":"virtualBalanceA","type":"uint256"},{"internalType":"uint256","name":"virtualBalanceB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPriceRatioState","outputs":[{"components":[{"internalType":"uint96","name":"startFourthRootPriceRatio","type":"uint96"},{"internalType":"uint96","name":"endFourthRootPriceRatio","type":"uint96"},{"internalType":"uint32","name":"priceRatioUpdateStartTime","type":"uint32"},{"internalType":"uint32","name":"priceRatioUpdateEndTime","type":"uint32"}],"internalType":"struct PriceRatioState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getReClammPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256[]","name":"lastVirtualBalances","type":"uint256[]"},{"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"dailyPriceShiftBase","type":"uint256"},{"internalType":"uint256","name":"centerednessMargin","type":"uint256"},{"internalType":"uint256","name":"currentPriceRatio","type":"uint256"},{"internalType":"uint256","name":"currentFourthRootPriceRatio","type":"uint256"},{"internalType":"uint256","name":"startFourthRootPriceRatio","type":"uint256"},{"internalType":"uint256","name":"endFourthRootPriceRatio","type":"uint256"},{"internalType":"uint32","name":"priceRatioUpdateStartTime","type":"uint32"},{"internalType":"uint32","name":"priceRatioUpdateEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct ReClammPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReClammPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"bool","name":"tokenAPriceIncludesRate","type":"bool"},{"internalType":"bool","name":"tokenBPriceIncludesRate","type":"bool"},{"internalType":"uint256","name":"minSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"maxSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialMinPrice","type":"uint256"},{"internalType":"uint256","name":"initialMaxPrice","type":"uint256"},{"internalType":"uint256","name":"initialTargetPrice","type":"uint256"},{"internalType":"uint256","name":"initialDailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"initialCenterednessMargin","type":"uint256"},{"internalType":"uint256","name":"maxDailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"maxDailyPriceRatioUpdateRate","type":"uint256"},{"internalType":"uint256","name":"minPriceRatioUpdateDuration","type":"uint256"},{"internalType":"uint256","name":"minPriceRatioDelta","type":"uint256"},{"internalType":"uint256","name":"balanceRatioAndPriceTolerance","type":"uint256"}],"internalType":"struct ReClammPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPoolWithinTargetRange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolWithinTargetRangeUsingCurrentVirtualBalances","outputs":[{"internalType":"bool","name":"isWithinTargetRange","type":"bool"},{"internalType":"bool","name":"virtualBalancesChanged","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"request","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCenterednessMargin","type":"uint256"}],"name":"setCenterednessMargin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDailyPriceShiftExponent","type":"uint256"}],"name":"setDailyPriceShiftExponent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endPriceRatio","type":"uint256"},{"internalType":"uint256","name":"priceRatioUpdateStartTime","type":"uint256"},{"internalType":"uint256","name":"priceRatioUpdateEndTime","type":"uint256"}],"name":"startPriceRatioUpdate","outputs":[{"internalType":"uint256","name":"actualPriceRatioUpdateStartTime","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPriceRatioUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_bool_fromMemory":{"entryPoint":2551,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":2466,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2431,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":2951,"id":7864,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_18990":{"entryPoint":2564,"id":7864,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6103006040523461097b57616cb7803803809161001e8261030061097f565b6103003961030001604061030082031261097b5761030051906001600160401b03821161097b57610140826103000182031261097b576040519061014082016001600160401b0381118382101761079b576040526103008301516001600160401b03811161097b5781610096918561030001016109a2565b82526103208301516001600160401b03811161097b57816100bc918561030001016109a2565b6020830152610340830151906001600160401b03821161097b576100e5918461030001016109a2565b6040820181905261036083015160608301526103808301519092906001600160401b038116810361097b5760808301526103a081015160a08301526103c081015160c08301526103e081015160e083015261015b906101209061014b61040082016109f7565b61010085015261030001016109f7565b61012082015261032051916001600160a01b038316830361097b578151602083015160408051919592919081016001600160401b0381118282101761079b576040526001815260208101603160f81b81526101b583610a04565b610120526101c282610b87565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b0382111761079b576040525190206080523060c0526101608290528051906001600160401b03821161079b5760035490600182811c92168015610971575b602083101461077d5781601f849311610919575b50602090601f83116001146108a4575f92610899575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161079b57600454600181811c9116801561088f575b602082101461077d57601f8111610830575b506020601f82116001146107c95781929394955f926107be575b50508160011b915f199060031b1c1916176004555b610180819052336101a0526001600160a01b038116156107af576101c0528051906001600160401b03821161079b5760055490600182811c92168015610791575b602083101461077d5781601f84931161072f575b50602090601f83116001146106a7575f9261069c575b50508160011b915f199060031b1c1916176005555b60a0810151801590811561068f575b8115610682575b8115610673575b8115610661575b8115610652575b506106435760a08101516102205260c08101516102405260e08101516102605260608101516102805260808101516001600160401b03166102a05261010081015115156102c052610120015115156102e052676f05b59d3b21387661020052604051615fd9610cbe823960805181614955015260a05181614a21015260c05181614926015260e051816149a4015261010051816149ca01526101205181611709015261014051816117320152610160518181816103340152818161064b015281816108ce01528181610b1001528181610c6801528181610dea0152818161115f01528181611688015281816117f501528181611abe01528181611b0b01528181612099015281816124510152818161267b015281816126c8015281816127290152818161285601528181612b5a015281816135e101528181613b4d01528181613beb01528181613df801528181613e4e015281816141630152818161424801528181614556015281816146a1015281816147a20152818161487501528181614aa301528181614b1f0152614c62015261018051818181610a8501528181610ed401528181610f7901528181611091015261198801526101a05181613abc01526101c0518181816109a801528181610be001528181611214015281816131ad0152613ce701526101e051815050610200518181816112db0152611c850152610220518181816118db01528181611bb50152613f1c0152610240518181816118fc01528181611bdb0152613f4e015261026051818181611c010152613f75015261028051818181611c280152612de601526102a051818181611c4f0152612e1001526102c051818181611b4b0152613ec101526102e051818181611b730152613ee90152615fd990f35b6359e6ae3360e11b5f5260045ffd5b905060c082015111155f6103bb565b60e083015160c08401511091506103b4565b80915060e083015110906103ad565b60e08301511591506103a6565b60c083015115915061039f565b015190505f8061037b565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610714576001945083601f198116106106fc575b505050811b01600555610390565b01515f1960f88460031b161c191690555f80806106ee565b818101518355602094850194600190930192909101906106d3565b90915060055f5260205f20601f840160051c810160208510610776575b90849392915b601f830160051c82018110610768575050610365565b5f8155859450600101610752565b508061074c565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610351565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b015190505f806102fb565b60045f5260205f20905f5b601f1984168110610818575060019394959683601f19811610610800575b505050811b01600455610310565b01515f1960f88460031b161c191690555f80806107f2565b9091602060018192858b0151815501930191016107d4565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810160208410610888575b601f830160051c8201811061087d5750506102e1565b5f8155600101610867565b5080610867565b90607f16906102cf565b015190505f80610299565b60035f90815293505f516020616c975f395f51905f5291905b601f19841685106108fe576001945083601f198116106108e6575b505050811b016003556102ae565b01515f1960f88460031b161c191690555f80806108d8565b818101518355602094850194600190930192909101906108bd565b60035f529091505f516020616c975f395f51905f52601f840160051c81016020851061096a575b90849392915b601f830160051c8201811061095c575050610283565b5f8155859450600101610946565b5080610940565b91607f169161026f565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761079b57604052565b81601f8201121561097b578051906001600160401b03821161079b57604051926109d6601f8401601f19166020018561097f565b8284526020838301011161097b57815f9260208093018386015e8301015290565b5190811515820361097b57565b805160209081811015610a7a5750601f825111610a3c5780825192015190808310610a2e57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b03821161079b575f54926001938481811c91168015610b7d575b8382101461077d57601f8111610b4a575b5081601f8411600114610ae857509282939183925f94610add575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610ac8565b919083601f1981165f8052845f20945f905b88838310610b305750505010610b18575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610b0b565b858701518855909601959485019487935090810190610afa565b5f805284601f845f20920160051c820191601f860160051c015b828110610b72575050610aad565b5f8155018590610b64565b90607f1690610a9c565b805160209081811015610bb15750601f825111610a3c5780825192015190808310610a2e57501790565b9192916001600160401b03811161079b5760019182548381811c91168015610cb3575b8282101461077d57601f8111610c80575b5080601f8311600114610c205750819293945f92610c15575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610bfe565b90601f19831695845f52825f20925f905b888210610c695750508385969710610c51575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610c44565b808785968294968601518155019501930190610c31565b835f5283601f835f20920160051c820191601f850160051c015b828110610ca8575050610be5565b5f8155018490610c9a565b90607f1690610bd456fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x300 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x97B JUMPI PUSH2 0x6CB7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 PUSH2 0x300 PUSH2 0x97F JUMP JUMPDEST PUSH2 0x300 CODECOPY PUSH2 0x300 ADD PUSH1 0x40 PUSH2 0x300 DUP3 SUB SLT PUSH2 0x97B JUMPI PUSH2 0x300 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x97B JUMPI PUSH2 0x140 DUP3 PUSH2 0x300 ADD DUP3 SUB SLT PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE PUSH2 0x300 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x97B JUMPI DUP2 PUSH2 0x96 SWAP2 DUP6 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x320 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x97B JUMPI DUP2 PUSH2 0xBC SWAP2 DUP6 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x340 DUP4 ADD MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x97B JUMPI PUSH2 0xE5 SWAP2 DUP5 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x360 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x380 DUP4 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x97B JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x3A0 DUP2 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x3C0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x3E0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x15B SWAP1 PUSH2 0x120 SWAP1 PUSH2 0x14B PUSH2 0x400 DUP3 ADD PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x300 ADD ADD PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x320 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP4 SUB PUSH2 0x97B JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP3 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x1B5 DUP4 PUSH2 0xA04 JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x1C2 DUP3 PUSH2 0xB87 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x971 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x77D JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x919 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x8A4 JUMPI PUSH0 SWAP3 PUSH2 0x899 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x79B JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x88F JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x830 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x7C9 JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x7BE JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 DUP2 SWAP1 MSTORE CALLER PUSH2 0x1A0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x7AF JUMPI PUSH2 0x1C0 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x791 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x77D JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x72F JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6A7 JUMPI PUSH0 SWAP3 PUSH2 0x69C JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO PUSH2 0x68F JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x682 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x673 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x661 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x652 JUMPI JUMPDEST POP PUSH2 0x643 JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x220 MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH2 0x240 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x260 MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x280 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x2A0 MSTORE PUSH2 0x100 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x2C0 MSTORE PUSH2 0x120 ADD MLOAD ISZERO ISZERO PUSH2 0x2E0 MSTORE PUSH8 0x6F05B59D3B213876 PUSH2 0x200 MSTORE PUSH1 0x40 MLOAD PUSH2 0x5FD9 PUSH2 0xCBE DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4955 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x4A21 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x4926 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x49A4 ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0x49CA ADD MSTORE PUSH2 0x120 MLOAD DUP2 PUSH2 0x1709 ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x1732 ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0x334 ADD MSTORE DUP2 DUP2 PUSH2 0x64B ADD MSTORE DUP2 DUP2 PUSH2 0x8CE ADD MSTORE DUP2 DUP2 PUSH2 0xB10 ADD MSTORE DUP2 DUP2 PUSH2 0xC68 ADD MSTORE DUP2 DUP2 PUSH2 0xDEA ADD MSTORE DUP2 DUP2 PUSH2 0x115F ADD MSTORE DUP2 DUP2 PUSH2 0x1688 ADD MSTORE DUP2 DUP2 PUSH2 0x17F5 ADD MSTORE DUP2 DUP2 PUSH2 0x1ABE ADD MSTORE DUP2 DUP2 PUSH2 0x1B0B ADD MSTORE DUP2 DUP2 PUSH2 0x2099 ADD MSTORE DUP2 DUP2 PUSH2 0x2451 ADD MSTORE DUP2 DUP2 PUSH2 0x267B ADD MSTORE DUP2 DUP2 PUSH2 0x26C8 ADD MSTORE DUP2 DUP2 PUSH2 0x2729 ADD MSTORE DUP2 DUP2 PUSH2 0x2856 ADD MSTORE DUP2 DUP2 PUSH2 0x2B5A ADD MSTORE DUP2 DUP2 PUSH2 0x35E1 ADD MSTORE DUP2 DUP2 PUSH2 0x3B4D ADD MSTORE DUP2 DUP2 PUSH2 0x3BEB ADD MSTORE DUP2 DUP2 PUSH2 0x3DF8 ADD MSTORE DUP2 DUP2 PUSH2 0x3E4E ADD MSTORE DUP2 DUP2 PUSH2 0x4163 ADD MSTORE DUP2 DUP2 PUSH2 0x4248 ADD MSTORE DUP2 DUP2 PUSH2 0x4556 ADD MSTORE DUP2 DUP2 PUSH2 0x46A1 ADD MSTORE DUP2 DUP2 PUSH2 0x47A2 ADD MSTORE DUP2 DUP2 PUSH2 0x4875 ADD MSTORE DUP2 DUP2 PUSH2 0x4AA3 ADD MSTORE DUP2 DUP2 PUSH2 0x4B1F ADD MSTORE PUSH2 0x4C62 ADD MSTORE PUSH2 0x180 MLOAD DUP2 DUP2 DUP2 PUSH2 0xA85 ADD MSTORE DUP2 DUP2 PUSH2 0xED4 ADD MSTORE DUP2 DUP2 PUSH2 0xF79 ADD MSTORE DUP2 DUP2 PUSH2 0x1091 ADD MSTORE PUSH2 0x1988 ADD MSTORE PUSH2 0x1A0 MLOAD DUP2 PUSH2 0x3ABC ADD MSTORE PUSH2 0x1C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x9A8 ADD MSTORE DUP2 DUP2 PUSH2 0xBE0 ADD MSTORE DUP2 DUP2 PUSH2 0x1214 ADD MSTORE DUP2 DUP2 PUSH2 0x31AD ADD MSTORE PUSH2 0x3CE7 ADD MSTORE PUSH2 0x1E0 MLOAD DUP2 POP POP PUSH2 0x200 MLOAD DUP2 DUP2 DUP2 PUSH2 0x12DB ADD MSTORE PUSH2 0x1C85 ADD MSTORE PUSH2 0x220 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18DB ADD MSTORE DUP2 DUP2 PUSH2 0x1BB5 ADD MSTORE PUSH2 0x3F1C ADD MSTORE PUSH2 0x240 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18FC ADD MSTORE DUP2 DUP2 PUSH2 0x1BDB ADD MSTORE PUSH2 0x3F4E ADD MSTORE PUSH2 0x260 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C01 ADD MSTORE PUSH2 0x3F75 ADD MSTORE PUSH2 0x280 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C28 ADD MSTORE PUSH2 0x2DE6 ADD MSTORE PUSH2 0x2A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C4F ADD MSTORE PUSH2 0x2E10 ADD MSTORE PUSH2 0x2C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1B4B ADD MSTORE PUSH2 0x3EC1 ADD MSTORE PUSH2 0x2E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1B73 ADD MSTORE PUSH2 0x3EE9 ADD MSTORE PUSH2 0x5FD9 SWAP1 RETURN JUMPDEST PUSH4 0x59E6AE33 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0xC0 DUP3 ADD MLOAD GT ISZERO PUSH0 PUSH2 0x3BB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP5 ADD MLOAD LT SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST DUP1 SWAP2 POP PUSH1 0xE0 DUP4 ADD MLOAD LT SWAP1 PUSH2 0x3AD JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO SWAP2 POP PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD ISZERO SWAP2 POP PUSH2 0x39F JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x37B JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x714 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x6FC JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x390 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6EE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6D3 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x776 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x768 JUMPI POP POP PUSH2 0x365 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x752 JUMP JUMPDEST POP DUP1 PUSH2 0x74C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x351 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x818 JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x800 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x310 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x7F2 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP5 LT PUSH2 0x888 JUMPI JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x87D JUMPI POP POP PUSH2 0x2E1 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x867 JUMP JUMPDEST POP DUP1 PUSH2 0x867 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2CF JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x6C97 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x8FE JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x8E6 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x2AE JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x8D8 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x6C97 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x96A JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x95C JUMPI POP POP PUSH2 0x283 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x946 JUMP JUMPDEST POP DUP1 PUSH2 0x940 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x26F JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x97B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x9D6 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x97F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x97B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x97B JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xA7A JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA3C JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA2E JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xB7D JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xB4A JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xADD JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xAC8 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xB30 JUMPI POP POP POP LT PUSH2 0xB18 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB0B JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xAFA JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xB72 JUMPI POP POP PUSH2 0xAAD JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xB64 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA9C JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xBB1 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA3C JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA2E JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x79B JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xCB3 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xC80 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xC20 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xC15 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xBFE JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xC69 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xC51 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC44 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xC31 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xCA8 JUMPI POP POP PUSH2 0xBE5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0xC9A JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xBD4 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x3209 JUMPI POP DUP1 PUSH4 0x673D09A EQ PUSH2 0x3161 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x30B8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3061 JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2F18 JUMPI DUP1 PUSH4 0x105AE7AD EQ PUSH2 0x2EEA JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x2EA9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E8F JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2E4F JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2BE3 JUMPI DUP1 PUSH4 0x1D8A5E7E EQ PUSH2 0x2BB9 JUMPI DUP1 PUSH4 0x215666A8 EQ PUSH2 0x2B91 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2B0F JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2ADE JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x2A75 JUMPI DUP1 PUSH4 0x2C357688 EQ PUSH2 0x25B5 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x257B JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2560 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x2546 JUMPI DUP1 PUSH4 0x37899770 EQ PUSH2 0x2523 JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x24D8 JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x239F JUMPI DUP1 PUSH4 0x4EFD88C9 EQ PUSH2 0x2377 JUMPI DUP1 PUSH4 0x4F149B3F EQ PUSH2 0x2346 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x2303 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x225A JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x2206 JUMPI DUP1 PUSH4 0x569EE350 EQ PUSH2 0x21E4 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x21BB JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x2199 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x217A JUMPI DUP1 PUSH4 0x6BD838C7 EQ PUSH2 0x20FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2052 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1E1D JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1DE5 JUMPI DUP1 PUSH4 0x7F118B90 EQ PUSH2 0x1A07 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x195A JUMPI DUP1 PUSH4 0x84254CF9 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16F4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x16AC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1669 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x158B JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x14D3 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x1417 JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x13CF JUMPI DUP1 PUSH4 0xA103B044 EQ PUSH2 0x13B5 JUMPI DUP1 PUSH4 0xA6D2E718 EQ PUSH2 0x11CF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x10FB JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x1067 JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xF46 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xEAA JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xD38 JUMPI DUP1 PUSH4 0xC0209F1D EQ PUSH2 0xCF7 JUMPI DUP1 PUSH4 0xC480B9E6 EQ PUSH2 0xC3E JUMPI DUP1 PUSH4 0xC66DBC4B EQ PUSH2 0xB9C JUMPI DUP1 PUSH4 0xCD80A1AF EQ PUSH2 0xAE6 JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xAC6 JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xA5A JUMPI DUP1 PUSH4 0xD4A5B63A EQ PUSH2 0x96D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xDFBA3818 EQ PUSH2 0x5CF JUMPI PUSH4 0xE45801DA EQ PUSH2 0x2F2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x30B PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP4 PUSH2 0x5A7 JUMPI JUMPDEST POP DUP1 DUP1 PUSH2 0x370 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SWAP3 AND DUP1 SWAP3 EQ PUSH0 EQ PUSH2 0x59E JUMPI PUSH1 0x1 SWAP2 PUSH0 JUMPDEST PUSH1 0x1 DUP2 EQ DUP1 PUSH2 0x589 JUMPI JUMPDEST PUSH2 0x57A JUMPI PUSH2 0x398 PUSH2 0x3E33 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x3CD PUSH2 0x3B0 PUSH2 0x3AA DUP6 DUP5 PUSH2 0x3EBF JUMP JUMPDEST SWAP2 PUSH2 0x3FB9 JUMP JUMPDEST POP POP POP PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP4 DUP6 PUSH2 0x3D8 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SUB PUSH2 0x574 JUMPI SWAP2 SWAP3 JUMPDEST DUP5 PUSH2 0x3ED DUP4 DUP10 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP2 PUSH4 0x313CE567 PUSH1 0xE0 SHL SWAP8 DUP9 DUP5 MSTORE DUP4 PUSH1 0x4 PUSH1 0x20 SWAP13 DUP14 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP11 SWAP3 DUP11 SWAP2 PUSH0 SWAP6 PUSH2 0x54F JUMPI JUMPDEST POP SWAP1 PUSH2 0x429 SWAP2 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP7 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP7 PUSH2 0x512 JUMPI JUMPDEST POP PUSH1 0xFF AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x480 PUSH1 0xFF SWAP6 PUSH2 0x47B PUSH2 0x475 PUSH2 0x4B0 SWAP8 PUSH2 0x3B24 JUMP JUMPDEST DUP14 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x48F DUP12 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP12 MSTORE PUSH1 0x40 CALLDATASIZE DUP12 DUP14 ADD CALLDATACOPY PUSH2 0x4A4 DUP3 DUP13 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x50B JUMPI PUSH1 0x1 PUSH2 0x5F34 JUMP JUMPDEST SWAP3 AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH2 0x4D1 PUSH2 0x4D7 SWAP3 PUSH2 0x47B PUSH2 0x4DE SWAP6 PUSH2 0x3B24 JUMP JUMPDEST SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x5F34 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP7 POP PUSH2 0x536 SWAP1 DUP10 RETURNDATASIZE DUP12 GT PUSH2 0x53D JUMPI JUMPDEST PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B0B JUMP JUMPDEST SWAP6 SWAP1 PUSH2 0x447 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x524 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x429 SWAP3 SWAP2 SWAP6 POP PUSH2 0x56C SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x53D JUMPI PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x41E JUMP JUMPDEST SWAP3 PUSH2 0x3E2 JUMP JUMPDEST PUSH4 0xC1AB6DC1 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH2 0x594 DUP7 PUSH2 0x364B JUMP JUMPDEST MLOAD AND DUP3 EQ ISZERO PUSH2 0x38C JUMP JUMPDEST PUSH0 SWAP2 PUSH1 0x1 PUSH2 0x382 JUMP JUMPDEST PUSH2 0x5C4 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3978 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x364 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0x5E9 PUSH2 0x4C48 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x60C PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x616 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x6B0 JUMPI JUMPDEST DUP2 PUSH2 0x69F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x67A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x692 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x6D7 DUP2 PUSH2 0x32BF JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x78E PUSH2 0x3263 JUMP JUMPDEST PUSH2 0x796 PUSH2 0x3279 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP4 TIMESTAMP GT PUSH2 0x95A JUMPI PUSH2 0x7D7 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP7 AND SWAP5 DUP6 PUSH1 0x40 DUP6 ADD MSTORE DUP9 DUP9 AND PUSH1 0x60 DUP6 ADD MSTORE DUP10 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x946 JUMPI DUP8 SWAP4 PUSH2 0x892 SWAP4 PUSH2 0x889 SWAP4 PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x862 PUSH2 0x491C JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x5505 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x5587 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x8FD JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x929 JUMPI JUMPDEST DUP2 PUSH2 0x916 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x927 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x909 JUMP JUMPDEST PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x985 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x9EA SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI JUMPDEST POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x9F2 PUSH2 0x4B05 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0xA01 PUSH2 0x375E JUMP JUMPDEST ADD MLOAD AND TIMESTAMP GT PUSH2 0xA1C JUMPI PUSH2 0x927 TIMESTAMP TIMESTAMP PUSH2 0xA17 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x421A JUMP JUMPDEST PUSH4 0x771CEF4F PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xA4D SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI JUMPDEST PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x353B JUMP JUMPDEST DUP5 PUSH2 0x9E0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA3B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH2 0xB68 SWAP2 PUSH0 SWAP2 PUSH2 0xB76 JUMPI JUMPDEST POP PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xB92 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x399E JUMP JUMPDEST SWAP3 POP POP POP DUP4 PUSH2 0xB4F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xBB5 PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0xBBD PUSH2 0x3BD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0xC21 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0xC29 PUSH2 0x4B05 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xC36 PUSH1 0x4 CALLDATALOAD PUSH2 0x44A9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCC7 PUSH2 0xCAF DUP3 PUSH2 0x4A47 JUMP JUMPDEST SWAP3 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP5 PUSH2 0x4B9D JUMP JUMPDEST POP SWAP2 DUP4 MLOAD SWAP3 LT ISZERO DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xCED SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0xCA2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0xD2C PUSH2 0x4D1 PUSH2 0xD32 PUSH2 0xD1D PUSH2 0x4A88 JUMP JUMPDEST POP PUSH2 0xD2C DUP4 SWAP7 SWAP4 SWAP5 SWAP3 SWAP5 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x38AC JUMP JUMPDEST SWAP4 PUSH2 0x366F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xD51 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0xD5A PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD86 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD9F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0xDBD PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0xDC6 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0xE6F JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B PUSH1 0x64 CALLDATALOAD DUP4 PUSH2 0x3AFE JUMP JUMPDEST SWAP8 DUP9 SWAP5 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP9 SWAP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38E9 JUMP JUMPDEST SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0xE64 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE9D JUMPI JUMPDEST DUP2 PUSH2 0xE8A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0xE1A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE7D JUMP JUMPDEST PUSH2 0x344D JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0xF24 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST PUSH2 0xF40 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x36F1 JUMP JUMPDEST DUP3 PUSH2 0xF0F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x1046 JUMPI JUMPDEST POP PUSH2 0xFC5 PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x100A JUMPI DUP8 DUP1 PUSH2 0x4F3 DUP10 PUSH2 0xFFC DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0x1024 DUP2 PUSH2 0x3509 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xFDD JUMP JUMPDEST SWAP3 POP SWAP4 POP POP PUSH2 0x105F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP2 SWAP4 DUP6 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0x10E1 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH2 0x10F5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x10CC JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x1119 PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x11C7 JUMPI JUMPDEST DUP2 PUSH2 0x11AF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x11C0 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST POP DUP1 PUSH2 0xE64 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11A2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH2 0x11F2 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 DUP6 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1255 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0x1396 JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST DUP1 TIMESTAMP GT DUP2 TIMESTAMP XOR MUL XOR SWAP3 DUP3 DUP5 GT PUSH2 0x1381 JUMPI PUSH2 0x126F DUP5 DUP5 PUSH2 0x3AFE JUMP JUMPDEST SWAP2 PUSH3 0x15180 SWAP4 DUP5 DUP5 LT PUSH2 0x1372 JUMPI PUSH2 0x128F SWAP1 PUSH2 0x1288 PUSH2 0x4B05 JUMP JUMPDEST DUP7 DUP5 PUSH2 0x421A JUMP JUMPDEST SWAP2 DUP3 DUP2 LT PUSH2 0x1363 JUMPI PUSH2 0x12A1 DUP4 DUP3 PUSH2 0x3AFE JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x1351 JUMPI POP DUP3 DUP2 GT ISZERO PUSH2 0x132C JUMPI DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x12D9 SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x531C JUMP JUMPDEST PUSH32 0x0 LT PUSH2 0x130A JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x2B85F917 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP2 DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x134C SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x12D9 JUMP JUMPDEST SWAP1 POP PUSH4 0x119D8537 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x136D DUP2 DUP5 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x12A1 JUMP JUMPDEST PUSH4 0x19F8E855 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH4 0x64BB3B83 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x13AF SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP9 PUSH2 0x9E0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x485B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x60 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1407 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1449 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP3 PUSH2 0x14BF PUSH1 0x1 PUSH2 0x1494 PUSH2 0xC36 SWAP6 PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 DUP3 PUSH1 0xA0 SHR AND SWAP3 DUP2 PUSH4 0xFFFFFFFF DUP5 AND SWAP4 DUP13 SHR AND SWAP2 DUP2 PUSH1 0x80 SHR SWAP2 AND DUP9 PUSH2 0x4FDE JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 PUSH2 0x14A1 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x14C5 JUMPI PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x1 SWAP6 JUMPDEST PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP4 PUSH2 0x364B JUMP JUMPDEST SWAP2 PUSH2 0x5F34 JUMP JUMPDEST PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x2 SWAP6 PUSH2 0x14B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x14ED PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x14F6 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1523 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1554 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x1570 PUSH2 0x4F3 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x15AC DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x15EE JUMPI JUMPDEST POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1631 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x161A JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0x15DA SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x15CD SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0xC36 PUSH1 0x20 SWAP2 PUSH2 0x3AB2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x172D PUSH32 0x0 PUSH2 0x534D JUMP JUMPDEST PUSH2 0x1756 PUSH32 0x0 PUSH2 0x5447 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x946 JUMPI PUSH2 0x17B0 PUSH2 0x4F3 SWAP3 PUSH2 0x17A2 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH1 0xF PUSH1 0xF8 SHL DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x323F JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1920 JUMPI JUMPDEST POP ISZERO PUSH2 0x18D6 JUMPI PUSH0 PUSH1 0x24 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0x18B8 JUMPI JUMPDEST POP PUSH2 0x18AC PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E PUSH2 0x1895 PUSH2 0x188A DUP8 PUSH2 0x4A47 JUMP JUMPDEST POP DUP2 DUP2 SWAP4 SWAP3 SWAP10 PUSH2 0x4DD5 JUMP JUMPDEST SWAP5 DUP2 DUP7 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 DUP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x40CE JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x18CC SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0x1868 JUMP JUMPDEST POP PUSH1 0x40 PUSH32 0x0 PUSH32 0x0 PUSH2 0x18AC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1952 JUMPI JUMPDEST DUP2 PUSH2 0x193B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x194C SWAP1 PUSH2 0x35B9 JUMP JUMPDEST DUP3 PUSH2 0x1835 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x192E JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x19DA JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x19F9 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x1A00 JUMPI JUMPDEST PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x37A3 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x19C3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19E7 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x200 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DCB JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DA8 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x9184E72A000 PUSH1 0x80 DUP3 ADD MSTORE PUSH8 0x16345785D8A0000 PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x120 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x140 DUP3 ADD MSTORE PUSH8 0x29A2241AF62C0000 PUSH2 0x160 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x180 DUP3 ADD MSTORE PUSH3 0x15180 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH3 0xF4240 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH6 0x5AF3107A4000 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1E0 PUSH2 0x1D08 PUSH2 0x1CF2 DUP4 MLOAD PUSH2 0x200 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x220 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x1F NOT ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0x1A0 DUP2 ADD MLOAD PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0x1C0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD PUSH2 0x200 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x1DC4 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x371A JUMP JUMPDEST POP DUP3 PUSH2 0x1B43 JUMP JUMPDEST PUSH2 0x1DDF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x1AEE JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1E06 PUSH2 0x3263 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT DUP4 DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 DUP3 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1E9D SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3362 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP2 ADD SWAP5 DUP6 MSTORE PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x64 DUP5 ADD CALLDATALOAD DUP6 MSTORE PUSH1 0x80 DUP3 ADD SWAP4 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP6 MSTORE PUSH2 0x1EC9 PUSH1 0xA4 DUP3 ADD PUSH2 0x328F JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0x4 PUSH2 0x1EE9 SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x33C2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1EF6 PUSH2 0x3DEE JUMP JUMPDEST PUSH2 0x1F00 DUP6 MLOAD PUSH2 0x4A47 JUMP JUMPDEST SWAP7 SWAP2 SWAP7 SWAP3 SWAP1 SWAP3 PUSH2 0x2043 JUMPI JUMPDEST PUSH2 0x1F13 PUSH2 0x4750 JUMP JUMPDEST MLOAD PUSH2 0x1F1D DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1F26 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1FB9 JUMPI PUSH2 0x1F7A SWAP3 PUSH2 0x1F6F PUSH2 0x1F80 SWAP7 SWAP6 SWAP4 PUSH2 0x1F74 SWAP4 MLOAD SWAP9 DUP10 SWAP8 MLOAD SWAP6 MLOAD SWAP8 DUP9 SWAP5 MLOAD SWAP5 DUP6 SWAP3 DUP9 ISZERO PUSH0 EQ PUSH2 0x1FA1 JUMPI PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST SWAP6 DUP11 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x38AC JUMP JUMPDEST SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x1F92 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x5A09F129 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP4 PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP3 MLOAD SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP3 PUSH2 0x1FCE DUP4 DUP8 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP6 GT PUSH2 0x1F92 JUMPI PUSH2 0xD2C DUP6 SWAP4 PUSH2 0x1FFA PUSH2 0x2005 SWAP7 PUSH2 0x2000 SWAP6 DUP6 ISZERO PUSH0 EQ PUSH2 0x2039 JUMPI PUSH2 0xD2C SWAP1 SWAP2 SWAP6 JUMPDEST DUP12 PUSH2 0x367C JUMP JUMPDEST SWAP8 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x3AFE JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0x202A JUMPI PUSH2 0x201A PUSH1 0x1 SWAP2 PUSH1 0x20 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0xC36 JUMP JUMPDEST PUSH4 0xA0C22C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP5 PUSH2 0xD2C SWAP1 PUSH2 0x1FF4 JUMP JUMPDEST PUSH2 0x204D DUP4 DUP9 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0x1F0B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x44 DUP2 PUSH2 0x206F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x20D2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20F8 JUMPI JUMPDEST PUSH2 0x20E9 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x20C9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH2 0x211E DUP2 PUSH2 0x32A3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE PUSH1 0x80 PUSH2 0x2139 PUSH2 0x375E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 PUSH4 0xFFFFFFFF DUP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD AND PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH4 0x56B7FCDB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x2201 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x48DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x2243 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x227B DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x22A8 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x22EB JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x22D4 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x40 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x233B PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x60 PUSH2 0x2360 PUSH2 0x4A88 JUMP JUMPDEST SWAP2 SWAP3 POP PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD DUP4 SHR AND PUSH2 0x4831 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x23B8 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x23C1 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x23ED SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2406 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0x2424 PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x242D PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x24A2 JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B DUP3 PUSH1 0x84 CALLDATALOAD PUSH2 0x38AC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24D0 JUMPI JUMPDEST DUP2 PUSH2 0x24BD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0x2481 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x250A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x233B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x491C JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x240 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH0 PUSH2 0x200 DUP3 ADD MSTORE PUSH0 PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A5B JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A3F JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A0D JUMPI JUMPDEST POP PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2767 PUSH2 0x35C6 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x27DB PUSH1 0x40 MLOAD PUSH2 0x2793 DUP2 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 DUP2 AND PUSH2 0x27B8 DUP4 PUSH2 0x366F JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0x27C5 DUP3 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH1 0xA0 DUP7 ADD MSTORE DUP3 PUSH1 0x20 SHR AND DUP1 PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x4831 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND PUSH2 0x100 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0x27F9 PUSH2 0x375E JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH2 0x180 DUP6 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MLOAD AND PUSH2 0x1A0 DUP6 ADD MSTORE ADD MLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x29EC JUMPI JUMPDEST POP PUSH2 0x120 PUSH1 0xE0 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x220 DUP4 ADD MSTORE PUSH2 0x29CA JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x220 PUSH2 0x292C PUSH2 0x28DD DUP4 MLOAD PUSH2 0x240 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x260 DUP7 ADD SWAP1 PUSH2 0x349A JUMP JUMPDEST PUSH2 0x28F9 PUSH1 0x20 DUP6 ADD MLOAD SWAP2 PUSH1 0x1F NOT SWAP3 DUP4 DUP9 DUP4 SUB ADD PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1A0 DUP3 ADD MLOAD AND PUSH2 0x1C0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1C0 DUP3 ADD MLOAD AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x29E1 PUSH2 0x29D5 PUSH2 0x485B JUMP JUMPDEST DUP1 PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x48DF JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x28B6 JUMP JUMPDEST PUSH2 0x2A07 SWAP2 POP PUSH2 0x1A0 RETURNDATASIZE PUSH2 0x1A0 GT PUSH2 0x1A00 JUMPI PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x2886 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2A37 JUMPI JUMPDEST DUP2 PUSH2 0x2A28 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x2759 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A1B JUMP JUMPDEST PUSH2 0x2A53 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x2700 JUMP JUMPDEST PUSH2 0x2A6F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x26AB JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2A8F PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2A98 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2AC5 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x2B21 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 MLOAD SWAP2 DUP4 SHR AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C15 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x2C36 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH2 0x120 DUP4 ADD SWAP1 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x40 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP3 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH1 0xC0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x2CB9 PUSH2 0x2CAA PUSH1 0xE0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x100 DUP2 ADD SWAP10 PUSH0 DUP12 MSTORE PUSH2 0x2C9F PUSH2 0x3E33 JUMP JUMPDEST SWAP3 DUP4 DUP3 SWAP4 MSTORE MSTORE PUSH2 0x3EBF JUMP JUMPDEST SWAP2 DUP3 DUP7 MSTORE DUP2 DUP13 MSTORE DUP1 DUP8 MSTORE PUSH2 0x3FB9 JUMP JUMPDEST DUP11 MSTORE DUP4 MSTORE DUP6 MSTORE DUP1 DUP7 MSTORE SWAP8 PUSH2 0x2CE9 PUSH2 0x2CDC PUSH2 0x2CD2 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x3C6 DUP11 PUSH2 0x366F JUMP JUMPDEST SWAP10 PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 SWAP10 DUP11 DUP3 MUL DUP3 ISZERO SWAP12 DUP4 DUP3 DIV EQ DUP13 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP12 PUSH8 0xDE111A6B7DE4000 DUP1 DUP6 MUL SWAP5 DUP6 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP12 DUP1 SWAP2 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x2E43 JUMPI JUMPDEST POP POP POP PUSH2 0x2E34 JUMPI DUP9 PUSH2 0x2DC7 PUSH2 0x2DB8 PUSH2 0x2DD1 SWAP7 PUSH2 0x2DAE SWAP6 DUP12 DUP6 PUSH2 0x2DE0 SWAP16 PUSH2 0x2D88 SWAP1 PUSH2 0x2DD6 SWAP16 PUSH2 0x2DB3 SWAP16 PUSH2 0x2D75 SWAP1 PUSH2 0x3C6 PUSH2 0x2D6D PUSH2 0x2D7E SWAP5 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH2 0x366F JUMP JUMPDEST SWAP15 DUP16 SWAP1 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP13 DUP14 SWAP5 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP12 DUP13 SWAP4 MLOAD SWAP8 MLOAD SWAP10 MLOAD PUSH2 0x2DAE PUSH2 0x2DA1 DUP7 PUSH2 0xD2C DUP7 PUSH2 0x364B JUMP JUMPDEST PUSH2 0x4D1 DUP7 PUSH2 0xD2C DUP8 PUSH2 0x366F JUMP JUMPDEST PUSH2 0x4D6A JUMP JUMPDEST PUSH2 0x4DD5 JUMP JUMPDEST SWAP3 PUSH2 0x2DAE DUP5 PUSH2 0xE4B DUP12 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x18A5 DUP7 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x40F2 JUMP JUMPDEST MLOAD TIMESTAMP SWAP1 TIMESTAMP SWAP1 PUSH2 0x421A JUMP JUMPDEST POP PUSH2 0x2E0A PUSH32 0x0 PUSH2 0x44A9 JUMP JUMPDEST POP PUSH2 0xE5C PUSH32 0x0 PUSH2 0x4612 JUMP JUMPDEST PUSH4 0x4F512CB PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP DUP11 DUP11 DUP2 PUSH2 0x2D32 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x35C6 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2EDA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH4 0xD6234725 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 PUSH1 0x8 SLOAD DUP2 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2F31 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2F3A PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2F66 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP2 PUSH2 0x2F74 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 PUSH1 0x24 PUSH1 0x20 DUP6 ADD SWAP4 PUSH1 0x7 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x24 ADD SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2FF0 JUMPI DUP5 PUSH1 0x80 CALLDATASIZE PUSH1 0x63 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x2 SWAP1 PUSH2 0x2FB2 PUSH2 0x3DEE JUMP JUMPDEST MLOAD EQ DUP1 PUSH2 0x2FDF JUMPI JUMPDEST DUP1 PUSH2 0x2FCD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO SWAP1 DUP2 ISZERO EQ PUSH2 0x2FC0 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2FBA JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP5 CALLDATASIZE SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3007 DUP3 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x3010 DUP6 PUSH2 0x328F JUMP JUMPDEST DUP3 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP7 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 SWAP4 DUP6 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x307F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x30D9 DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x3106 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x3149 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x3132 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x317A PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0x3182 PUSH2 0x3BD6 JUMP JUMPDEST PUSH2 0x318A PUSH2 0x3C73 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x31EE SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x31F6 PUSH2 0x4B05 JUMP JUMPDEST PUSH2 0x3201 PUSH1 0x4 CALLDATALOAD PUSH2 0x4612 JUMP JUMPDEST PUSH2 0x927 PUSH2 0x3C73 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x337C DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x338A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33B3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33A5 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x946 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x33F7 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x3328 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x5CB JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3486 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3478 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34B9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34AB JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34EC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34DE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3513 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3579 PUSH1 0x40 DUP1 MLOAD SWAP3 PUSH2 0x3557 DUP5 PUSH2 0x32DC JUMP JUMPDEST PUSH2 0x3560 DUP2 PUSH2 0x3527 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x356E PUSH1 0x20 DUP3 ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x35AF JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x359B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3590 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3643 JUMPI JUMPDEST DUP2 PUSH2 0x3637 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x362A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x36AB DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x36B9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x36E2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x36D4 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3747 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x376B DUP3 PUSH2 0x32A3 JUMP JUMPDEST DUP2 PUSH1 0x60 PUSH1 0x6 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP4 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF DUP2 PUSH1 0xC0 SHR AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xE0 SHR SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x5CB JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x37BF DUP5 PUSH2 0x32BF JUMP JUMPDEST SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x37D0 DUP2 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x37D9 DUP3 PUSH2 0x35B9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x37E7 PUSH1 0x20 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x37F8 PUSH1 0x40 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3809 PUSH1 0x60 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0x38A5 SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x3877 DUP6 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3889 PUSH2 0x140 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x389B PUSH2 0x160 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x3922 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x3930 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3959 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x394B JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x5CB JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x5CB JUMPI DUP4 PUSH2 0x39C9 SWAP2 DUP7 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP3 ADD DUP6 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP1 PUSH2 0x39F0 DUP3 PUSH2 0x334A JUMP JUMPDEST SWAP3 PUSH1 0x40 PUSH2 0x3A00 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP4 DUP6 MSTORE DUP2 DUP6 ADD SWAP1 DUP3 PUSH1 0x60 DUP1 SWAP7 MUL DUP6 ADD ADD SWAP4 DUP11 DUP6 GT PUSH2 0x5CB JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x3A59 JUMPI POP POP POP POP POP POP SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3A42 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST DUP6 DUP4 DUP13 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH2 0x3A6E DUP3 PUSH2 0x32DC JUMP JUMPDEST DUP4 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP3 MSTORE DUP5 DUP5 ADD MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI DUP3 DUP7 SWAP3 DUP4 DUP11 SWAP6 ADD MSTORE PUSH2 0x3AA3 DUP6 DUP8 ADD PUSH2 0x35B9 JUMP JUMPDEST DUP6 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x3A1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x3AF8 DUP2 PUSH2 0x32DC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5CB JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x4D DUP2 GT PUSH2 0x4F7 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3B9C JUMPI JUMPDEST POP ISZERO PUSH2 0x3B8D JUMPI JUMP JUMPDEST PUSH4 0x486AA307 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3BCE JUMPI JUMPDEST DUP2 PUSH2 0x3BB7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3BC8 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3B85 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3BAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8380EDB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3C39 JUMPI JUMPDEST POP PUSH2 0x3C2A JUMPI JUMP JUMPDEST PUSH4 0x3915D7F9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C6B JUMPI JUMPDEST DUP2 PUSH2 0x3C54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3C65 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3C23 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3C47 JUMP JUMPDEST PUSH2 0x3C7B PUSH2 0x4C48 JUMP JUMPDEST ISZERO PUSH2 0x3C82 JUMPI JUMP JUMPDEST PUSH3 0xF656AD PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 PUSH2 0x3DE3 JUMPI POP PUSH2 0x3CCE PUSH0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP2 DUP5 DUP4 PUSH1 0x4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP6 SWAP4 DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x3DA4 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP3 SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0x26F8AA21 PUSH1 0xE2 SHL DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3D6E JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH4 0x23DADA53 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3D9D JUMPI JUMPDEST PUSH2 0x3D85 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3D96 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3D56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D7B JUMP JUMPDEST SWAP3 SWAP5 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x3DDC JUMPI JUMPDEST PUSH2 0x3DBE DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP5 SWAP3 SWAP1 DUP5 SWAP1 PUSH1 0x64 PUSH2 0x3D1C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3DB4 JUMP JUMPDEST SWAP2 POP POP CALLER SUB PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x3E20 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3E9F JUMPI JUMPDEST POP PUSH2 0x3717 PUSH2 0x3E99 PUSH2 0x14B9 PUSH2 0x3E99 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4CEA JUMP JUMPDEST PUSH2 0x3EB4 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST POP POP SWAP1 POP SWAP1 PUSH0 PUSH2 0x3E86 JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3FA9 JUMPI SWAP1 JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3F99 JUMPI SWAP2 JUMPDEST PUSH2 0x3717 PUSH2 0x3F40 DUP5 PUSH2 0xE4B DUP6 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP4 PUSH2 0xE4B PUSH2 0x3F72 DUP3 PUSH2 0xE4B DUP8 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x3F0F JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x3EE7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP4 PUSH2 0xE4B PUSH2 0x3FC9 SWAP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x3FDA PUSH2 0x3FD5 DUP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x4EAB JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH18 0xB7ABC627050305ADF14A3D9E40000000000 DIV SWAP3 PUSH10 0xD3C21BCECCEDA1000000 SWAP5 DUP6 DUP6 ADD SWAP1 DUP2 DUP7 GT PUSH2 0x4F7 JUMPI PUSH2 0x4033 PUSH8 0xDE0B6B3A7640000 SWAP3 DUP4 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x4042 DUP4 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP8 PUSH2 0x405A DUP8 DUP5 PUSH2 0x4D48 JUMP JUMPDEST SWAP1 DUP9 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x406E SWAP2 PUSH2 0x4D48 JUMP JUMPDEST SWAP2 DUP2 DUP4 MUL SWAP3 DUP1 DUP5 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x40C0 PUSH2 0x40C5 SWAP3 PUSH2 0x4097 DUP10 PUSH2 0x2000 PUSH2 0x40CB SWAP8 PUSH2 0x4EAB JUMP JUMPDEST PUSH2 0x40A0 DUP8 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH2 0x40AE DUP10 PUSH2 0xD2C DUP9 PUSH2 0x364B JUMP JUMPDEST SWAP1 PUSH2 0x40B9 DUP5 DUP13 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH2 0x366F JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH2 0x4104 DUP4 PUSH2 0x4DFF JUMP JUMPDEST AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH2 0x4120 DUP4 PUSH2 0x4DFF JUMP JUMPDEST PUSH1 0x80 SHL AND OR PUSH1 0x8 SSTORE PUSH1 0x40 SWAP1 PUSH32 0xF36B0FD05D55CA91FB3EBD8493ADF78A3405A11C145C054A092D0994B665B637 DUP3 DUP1 MLOAD DUP6 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 DUP3 MLOAD SWAP4 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x419C DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5669727475616C42616C616E6365735570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH2 0x420F SWAP1 PUSH2 0x32F8 JUMP JUMPDEST JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 SWAP2 SWAP1 DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x44A0 JUMPI JUMPDEST PUSH2 0x4491 JUMPI PUSH2 0x4233 PUSH2 0x375E JUMP JUMPDEST SWAP2 PUSH2 0x423D DUP6 PUSH2 0x48DF JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP4 DUP5 MLOAD SWAP3 PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP5 MSTORE ADDRESS PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4487 JUMPI PUSH0 SWAP2 PUSH2 0x4452 JUMPI JUMPDEST POP ISZERO PUSH2 0x443E JUMPI POP PUSH2 0x43E7 SWAP3 SWAP2 PUSH2 0x43D9 SWAP2 PUSH2 0x42B0 PUSH2 0x485B JUMP JUMPDEST SWAP10 PUSH2 0x42BA DUP12 PUSH2 0x48DF JUMP JUMPDEST SWAP9 JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x42D3 DUP13 PUSH2 0x4E2A JUMP JUMPDEST AND DUP3 MSTORE PUSH2 0x42DF DUP4 PUSH2 0x4E2A JUMP JUMPDEST DUP2 DUP9 DUP5 ADD SWAP2 AND DUP2 MSTORE PUSH28 0xFFFFFFFF000000000000000000000000000000000000000000000000 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH2 0x4326 DUP8 PUSH2 0x4E5A JUMP JUMPDEST SWAP4 DUP14 DUP7 ADD SWAP6 PUSH4 0xFFFFFFFF DUP1 SWAP7 AND DUP8 MSTORE PUSH2 0x433E DUP11 PUSH2 0x4E5A JUMP JUMPDEST SWAP6 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE MLOAD AND SWAP3 MLOAD PUSH1 0x60 SHL AND SWAP4 MLOAD PUSH1 0xC0 SHL AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL SWAP1 PUSH1 0xE0 SHL AND SWAP3 OR OR OR PUSH1 0x6 SSTORE PUSH32 0xA18562EA402E57CC2B437F8D7A139C6C38958ADC1ECBB706EC37A7A64FF6E7A5 DUP2 DUP11 PUSH2 0x43B3 DUP7 DUP7 DUP14 MLOAD SWAP5 DUP6 SWAP5 DUP6 SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG1 DUP8 MLOAD SWAP9 DUP10 SWAP6 DUP7 ADD SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP6 MSTORE DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5072696365526174696F53746174655570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP6 SWAP8 SWAP2 PUSH2 0x43D9 SWAP2 DUP4 PUSH2 0x43E7 SWAP6 SWAP5 SWAP9 SWAP11 PUSH2 0x42BC JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x4480 JUMPI JUMPDEST PUSH2 0x4469 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x447A SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x4298 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x445F JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x2CA4094F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP TIMESTAMP DUP2 LT PUSH2 0x4227 JUMP JUMPDEST PUSH8 0x29A2241AF62C0000 DUP2 GT PUSH2 0x4603 JUMPI PUSH3 0x1E6E9 PUSH8 0xDE0B6B3A7640000 SWAP2 DIV DUP2 SUB SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x44D9 DUP2 PUSH2 0x4831 JUMP JUMPDEST SWAP1 PUSH2 0x44E3 DUP2 PUSH2 0x4DFF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x7 SLOAD SWAP2 PUSH1 0x20 SHL AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT AND OR PUSH1 0x7 SSTORE PUSH1 0x40 PUSH32 0x7EE46B38BE05F748DE1C0FB2002AC48FE50A26A0017C654A92C0BF9228058847 DUP2 DUP1 MLOAD DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MLOAD SWAP3 DUP5 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x458F DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x45E6 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4461696C79507269636553686966744578706F6E656E74557064617465640000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x45FA JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x3717 SWAP1 PUSH2 0x32F8 JUMP JUMPDEST PUSH4 0x2B5B4F35 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT PUSH2 0x4741 JUMPI PUSH1 0x7 SLOAD PUSH32 0xFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH28 0xFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 PUSH1 0xA0 SHL AND SWAP2 AND OR PUSH1 0x7 SSTORE PUSH32 0x74D468C8E414C37C502176A45CCE93C85EAA0ABF608E40641DC6664CA5EFCAB0 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x46D7 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x43656E74657265646E6573734D617267696E5570646174656400000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH4 0x7304FAC7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x475E TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST AND DUP1 PUSH4 0xFFFFFFFF NOT PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x32A9FD44BDF167703F584BD25098494D3D18A4653A2D97116D28DA05209444D4 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x47D8 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4C61737454696D657374616D7055706461746564000000000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 DUP2 DUP4 GT PUSH2 0x4F7 JUMPI PUSH3 0x1E6E9 DUP1 DUP5 MUL SWAP4 DUP5 DIV EQ SWAP2 EQ OR ISZERO PUSH2 0x4F7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x3717 SWAP2 PUSH0 SWAP2 PUSH2 0x48C1 JUMPI JUMPDEST POP PUSH2 0x48BA DUP2 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP2 PUSH2 0x4E82 JUMP JUMPDEST PUSH2 0x48D5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x48B0 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4903 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x4A1E JUMPI JUMPDEST ISZERO PUSH2 0x4977 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x494E JUMP JUMPDEST PUSH2 0x4A83 SWAP1 PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 PUSH1 0xA0 SHR AND SWAP4 DUP3 PUSH4 0xFFFFFFFF DUP6 AND SWAP5 PUSH1 0x20 SHR AND SWAP3 DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4FDE JUMP JUMPDEST SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x4AE5 JUMPI JUMPDEST POP PUSH2 0x4A83 DUP3 PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4AFA SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP SWAP1 PUSH0 PUSH2 0x4ADB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4B60 SWAP2 PUSH0 SWAP2 PUSH2 0x4B7F JUMPI JUMPDEST POP PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4B6F JUMPI JUMPDEST POP POP PUSH2 0x420F PUSH2 0x4750 JUMP JUMPDEST PUSH2 0x4B78 SWAP2 PUSH2 0x40F2 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x4B65 JUMP JUMPDEST PUSH2 0x4B93 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4B5A JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x4BA8 DUP4 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4BB6 JUMPI POP POP POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0x4BBF DUP4 PUSH2 0x364B JUMP JUMPDEST MLOAD ISZERO PUSH2 0x4C3E JUMPI PUSH2 0x4BDE PUSH2 0x14B9 PUSH2 0x4BE5 SWAP4 PUSH2 0x4BD8 DUP7 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x38D6 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x4C14 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C0F SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C38 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x4CCC JUMPI JUMPDEST POP PUSH2 0x4CC6 PUSH1 0x8 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST POP LT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x4CE0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4C9A JUMP JUMPDEST PUSH1 0x1 DUP2 MLOAD PUSH2 0x4CF7 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x4D00 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x4D3B JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x4 SWAP4 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33CD77E7 PUSH1 0xE1 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI JUMPDEST POP SWAP1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D52 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 DUP1 DUP4 MUL DUP4 ISZERO SWAP2 DUP5 DUP3 DIV EQ DUP3 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH8 0xDE111A6B7DE4000 DUP1 DUP7 MUL SWAP6 DUP7 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP2 SWAP1 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x4DC9 JUMPI JUMPDEST POP POP POP PUSH2 0x4DBA JUMPI JUMP JUMPDEST PUSH4 0x3D9F09DF PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP PUSH0 DUP1 DUP1 PUSH2 0x4DB1 JUMP JUMPDEST PUSH2 0x4DF5 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0xD2C PUSH2 0x14B9 PUSH2 0x4DFB SWAP6 PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x4E13 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x80 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E43 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x60 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E6B JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E DUP7 PUSH2 0x1895 PUSH2 0x3717 SWAP9 DUP9 PUSH2 0x4EA6 SWAP9 PUSH2 0x4DD5 JUMP JUMPDEST PUSH2 0x531C JUMP JUMPDEST PUSH1 0x1 DUP1 DUP3 GT ISZERO PUSH2 0x4D37 JUMPI PUSH2 0x4F7A SWAP1 DUP1 DUP4 PUSH17 0x100000000000000000000000000000000 DUP2 LT ISZERO PUSH2 0x4FC7 JUMPI JUMPDEST DUP1 PUSH9 0x10000000000000000 PUSH1 0x4 SWAP3 LT ISZERO PUSH2 0x4FBA JUMPI JUMPDEST PUSH5 0x100000000 DUP2 LT ISZERO PUSH2 0x4FAD JUMPI JUMPDEST PUSH3 0x10000 DUP2 LT ISZERO PUSH2 0x4FA0 JUMPI JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x4F94 JUMPI JUMPDEST PUSH1 0x10 DUP2 LT ISZERO PUSH2 0x4F88 JUMPI JUMPDEST LT ISZERO PUSH2 0x4F81 JUMPI JUMPDEST PUSH1 0x3 MUL DUP2 SHR PUSH2 0x4F2F DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F3C DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F49 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F56 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F63 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F70 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD SWAP1 SHR DUP1 SWAP3 PUSH2 0x38E9 JUMP JUMPDEST DUP2 GT SWAP1 SUB SWAP1 JUMP JUMPDEST DUP2 SHL PUSH2 0x4F20 JUMP JUMPDEST DUP2 SHR SWAP2 PUSH1 0x2 SHL SWAP2 PUSH2 0x4F19 JUMP JUMPDEST PUSH1 0x8 SHR SWAP2 DUP2 SHL SWAP2 PUSH2 0x4F0F JUMP JUMPDEST PUSH1 0x10 SHR SWAP2 PUSH1 0x8 SHL SWAP2 PUSH2 0x4F04 JUMP JUMPDEST PUSH1 0x20 SHR SWAP2 PUSH1 0x10 SHL SWAP2 PUSH2 0x4EF8 JUMP JUMPDEST PUSH1 0x40 SHR SWAP2 PUSH1 0x20 SHL SWAP2 PUSH2 0x4EEA JUMP JUMPDEST POP PUSH9 0x10000000000000000 SWAP1 POP PUSH1 0x80 DUP5 SWAP1 SHR PUSH2 0x4ED5 JUMP JUMPDEST SWAP2 SWAP5 SWAP6 SWAP3 SWAP4 SWAP1 SWAP6 PUSH0 SWAP5 PUSH2 0x4FF0 TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP5 AND SWAP9 DUP3 DUP7 AND DUP11 DUP2 EQ PUSH2 0x530E JUMPI DUP12 DUP3 SWAP12 PUSH2 0x5010 PUSH2 0x375E JUMP JUMPDEST SWAP3 DUP7 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP5 DUP8 MLOAD AND SWAP5 PUSH2 0x504A DUP14 DUP3 PUSH1 0x20 DUP12 ADD MLOAD AND SWAP10 PUSH1 0x40 DUP2 ADD SWAP11 PUSH1 0x60 DUP7 DUP14 MLOAD AND SWAP3 ADD SWAP10 DUP7 DUP12 MLOAD AND SWAP4 PUSH2 0x55FD JUMP JUMPDEST AND SWAP7 MLOAD AND LT SWAP3 DUP4 PUSH2 0x5301 JUMPI JUMPDEST POP POP POP PUSH2 0x518C JUMPI JUMPDEST POP POP POP SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x507A DUP11 DUP13 DUP10 PUSH2 0x4B9D JUMP JUMPDEST SWAP7 SWAP1 SWAP2 AND GT PUSH2 0x508C JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 POP PUSH2 0x50A1 DUP5 DUP7 DUP11 PUSH2 0x4E82 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP7 DUP8 DUP3 MUL SWAP2 DUP1 DUP4 DIV DUP10 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x50C8 PUSH2 0x50F2 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP6 DUP10 ISZERO PUSH2 0x5172 JUMPI PUSH2 0x50E2 PUSH2 0x50DB DUP13 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP8 JUMPDEST DUP11 ISZERO PUSH2 0x516A JUMPI POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND DUP6 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP8 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x5122 SWAP3 PUSH2 0x4DF5 PUSH2 0x5116 SWAP3 DUP9 SWAP5 PUSH2 0x56B3 JUMP JUMPDEST DIV SWAP6 PUSH2 0x4DF5 DUP5 DUP9 PUSH2 0x38AC JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A763FFFF NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI PUSH2 0x514D SWAP4 PUSH2 0x5147 DUP8 PUSH2 0x1F74 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST DIV PUSH2 0x3AFE JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x5165 JUMPI SWAP1 JUMPDEST SWAP1 SWAP2 PUSH1 0x1 SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x5084 JUMP JUMPDEST PUSH2 0x5155 JUMP JUMPDEST SWAP1 POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST PUSH2 0x5185 PUSH2 0x517E DUP13 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x50E5 JUMP JUMPDEST DUP3 SWAP12 POP PUSH2 0x51A1 SWAP3 SWAP2 SWAP5 SWAP13 POP DUP1 SWAP4 SWAP11 POP DUP9 PUSH2 0x4B9D JUMP JUMPDEST SWAP10 SWAP1 SWAP2 DUP11 ISZERO PUSH2 0x52EA JUMPI PUSH2 0x51CE SWAP1 PUSH2 0x51B7 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP3 DUP2 DUP5 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 DUP1 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP6 SUB PUSH2 0x4F7 JUMPI PUSH2 0x5210 DUP6 PUSH1 0x2 SHL DUP3 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0x1BC16D674EC7FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x522C SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH15 0xC097CE7BC90715B34B9F1000000000 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x525B SWAP3 PUSH2 0x5255 PUSH2 0x4DF5 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP1 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x4F7 JUMPI PUSH2 0x52AB PUSH2 0xE4B SWAP2 PUSH2 0x52B2 SWAP5 PUSH1 0x1 SHL SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP4 DUP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP8 ISZERO PUSH2 0x52D8 JUMPI SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP8 JUMPDEST SWAP8 SWAP9 PUSH1 0x1 SWAP8 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH0 DUP1 PUSH2 0x505E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x52C7 JUMP JUMPDEST SWAP1 PUSH2 0x51CE SWAP1 PUSH2 0x52F8 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 PUSH2 0x51BC JUMP JUMPDEST MLOAD AND GT SWAP1 POP PUSH0 DUP7 DUP2 PUSH2 0x5056 JUMP JUMPDEST POP SWAP9 POP PUSH0 SWAP8 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x202A JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5388 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x539A DUP4 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x53C5 JUMPI JUMPDEST POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x540B JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x53F0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0x3717 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5469 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x547E DUP2 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x54A6 JUMPI POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x54ED JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x54D2 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x557C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x544 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x5572 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x3513 JUMPI DUP1 PUSH2 0x5599 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x55B0 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x55CB JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x55D5 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP1 DUP3 AND SUB SWAP2 SWAP1 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP3 DUP5 AND DUP2 LT PUSH2 0x561F JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 DUP6 AND LT ISZERO PUSH2 0x56AB JUMPI DUP4 DUP3 PUSH2 0x563A PUSH2 0x5648 SWAP7 PUSH2 0x5641 SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP4 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 AND PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 MUL SWAP4 DUP3 DUP6 DIV DUP3 EQ DUP4 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x568E PUSH2 0x5694 SWAP2 PUSH2 0x5689 DUP7 PUSH2 0x3717 SWAP9 PUSH2 0x38E9 JUMP JUMPDEST PUSH2 0x56B3 JUMP JUMPDEST DUP5 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP2 DUP2 DUP1 DUP3 LT SWAP2 XOR MUL XOR DUP2 DUP1 DUP3 GT SWAP2 XOR MUL XOR PUSH2 0x4E2A JUMP JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x56CA JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x56E7 JUMPI POP POP DUP1 PUSH2 0x4DFB SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x570B JUMPI POP PUSH2 0x5704 DUP3 PUSH2 0x4DFB SWAP4 PUSH2 0x38D6 JUMP JUMPDEST DIV DUP1 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 POP PUSH2 0x5716 SWAP2 PUSH2 0x577A JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x4F7 JUMPI DUP2 LT ISZERO PUSH2 0x5751 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5F26 JUMPI DUP2 ISZERO PUSH2 0x5F20 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x5F12 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x5F03 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x5EF2 JUMPI JUMPDEST ISZERO PUSH2 0x5BA5 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x5803 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF NOT ADD DUP4 MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH9 0x238FD42C5CF03FFFF NOT DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x5B92 JUMPI JUMPDEST ISZERO PUSH2 0x5B83 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x5B70 JUMPI JUMPDEST ISZERO PUSH2 0x5B61 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x5B52 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x5B05 JUMPI PUSH9 0x6F05B59D3B1FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x5AE2 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x5ABE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x5A9C JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x5A7A JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x5A59 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x5A38 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x5A17 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x59F6 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x3717 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x5756 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5977 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5965 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5953 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 DUP4 SWAP2 PUSH9 0xAD78EBC5AC61FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x594A JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5938 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5926 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5914 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH9 0xAD78EBC5AC61FFFFFF NOT ADD PUSH2 0x5902 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x5B3F JUMPI PUSH9 0x3782DACE9D8FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x58A7 JUMP JUMPDEST PUSH4 0xD4794EFD PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5898 JUMP JUMPDEST PUSH4 0xA2F9F7E3 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5888 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x5EDC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x5EB1 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x5E90 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x5E6D JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x5E4D JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x5E2D JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x5E0D JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x5DED JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x5DD6 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x5DB6 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x5D96 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x5D77 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x5D58 JUMPI JUMPDEST POP PUSH2 0x5D05 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 DUP1 DUP3 ADD SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x5D53 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x5872 JUMP JUMPDEST PUSH2 0x5D4D JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CDF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CCB JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CB7 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CA3 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C7B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C67 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C52 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C3D JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x5C25 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x5C04 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x5BE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x5EE8 SWAP2 POP PUSH2 0x5756 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x5BBA JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x57C0 JUMP JUMPDEST PUSH4 0xD8317311 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0x11380F PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 PUSH1 0x3 EQ PUSH2 0x5F7F JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x5F6B JUMPI PUSH1 0x2 EQ PUSH2 0x5F62 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x3717 SWAP2 PUSH2 0x4D48 JUMP JUMPDEST POP PUSH2 0x4DFB SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSIZE GT DUP10 ORIGIN 0x26 PUSH17 0x11C7CF97006BC40463D53AEA2D566EEECA 0xB5 0xCB GAS KECCAK256 0xCC CALL ADD SHL 0xCA PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER 0xC2 JUMPI GAS 0xE SWAP15 MSIZE EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"1970:42991:58:-:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;7127:11;;1970:42991;;;7140:13;1970:42991;;;7140:13;;1970:42991;7127:11;1970:42991;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;-1:-1:-1;;;1970:42991:58;;3401:45:51;;;:::i;:::-;1970:42991:58;3393:53:51;3467:51;;;:::i;:::-;1970:42991:58;3456:62:51;1970:42991:58;;;;;3542:22:51;3528:36;;1970:42991:58;3528:36:51;1970:42991:58;3591:25:51;;3574:42;1970:42991:58;3574:42:51;3644:13;1970:42991:58;3627:30:51;1970:42991:58;;4204:80:51;1970:42991:58;4204:80:51;;2079:95;;;;1970:42991:58;2079:95:51;;;1970:42991:58;2079:95:51;;;3644:13;1970:42991:58;2079:95:51;;;4278:4;1970:42991:58;2079:95:51;;;1970:42991:58;4204:80:51;;1970:42991:58;;;;;;;;;;;;;;;;;;;4194:91:51;;1970:42991:58;3667:48:51;4278:4;1970:42991:58;3725:27:51;409:14:37;;;;1970:42991:58;;;-1:-1:-1;;;;;1970:42991:58;;;;2265:18:33;1970:42991:58;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;2265:18:33;1970:42991:58;;;;;2265:18:33;1970:42991:58;;;;-1:-1:-1;;;;;1970:42991:58;;;;2293:22:33;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;2265:18:33;1970:42991:58;;;;;2293:22:33;1970:42991:58;;750:14:21;;;;7217:10:58;1347:46:23;;-1:-1:-1;;;;;1970:42991:58;;943:28:35;939:79;;1028:14;;1970:42991:58;;;-1:-1:-1;;;;;1970:42991:58;;;;1156:21:30;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;2265:18:33;1970:42991:58;;;;;1156:21:30;1970:42991:58;;;;;;7292:27;;:70;;;;;1970:42991;7292:116;;;;1970:42991;7292:182;;;;1970:42991;7292:248;;;;1970:42991;7292:312;;;;1970:42991;7275:576;;;1970:42991;;;;7949:43;;1970:42991;;;;8002:43;;1970:42991;;;;8055:49;;1970:42991;;;;8115:68;;1970:42991;;;;-1:-1:-1;;;;;1970:42991:58;8193:56;;1970:42991;;;;;;8260:61;;1970:42991;;;;;8331:61;;638:5:31;8795:92:58;;1970:42991;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:37;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;750:14:21;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;1347:46:23;1970:42991:58;;;;;1028:14:35;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8795:92;1970:42991;;;;;;;;;;7949:43;1970:42991;;;;;;;;;;;;;;;8002:43;1970:42991;;;;;;;;;;;;;;;8055:49;1970:42991;;;;;;;;;;8115:68;1970:42991;;;;;;;;;;8193:56;1970:42991;;;;;;;;;;8260:61;1970:42991;;;;;;;;;;8331:61;1970:42991;;;;;;;;;;;;;7275:576;7819:21;;;-1:-1:-1;7819:21:58;2293:22:33;-1:-1:-1;7819:21:58;7292:312;1970:42991;;;;;;-1:-1:-1;7556:48:58;7292:312;;;:248;1970:42991;;;;;;;;-1:-1:-1;;;7292:248:58;;:182;1970:42991;;;;;;;7424:50;7292:182;;;:116;1970:42991;;;;7378:30;;-1:-1:-1;7292:116:58;;:70;1970:42991;;;;7335:27;;-1:-1:-1;7292:70:58;;1970:42991;;;;-1:-1:-1;1970:42991:58;;;;;1156:21:30;-1:-1:-1;1970:42991:58;;;-1:-1:-1;;1970:42991:58;;;;-1:-1:-1;;1970:42991:58;;;;;;;4204:80:51;;;;;1970:42991:58;;;;;;;;;;;;1156:21:30;1970:42991:58;;;;;;;;;;2265:18:33;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:30;-1:-1:-1;1970:42991:58;;-1:-1:-1;1970:42991:58;;;;1156:21:30;1970:42991:58;;;;;;;;;;;;;;;;;;1156:21:30;1970:42991:58;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;-1:-1:-1;1970:42991:58;;;;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;1970:42991:58;;2293:22:33;1970:42991:58;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;2293:22:33;1970:42991:58;;-1:-1:-1;1970:42991:58;939:79:35;994:13;;;-1:-1:-1;994:13:35;2293:22:33;-1:-1:-1;994:13:35;1970:42991:58;;;;-1:-1:-1;1970:42991:58;;;;;2293:22:33;-1:-1:-1;1970:42991:58;;-1:-1:-1;1970:42991:58;;-1:-1:-1;1970:42991:58;-1:-1:-1;;1970:42991:58;;;;;;4204:80:51;1970:42991:58;4204:80:51;;;;;;;1970:42991:58;;;;;;;;;;;;2293:22:33;1970:42991:58;;;;;;;;;;2265:18:33;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:22:33;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;2265:18:33;-1:-1:-1;1970:42991:58;;;-1:-1:-1;;;;;;;;;;;;;1970:42991:58;;;-1:-1:-1;;1970:42991:58;;;;;;;4204:80:51;;;;;1970:42991:58;;;;;;;;;;;;2265:18:33;1970:42991:58;;;;;;;;;;2265:18:33;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:18:33;-1:-1:-1;1970:42991:58;;;-1:-1:-1;;;;;;;;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;-1:-1:-1;1970:42991:58;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;;1970:42991:58;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;4204:80:51;1970:42991:58;;-1:-1:-1;;1970:42991:58;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;2887:340:47:-;1970:42991:58;;3032:2:47;;3010:24;;;3032:2;;;1970:42991:58;1854:2:47;1970:42991:58;;1840:16:47;1836:72;;1970:42991:58;;;;;2079:95:51;1970:42991:58;;;;;;1949:36:47;;3050:27;:::o;1970:42991:58:-;;;;;;;;;;1949:36:47;3050:27;:::o;1836:72::-;1970:42991:58;;;;1879:18:47;;;;;;;;;;;;1970:42991:58;;;;;;;;;;;;;;;;3432:13:51;1970:42991:58;;;;;;1854:2:47;1970:42991:58;-1:-1:-1;;1970:42991:58;;;1879:18:47;;;;3006:215;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;3432:13:51;1970:42991:58;;;;;;;;;;;;;;3006:215:47;1970:42991:58;;;;;;;;;;;3006:215:47;1970:42991:58;;;;;;;;;;;;;;;;3432:13:51;1970:42991:58;;;;;;;;;;;;;;;;;3432:13:51;1970:42991:58;1390:66:47;3168:42;:::o;1970:42991:58:-;;;;-1:-1:-1;1970:42991:58;;;;;4204:80:51;;;;;1970:42991:58;;3432:13:51;1970:42991:58;;;3432:13:51;1970:42991:58;;3432:13:51;1970:42991:58;;;;;;;;;;;;;;;;;;;;;3432:13:51;1970:42991:58;1390:66:47;3168:42;:::o;1970:42991:58:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;3432:13:51;1970:42991:58;;;;;3432:13:51;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:51;1970:42991:58;;;;;;;;;;;;;;2887:340:47;1970:42991:58;;3032:2:47;;3010:24;;;3032:2;;;1970:42991:58;1854:2:47;1970:42991:58;;1840:16:47;1836:72;;1970:42991:58;;;;;2079:95:51;1970:42991:58;;;;;;1949:36:47;;3050:27;:::o;3006:215::-;1970:42991:58;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;3006:215:47;1970:42991:58;;;;;;;;;;;3006:215:47;1970:42991:58;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1970:42991:58;;;;;;;;;;;;;1390:66:47;;3168:42::o;1970:42991:58:-;;;;-1:-1:-1;1970:42991:58;;;;;4204:80:51;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:47;3168:42;:::o;1970:42991:58:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":12943,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_48120":{"entryPoint":12899,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_48122":{"entryPoint":12921,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":13607,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":13336,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":14599,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn_memory_ptr_fromMemory":{"entryPoint":14712,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dynt_array_struct_TokenInfo_dynt_array_uint256_dynt_array_uint256_dyn_fromMemory":{"entryPoint":14750,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_array_uint256_dyn":{"entryPoint":13154,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":14065,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":13968,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_array_uint256_dyn_fromMemory":{"entryPoint":14106,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bool_fromMemory":{"entryPoint":13753,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":13250,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PoolConfig_fromMemory":{"entryPoint":14243,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PoolRoleAccounts_fromMemory":{"entryPoint":13627,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":15115,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":13517,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":13415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":13466,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":12863,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":13130,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":14508,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":14569,"id":null,"parameterSlots":2,"returnSlots":1},"checked_exp_rational_by_uint256":{"entryPoint":15140,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256":{"entryPoint":14550,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_48358":{"entryPoint":14521,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":15102,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint32":{"entryPoint":21991,"id":null,"parameterSlots":2,"returnSlots":1},"dispatch_internal_in_out":{"entryPoint":24372,"id":null,"parameterSlots":3,"returnSlots":1},"external_fun_getMaximumInvariantRatio":{"entryPoint":13389,"id":null,"parameterSlots":0,"returnSlots":0},"extract_byte_array_length":{"entryPoint":13697,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":13096,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_48123":{"entryPoint":12963,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_48184":{"entryPoint":12991,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_48278":{"entryPoint":13020,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_48375":{"entryPoint":13048,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_73037":{"entryPoint":13068,"id":null,"parameterSlots":1,"returnSlots":0},"fun_comparePrice":{"entryPoint":19818,"id":15867,"parameterSlots":2,"returnSlots":0},"fun_computeCenteredness":{"entryPoint":19357,"id":17468,"parameterSlots":3,"returnSlots":2},"fun_computeCurrentPriceRatio":{"entryPoint":18523,"id":15658,"parameterSlots":0,"returnSlots":1},"fun_computeCurrentVirtualBalances":{"entryPoint":19015,"id":15275,"parameterSlots":1,"returnSlots":3},"fun_computeCurrentVirtualBalances_48171":{"entryPoint":20446,"id":17117,"parameterSlots":6,"returnSlots":3},"fun_computeFourthRootPriceRatio":{"entryPoint":22013,"id":17552,"parameterSlots":5,"returnSlots":1},"fun_computeInvariant":{"entryPoint":19925,"id":16759,"parameterSlots":3,"returnSlots":1},"fun_computePriceRatio":{"entryPoint":20098,"id":17581,"parameterSlots":3,"returnSlots":1},"fun_computeTheoreticalPriceRatioAndBalances":{"entryPoint":16313,"id":16986,"parameterSlots":3,"returnSlots":4},"fun_divDown":{"entryPoint":16590,"id":4600,"parameterSlots":2,"returnSlots":1},"fun_domainSeparatorV4":{"entryPoint":18716,"id":9718,"parameterSlots":0,"returnSlots":1},"fun_ensureAuthenticatedByExclusiveRole":{"entryPoint":15504,"id":6990,"parameterSlots":2,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":15854,"id":7129,"parameterSlots":0,"returnSlots":0},"fun_ensurePoolWithinTargetRange":{"entryPoint":15475,"id":15912,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultIsInitialized":{"entryPoint":15154,"id":13609,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultIsLocked":{"entryPoint":15318,"id":13584,"parameterSlots":0,"returnSlots":0},"fun_fourthRootScaled18":{"entryPoint":18655,"id":17700,"parameterSlots":1,"returnSlots":1},"fun_getActionId":{"entryPoint":15026,"id":3389,"parameterSlots":1,"returnSlots":1},"fun_getPriceSettingsAdjustedByRates":{"entryPoint":16063,"id":16088,"parameterSlots":2,"returnSlots":3},"fun_getRealAndVirtualBalances":{"entryPoint":19080,"id":14587,"parameterSlots":0,"returnSlots":4},"fun_getTokenRate":{"entryPoint":19690,"id":16031,"parameterSlots":1,"returnSlots":1},"fun_getTokenRates":{"entryPoint":15923,"id":16009,"parameterSlots":0,"returnSlots":2},"fun_isPoolWithinTargetRange":{"entryPoint":19528,"id":15686,"parameterSlots":0,"returnSlots":1},"fun_mulDivUp":{"entryPoint":21276,"id":4644,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":19784,"id":4580,"parameterSlots":2,"returnSlots":1},"fun_pow":{"entryPoint":22394,"id":5077,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":22195,"id":4740,"parameterSlots":2,"returnSlots":1},"fun_setCenterednessMargin":{"entryPoint":17938,"id":15556,"parameterSlots":1,"returnSlots":0},"fun_setDailyPriceShiftExponent":{"entryPoint":17577,"id":15505,"parameterSlots":1,"returnSlots":1},"fun_setLastVirtualBalances":{"entryPoint":16626,"id":15311,"parameterSlots":2,"returnSlots":0},"fun_sqrt":{"entryPoint":20139,"id":10917,"parameterSlots":1,"returnSlots":1},"fun_startPriceRatioUpdate":{"entryPoint":16922,"id":15437,"parameterSlots":3,"returnSlots":1},"fun_throwError":{"entryPoint":21895,"id":9594,"parameterSlots":2,"returnSlots":0},"fun_toDailyPriceShiftExponent":{"entryPoint":18481,"id":17660,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback":{"entryPoint":21575,"id":7891,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_48163":{"entryPoint":21325,"id":7891,"parameterSlots":1,"returnSlots":1},"fun_toUint128":{"entryPoint":19967,"id":12013,"parameterSlots":1,"returnSlots":1},"fun_toUint32":{"entryPoint":20058,"id":12349,"parameterSlots":1,"returnSlots":1},"fun_toUint96":{"entryPoint":20010,"id":12125,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":13766,"id":6302,"parameterSlots":0,"returnSlots":1},"fun_tryRecover":{"entryPoint":21765,"id":9509,"parameterSlots":4,"returnSlots":3},"fun_updateTimestamp":{"entryPoint":18256,"id":15623,"parameterSlots":0,"returnSlots":0},"fun_updateVirtualBalances":{"entryPoint":19205,"id":15594,"parameterSlots":0,"returnSlots":0},"fun_useNonce":{"entryPoint":null,"id":7628,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":13948,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn_48128":{"entryPoint":13899,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn_48129":{"entryPoint":13935,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_PriceRatioState":{"entryPoint":14174,"id":null,"parameterSlots":0,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":13577,"id":null,"parameterSlots":1,"returnSlots":0},"wrapping_div_int256":{"entryPoint":22384,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_48421":{"entryPoint":22358,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"3012":[{"length":32,"start":2693},{"length":32,"start":3796},{"length":32,"start":3961},{"length":32,"start":4241},{"length":32,"start":6536}],"3329":[{"length":32,"start":15036}],"6845":[{"length":32,"start":2472},{"length":32,"start":3040},{"length":32,"start":4628},{"length":32,"start":12717},{"length":32,"start":15591}],"7091":[{"length":32,"start":820},{"length":32,"start":1611},{"length":32,"start":2254},{"length":32,"start":2832},{"length":32,"start":3176},{"length":32,"start":3562},{"length":32,"start":4447},{"length":32,"start":5768},{"length":32,"start":6133},{"length":32,"start":6846},{"length":32,"start":6923},{"length":32,"start":8345},{"length":32,"start":9297},{"length":32,"start":9851},{"length":32,"start":9928},{"length":32,"start":10025},{"length":32,"start":10326},{"length":32,"start":11098},{"length":32,"start":13793},{"length":32,"start":15181},{"length":32,"start":15339},{"length":32,"start":15864},{"length":32,"start":15950},{"length":32,"start":16739},{"length":32,"start":16968},{"length":32,"start":17750},{"length":32,"start":18081},{"length":32,"start":18338},{"length":32,"start":18549},{"length":32,"start":19107},{"length":32,"start":19231},{"length":32,"start":19554}],"9616":[{"length":32,"start":18773}],"9618":[{"length":32,"start":18977}],"9620":[{"length":32,"start":18726}],"9622":[{"length":32,"start":18852}],"9624":[{"length":32,"start":18890}],"9627":[{"length":32,"start":5897}],"9630":[{"length":32,"start":5938}],"13529":[{"length":32,"start":4827},{"length":32,"start":7301}],"13540":[{"length":32,"start":6363},{"length":32,"start":7093},{"length":32,"start":16156}],"13542":[{"length":32,"start":6396},{"length":32,"start":7131},{"length":32,"start":16206}],"13544":[{"length":32,"start":7169},{"length":32,"start":16245}],"13546":[{"length":32,"start":7208},{"length":32,"start":11750}],"13548":[{"length":32,"start":7247},{"length":32,"start":11792}],"13550":[{"length":32,"start":6987},{"length":32,"start":16065}],"13552":[{"length":32,"start":7027},{"length":32,"start":16105}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x3209 JUMPI POP DUP1 PUSH4 0x673D09A EQ PUSH2 0x3161 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x30B8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3061 JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2F18 JUMPI DUP1 PUSH4 0x105AE7AD EQ PUSH2 0x2EEA JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x2EA9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E8F JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2E4F JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2BE3 JUMPI DUP1 PUSH4 0x1D8A5E7E EQ PUSH2 0x2BB9 JUMPI DUP1 PUSH4 0x215666A8 EQ PUSH2 0x2B91 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2B0F JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2ADE JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x2A75 JUMPI DUP1 PUSH4 0x2C357688 EQ PUSH2 0x25B5 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x257B JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2560 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x2546 JUMPI DUP1 PUSH4 0x37899770 EQ PUSH2 0x2523 JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x24D8 JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x239F JUMPI DUP1 PUSH4 0x4EFD88C9 EQ PUSH2 0x2377 JUMPI DUP1 PUSH4 0x4F149B3F EQ PUSH2 0x2346 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x2303 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x225A JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x2206 JUMPI DUP1 PUSH4 0x569EE350 EQ PUSH2 0x21E4 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x21BB JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x2199 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x217A JUMPI DUP1 PUSH4 0x6BD838C7 EQ PUSH2 0x20FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2052 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1E1D JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1DE5 JUMPI DUP1 PUSH4 0x7F118B90 EQ PUSH2 0x1A07 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x195A JUMPI DUP1 PUSH4 0x84254CF9 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16F4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x16AC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1669 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x158B JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x14D3 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x1417 JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x13CF JUMPI DUP1 PUSH4 0xA103B044 EQ PUSH2 0x13B5 JUMPI DUP1 PUSH4 0xA6D2E718 EQ PUSH2 0x11CF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x10FB JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x1067 JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xF46 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xEAA JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xD38 JUMPI DUP1 PUSH4 0xC0209F1D EQ PUSH2 0xCF7 JUMPI DUP1 PUSH4 0xC480B9E6 EQ PUSH2 0xC3E JUMPI DUP1 PUSH4 0xC66DBC4B EQ PUSH2 0xB9C JUMPI DUP1 PUSH4 0xCD80A1AF EQ PUSH2 0xAE6 JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xAC6 JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xA5A JUMPI DUP1 PUSH4 0xD4A5B63A EQ PUSH2 0x96D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xDFBA3818 EQ PUSH2 0x5CF JUMPI PUSH4 0xE45801DA EQ PUSH2 0x2F2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x30B PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP4 PUSH2 0x5A7 JUMPI JUMPDEST POP DUP1 DUP1 PUSH2 0x370 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SWAP3 AND DUP1 SWAP3 EQ PUSH0 EQ PUSH2 0x59E JUMPI PUSH1 0x1 SWAP2 PUSH0 JUMPDEST PUSH1 0x1 DUP2 EQ DUP1 PUSH2 0x589 JUMPI JUMPDEST PUSH2 0x57A JUMPI PUSH2 0x398 PUSH2 0x3E33 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x3CD PUSH2 0x3B0 PUSH2 0x3AA DUP6 DUP5 PUSH2 0x3EBF JUMP JUMPDEST SWAP2 PUSH2 0x3FB9 JUMP JUMPDEST POP POP POP PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP4 DUP6 PUSH2 0x3D8 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SUB PUSH2 0x574 JUMPI SWAP2 SWAP3 JUMPDEST DUP5 PUSH2 0x3ED DUP4 DUP10 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP2 PUSH4 0x313CE567 PUSH1 0xE0 SHL SWAP8 DUP9 DUP5 MSTORE DUP4 PUSH1 0x4 PUSH1 0x20 SWAP13 DUP14 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP11 SWAP3 DUP11 SWAP2 PUSH0 SWAP6 PUSH2 0x54F JUMPI JUMPDEST POP SWAP1 PUSH2 0x429 SWAP2 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP7 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP7 PUSH2 0x512 JUMPI JUMPDEST POP PUSH1 0xFF AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x480 PUSH1 0xFF SWAP6 PUSH2 0x47B PUSH2 0x475 PUSH2 0x4B0 SWAP8 PUSH2 0x3B24 JUMP JUMPDEST DUP14 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x48F DUP12 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP12 MSTORE PUSH1 0x40 CALLDATASIZE DUP12 DUP14 ADD CALLDATACOPY PUSH2 0x4A4 DUP3 DUP13 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x50B JUMPI PUSH1 0x1 PUSH2 0x5F34 JUMP JUMPDEST SWAP3 AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH2 0x4D1 PUSH2 0x4D7 SWAP3 PUSH2 0x47B PUSH2 0x4DE SWAP6 PUSH2 0x3B24 JUMP JUMPDEST SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x5F34 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP7 POP PUSH2 0x536 SWAP1 DUP10 RETURNDATASIZE DUP12 GT PUSH2 0x53D JUMPI JUMPDEST PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B0B JUMP JUMPDEST SWAP6 SWAP1 PUSH2 0x447 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x524 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x429 SWAP3 SWAP2 SWAP6 POP PUSH2 0x56C SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x53D JUMPI PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x41E JUMP JUMPDEST SWAP3 PUSH2 0x3E2 JUMP JUMPDEST PUSH4 0xC1AB6DC1 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH2 0x594 DUP7 PUSH2 0x364B JUMP JUMPDEST MLOAD AND DUP3 EQ ISZERO PUSH2 0x38C JUMP JUMPDEST PUSH0 SWAP2 PUSH1 0x1 PUSH2 0x382 JUMP JUMPDEST PUSH2 0x5C4 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3978 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x364 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0x5E9 PUSH2 0x4C48 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x60C PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x616 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x6B0 JUMPI JUMPDEST DUP2 PUSH2 0x69F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x67A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x692 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x6D7 DUP2 PUSH2 0x32BF JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x78E PUSH2 0x3263 JUMP JUMPDEST PUSH2 0x796 PUSH2 0x3279 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP4 TIMESTAMP GT PUSH2 0x95A JUMPI PUSH2 0x7D7 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP7 AND SWAP5 DUP6 PUSH1 0x40 DUP6 ADD MSTORE DUP9 DUP9 AND PUSH1 0x60 DUP6 ADD MSTORE DUP10 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x946 JUMPI DUP8 SWAP4 PUSH2 0x892 SWAP4 PUSH2 0x889 SWAP4 PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x862 PUSH2 0x491C JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x5505 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x5587 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x8FD JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x929 JUMPI JUMPDEST DUP2 PUSH2 0x916 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x927 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x909 JUMP JUMPDEST PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x985 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x9EA SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI JUMPDEST POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x9F2 PUSH2 0x4B05 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0xA01 PUSH2 0x375E JUMP JUMPDEST ADD MLOAD AND TIMESTAMP GT PUSH2 0xA1C JUMPI PUSH2 0x927 TIMESTAMP TIMESTAMP PUSH2 0xA17 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x421A JUMP JUMPDEST PUSH4 0x771CEF4F PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xA4D SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI JUMPDEST PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x353B JUMP JUMPDEST DUP5 PUSH2 0x9E0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA3B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH2 0xB68 SWAP2 PUSH0 SWAP2 PUSH2 0xB76 JUMPI JUMPDEST POP PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xB92 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x399E JUMP JUMPDEST SWAP3 POP POP POP DUP4 PUSH2 0xB4F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xBB5 PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0xBBD PUSH2 0x3BD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0xC21 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0xC29 PUSH2 0x4B05 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xC36 PUSH1 0x4 CALLDATALOAD PUSH2 0x44A9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCC7 PUSH2 0xCAF DUP3 PUSH2 0x4A47 JUMP JUMPDEST SWAP3 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP5 PUSH2 0x4B9D JUMP JUMPDEST POP SWAP2 DUP4 MLOAD SWAP3 LT ISZERO DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xCED SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0xCA2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0xD2C PUSH2 0x4D1 PUSH2 0xD32 PUSH2 0xD1D PUSH2 0x4A88 JUMP JUMPDEST POP PUSH2 0xD2C DUP4 SWAP7 SWAP4 SWAP5 SWAP3 SWAP5 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x38AC JUMP JUMPDEST SWAP4 PUSH2 0x366F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xD51 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0xD5A PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD86 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD9F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0xDBD PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0xDC6 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0xE6F JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B PUSH1 0x64 CALLDATALOAD DUP4 PUSH2 0x3AFE JUMP JUMPDEST SWAP8 DUP9 SWAP5 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP9 SWAP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38E9 JUMP JUMPDEST SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0xE64 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE9D JUMPI JUMPDEST DUP2 PUSH2 0xE8A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0xE1A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE7D JUMP JUMPDEST PUSH2 0x344D JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0xF24 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST PUSH2 0xF40 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x36F1 JUMP JUMPDEST DUP3 PUSH2 0xF0F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x1046 JUMPI JUMPDEST POP PUSH2 0xFC5 PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x100A JUMPI DUP8 DUP1 PUSH2 0x4F3 DUP10 PUSH2 0xFFC DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0x1024 DUP2 PUSH2 0x3509 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xFDD JUMP JUMPDEST SWAP3 POP SWAP4 POP POP PUSH2 0x105F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP2 SWAP4 DUP6 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0x10E1 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH2 0x10F5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x10CC JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x1119 PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x11C7 JUMPI JUMPDEST DUP2 PUSH2 0x11AF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x11C0 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST POP DUP1 PUSH2 0xE64 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11A2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH2 0x11F2 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 DUP6 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1255 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0x1396 JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST DUP1 TIMESTAMP GT DUP2 TIMESTAMP XOR MUL XOR SWAP3 DUP3 DUP5 GT PUSH2 0x1381 JUMPI PUSH2 0x126F DUP5 DUP5 PUSH2 0x3AFE JUMP JUMPDEST SWAP2 PUSH3 0x15180 SWAP4 DUP5 DUP5 LT PUSH2 0x1372 JUMPI PUSH2 0x128F SWAP1 PUSH2 0x1288 PUSH2 0x4B05 JUMP JUMPDEST DUP7 DUP5 PUSH2 0x421A JUMP JUMPDEST SWAP2 DUP3 DUP2 LT PUSH2 0x1363 JUMPI PUSH2 0x12A1 DUP4 DUP3 PUSH2 0x3AFE JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x1351 JUMPI POP DUP3 DUP2 GT ISZERO PUSH2 0x132C JUMPI DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x12D9 SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x531C JUMP JUMPDEST PUSH32 0x0 LT PUSH2 0x130A JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x2B85F917 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP2 DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x134C SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x12D9 JUMP JUMPDEST SWAP1 POP PUSH4 0x119D8537 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x136D DUP2 DUP5 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x12A1 JUMP JUMPDEST PUSH4 0x19F8E855 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH4 0x64BB3B83 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x13AF SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP9 PUSH2 0x9E0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x485B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x60 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1407 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1449 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP3 PUSH2 0x14BF PUSH1 0x1 PUSH2 0x1494 PUSH2 0xC36 SWAP6 PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 DUP3 PUSH1 0xA0 SHR AND SWAP3 DUP2 PUSH4 0xFFFFFFFF DUP5 AND SWAP4 DUP13 SHR AND SWAP2 DUP2 PUSH1 0x80 SHR SWAP2 AND DUP9 PUSH2 0x4FDE JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 PUSH2 0x14A1 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x14C5 JUMPI PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x1 SWAP6 JUMPDEST PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP4 PUSH2 0x364B JUMP JUMPDEST SWAP2 PUSH2 0x5F34 JUMP JUMPDEST PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x2 SWAP6 PUSH2 0x14B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x14ED PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x14F6 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1523 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1554 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x1570 PUSH2 0x4F3 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x15AC DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x15EE JUMPI JUMPDEST POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1631 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x161A JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0x15DA SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x15CD SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0xC36 PUSH1 0x20 SWAP2 PUSH2 0x3AB2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x172D PUSH32 0x0 PUSH2 0x534D JUMP JUMPDEST PUSH2 0x1756 PUSH32 0x0 PUSH2 0x5447 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x946 JUMPI PUSH2 0x17B0 PUSH2 0x4F3 SWAP3 PUSH2 0x17A2 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH1 0xF PUSH1 0xF8 SHL DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x323F JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1920 JUMPI JUMPDEST POP ISZERO PUSH2 0x18D6 JUMPI PUSH0 PUSH1 0x24 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0x18B8 JUMPI JUMPDEST POP PUSH2 0x18AC PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E PUSH2 0x1895 PUSH2 0x188A DUP8 PUSH2 0x4A47 JUMP JUMPDEST POP DUP2 DUP2 SWAP4 SWAP3 SWAP10 PUSH2 0x4DD5 JUMP JUMPDEST SWAP5 DUP2 DUP7 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 DUP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x40CE JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x18CC SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0x1868 JUMP JUMPDEST POP PUSH1 0x40 PUSH32 0x0 PUSH32 0x0 PUSH2 0x18AC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1952 JUMPI JUMPDEST DUP2 PUSH2 0x193B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x194C SWAP1 PUSH2 0x35B9 JUMP JUMPDEST DUP3 PUSH2 0x1835 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x192E JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x19DA JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x19F9 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x1A00 JUMPI JUMPDEST PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x37A3 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x19C3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19E7 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x200 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DCB JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DA8 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x9184E72A000 PUSH1 0x80 DUP3 ADD MSTORE PUSH8 0x16345785D8A0000 PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x120 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x140 DUP3 ADD MSTORE PUSH8 0x29A2241AF62C0000 PUSH2 0x160 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x180 DUP3 ADD MSTORE PUSH3 0x15180 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH3 0xF4240 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH6 0x5AF3107A4000 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1E0 PUSH2 0x1D08 PUSH2 0x1CF2 DUP4 MLOAD PUSH2 0x200 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x220 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x1F NOT ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0x1A0 DUP2 ADD MLOAD PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0x1C0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD PUSH2 0x200 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x1DC4 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x371A JUMP JUMPDEST POP DUP3 PUSH2 0x1B43 JUMP JUMPDEST PUSH2 0x1DDF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x1AEE JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1E06 PUSH2 0x3263 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT DUP4 DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 DUP3 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1E9D SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3362 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP2 ADD SWAP5 DUP6 MSTORE PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x64 DUP5 ADD CALLDATALOAD DUP6 MSTORE PUSH1 0x80 DUP3 ADD SWAP4 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP6 MSTORE PUSH2 0x1EC9 PUSH1 0xA4 DUP3 ADD PUSH2 0x328F JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0x4 PUSH2 0x1EE9 SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x33C2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1EF6 PUSH2 0x3DEE JUMP JUMPDEST PUSH2 0x1F00 DUP6 MLOAD PUSH2 0x4A47 JUMP JUMPDEST SWAP7 SWAP2 SWAP7 SWAP3 SWAP1 SWAP3 PUSH2 0x2043 JUMPI JUMPDEST PUSH2 0x1F13 PUSH2 0x4750 JUMP JUMPDEST MLOAD PUSH2 0x1F1D DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1F26 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1FB9 JUMPI PUSH2 0x1F7A SWAP3 PUSH2 0x1F6F PUSH2 0x1F80 SWAP7 SWAP6 SWAP4 PUSH2 0x1F74 SWAP4 MLOAD SWAP9 DUP10 SWAP8 MLOAD SWAP6 MLOAD SWAP8 DUP9 SWAP5 MLOAD SWAP5 DUP6 SWAP3 DUP9 ISZERO PUSH0 EQ PUSH2 0x1FA1 JUMPI PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST SWAP6 DUP11 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x38AC JUMP JUMPDEST SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x1F92 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x5A09F129 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP4 PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP3 MLOAD SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP3 PUSH2 0x1FCE DUP4 DUP8 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP6 GT PUSH2 0x1F92 JUMPI PUSH2 0xD2C DUP6 SWAP4 PUSH2 0x1FFA PUSH2 0x2005 SWAP7 PUSH2 0x2000 SWAP6 DUP6 ISZERO PUSH0 EQ PUSH2 0x2039 JUMPI PUSH2 0xD2C SWAP1 SWAP2 SWAP6 JUMPDEST DUP12 PUSH2 0x367C JUMP JUMPDEST SWAP8 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x3AFE JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0x202A JUMPI PUSH2 0x201A PUSH1 0x1 SWAP2 PUSH1 0x20 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0xC36 JUMP JUMPDEST PUSH4 0xA0C22C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP5 PUSH2 0xD2C SWAP1 PUSH2 0x1FF4 JUMP JUMPDEST PUSH2 0x204D DUP4 DUP9 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0x1F0B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x44 DUP2 PUSH2 0x206F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x20D2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20F8 JUMPI JUMPDEST PUSH2 0x20E9 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x20C9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH2 0x211E DUP2 PUSH2 0x32A3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE PUSH1 0x80 PUSH2 0x2139 PUSH2 0x375E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 PUSH4 0xFFFFFFFF DUP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD AND PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH4 0x56B7FCDB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x2201 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x48DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x2243 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x227B DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x22A8 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x22EB JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x22D4 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x40 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x233B PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x60 PUSH2 0x2360 PUSH2 0x4A88 JUMP JUMPDEST SWAP2 SWAP3 POP PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD DUP4 SHR AND PUSH2 0x4831 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x23B8 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x23C1 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x23ED SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2406 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0x2424 PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x242D PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x24A2 JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B DUP3 PUSH1 0x84 CALLDATALOAD PUSH2 0x38AC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24D0 JUMPI JUMPDEST DUP2 PUSH2 0x24BD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0x2481 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x250A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x233B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x491C JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x240 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH0 PUSH2 0x200 DUP3 ADD MSTORE PUSH0 PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A5B JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A3F JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A0D JUMPI JUMPDEST POP PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2767 PUSH2 0x35C6 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x27DB PUSH1 0x40 MLOAD PUSH2 0x2793 DUP2 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 DUP2 AND PUSH2 0x27B8 DUP4 PUSH2 0x366F JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0x27C5 DUP3 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH1 0xA0 DUP7 ADD MSTORE DUP3 PUSH1 0x20 SHR AND DUP1 PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x4831 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND PUSH2 0x100 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0x27F9 PUSH2 0x375E JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH2 0x180 DUP6 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MLOAD AND PUSH2 0x1A0 DUP6 ADD MSTORE ADD MLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x29EC JUMPI JUMPDEST POP PUSH2 0x120 PUSH1 0xE0 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x220 DUP4 ADD MSTORE PUSH2 0x29CA JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x220 PUSH2 0x292C PUSH2 0x28DD DUP4 MLOAD PUSH2 0x240 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x260 DUP7 ADD SWAP1 PUSH2 0x349A JUMP JUMPDEST PUSH2 0x28F9 PUSH1 0x20 DUP6 ADD MLOAD SWAP2 PUSH1 0x1F NOT SWAP3 DUP4 DUP9 DUP4 SUB ADD PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1A0 DUP3 ADD MLOAD AND PUSH2 0x1C0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1C0 DUP3 ADD MLOAD AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x29E1 PUSH2 0x29D5 PUSH2 0x485B JUMP JUMPDEST DUP1 PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x48DF JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x28B6 JUMP JUMPDEST PUSH2 0x2A07 SWAP2 POP PUSH2 0x1A0 RETURNDATASIZE PUSH2 0x1A0 GT PUSH2 0x1A00 JUMPI PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x2886 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2A37 JUMPI JUMPDEST DUP2 PUSH2 0x2A28 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x2759 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A1B JUMP JUMPDEST PUSH2 0x2A53 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x2700 JUMP JUMPDEST PUSH2 0x2A6F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x26AB JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2A8F PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2A98 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2AC5 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x2B21 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 MLOAD SWAP2 DUP4 SHR AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C15 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x2C36 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH2 0x120 DUP4 ADD SWAP1 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x40 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP3 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH1 0xC0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x2CB9 PUSH2 0x2CAA PUSH1 0xE0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x100 DUP2 ADD SWAP10 PUSH0 DUP12 MSTORE PUSH2 0x2C9F PUSH2 0x3E33 JUMP JUMPDEST SWAP3 DUP4 DUP3 SWAP4 MSTORE MSTORE PUSH2 0x3EBF JUMP JUMPDEST SWAP2 DUP3 DUP7 MSTORE DUP2 DUP13 MSTORE DUP1 DUP8 MSTORE PUSH2 0x3FB9 JUMP JUMPDEST DUP11 MSTORE DUP4 MSTORE DUP6 MSTORE DUP1 DUP7 MSTORE SWAP8 PUSH2 0x2CE9 PUSH2 0x2CDC PUSH2 0x2CD2 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x3C6 DUP11 PUSH2 0x366F JUMP JUMPDEST SWAP10 PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 SWAP10 DUP11 DUP3 MUL DUP3 ISZERO SWAP12 DUP4 DUP3 DIV EQ DUP13 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP12 PUSH8 0xDE111A6B7DE4000 DUP1 DUP6 MUL SWAP5 DUP6 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP12 DUP1 SWAP2 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x2E43 JUMPI JUMPDEST POP POP POP PUSH2 0x2E34 JUMPI DUP9 PUSH2 0x2DC7 PUSH2 0x2DB8 PUSH2 0x2DD1 SWAP7 PUSH2 0x2DAE SWAP6 DUP12 DUP6 PUSH2 0x2DE0 SWAP16 PUSH2 0x2D88 SWAP1 PUSH2 0x2DD6 SWAP16 PUSH2 0x2DB3 SWAP16 PUSH2 0x2D75 SWAP1 PUSH2 0x3C6 PUSH2 0x2D6D PUSH2 0x2D7E SWAP5 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH2 0x366F JUMP JUMPDEST SWAP15 DUP16 SWAP1 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP13 DUP14 SWAP5 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP12 DUP13 SWAP4 MLOAD SWAP8 MLOAD SWAP10 MLOAD PUSH2 0x2DAE PUSH2 0x2DA1 DUP7 PUSH2 0xD2C DUP7 PUSH2 0x364B JUMP JUMPDEST PUSH2 0x4D1 DUP7 PUSH2 0xD2C DUP8 PUSH2 0x366F JUMP JUMPDEST PUSH2 0x4D6A JUMP JUMPDEST PUSH2 0x4DD5 JUMP JUMPDEST SWAP3 PUSH2 0x2DAE DUP5 PUSH2 0xE4B DUP12 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x18A5 DUP7 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x40F2 JUMP JUMPDEST MLOAD TIMESTAMP SWAP1 TIMESTAMP SWAP1 PUSH2 0x421A JUMP JUMPDEST POP PUSH2 0x2E0A PUSH32 0x0 PUSH2 0x44A9 JUMP JUMPDEST POP PUSH2 0xE5C PUSH32 0x0 PUSH2 0x4612 JUMP JUMPDEST PUSH4 0x4F512CB PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP DUP11 DUP11 DUP2 PUSH2 0x2D32 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x35C6 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2EDA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH4 0xD6234725 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 PUSH1 0x8 SLOAD DUP2 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2F31 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2F3A PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2F66 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP2 PUSH2 0x2F74 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 PUSH1 0x24 PUSH1 0x20 DUP6 ADD SWAP4 PUSH1 0x7 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x24 ADD SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2FF0 JUMPI DUP5 PUSH1 0x80 CALLDATASIZE PUSH1 0x63 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x2 SWAP1 PUSH2 0x2FB2 PUSH2 0x3DEE JUMP JUMPDEST MLOAD EQ DUP1 PUSH2 0x2FDF JUMPI JUMPDEST DUP1 PUSH2 0x2FCD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO SWAP1 DUP2 ISZERO EQ PUSH2 0x2FC0 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2FBA JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP5 CALLDATASIZE SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3007 DUP3 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x3010 DUP6 PUSH2 0x328F JUMP JUMPDEST DUP3 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP7 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 SWAP4 DUP6 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x307F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x30D9 DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x3106 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x3149 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x3132 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x317A PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0x3182 PUSH2 0x3BD6 JUMP JUMPDEST PUSH2 0x318A PUSH2 0x3C73 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x31EE SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x31F6 PUSH2 0x4B05 JUMP JUMPDEST PUSH2 0x3201 PUSH1 0x4 CALLDATALOAD PUSH2 0x4612 JUMP JUMPDEST PUSH2 0x927 PUSH2 0x3C73 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x337C DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x338A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33B3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33A5 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x946 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x33F7 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x3328 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x5CB JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3486 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3478 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34B9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34AB JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34EC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34DE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3513 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3579 PUSH1 0x40 DUP1 MLOAD SWAP3 PUSH2 0x3557 DUP5 PUSH2 0x32DC JUMP JUMPDEST PUSH2 0x3560 DUP2 PUSH2 0x3527 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x356E PUSH1 0x20 DUP3 ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x35AF JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x359B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3590 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3643 JUMPI JUMPDEST DUP2 PUSH2 0x3637 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x362A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x36AB DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x36B9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x36E2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x36D4 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3747 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x376B DUP3 PUSH2 0x32A3 JUMP JUMPDEST DUP2 PUSH1 0x60 PUSH1 0x6 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP4 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF DUP2 PUSH1 0xC0 SHR AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xE0 SHR SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x5CB JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x37BF DUP5 PUSH2 0x32BF JUMP JUMPDEST SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x37D0 DUP2 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x37D9 DUP3 PUSH2 0x35B9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x37E7 PUSH1 0x20 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x37F8 PUSH1 0x40 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3809 PUSH1 0x60 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0x38A5 SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x3877 DUP6 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3889 PUSH2 0x140 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x389B PUSH2 0x160 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x3922 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x3930 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3959 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x394B JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x5CB JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x5CB JUMPI DUP4 PUSH2 0x39C9 SWAP2 DUP7 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP3 ADD DUP6 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP1 PUSH2 0x39F0 DUP3 PUSH2 0x334A JUMP JUMPDEST SWAP3 PUSH1 0x40 PUSH2 0x3A00 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP4 DUP6 MSTORE DUP2 DUP6 ADD SWAP1 DUP3 PUSH1 0x60 DUP1 SWAP7 MUL DUP6 ADD ADD SWAP4 DUP11 DUP6 GT PUSH2 0x5CB JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x3A59 JUMPI POP POP POP POP POP POP SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3A42 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST DUP6 DUP4 DUP13 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH2 0x3A6E DUP3 PUSH2 0x32DC JUMP JUMPDEST DUP4 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP3 MSTORE DUP5 DUP5 ADD MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI DUP3 DUP7 SWAP3 DUP4 DUP11 SWAP6 ADD MSTORE PUSH2 0x3AA3 DUP6 DUP8 ADD PUSH2 0x35B9 JUMP JUMPDEST DUP6 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x3A1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x3AF8 DUP2 PUSH2 0x32DC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5CB JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x4D DUP2 GT PUSH2 0x4F7 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3B9C JUMPI JUMPDEST POP ISZERO PUSH2 0x3B8D JUMPI JUMP JUMPDEST PUSH4 0x486AA307 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3BCE JUMPI JUMPDEST DUP2 PUSH2 0x3BB7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3BC8 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3B85 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3BAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8380EDB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3C39 JUMPI JUMPDEST POP PUSH2 0x3C2A JUMPI JUMP JUMPDEST PUSH4 0x3915D7F9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C6B JUMPI JUMPDEST DUP2 PUSH2 0x3C54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3C65 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3C23 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3C47 JUMP JUMPDEST PUSH2 0x3C7B PUSH2 0x4C48 JUMP JUMPDEST ISZERO PUSH2 0x3C82 JUMPI JUMP JUMPDEST PUSH3 0xF656AD PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 PUSH2 0x3DE3 JUMPI POP PUSH2 0x3CCE PUSH0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP2 DUP5 DUP4 PUSH1 0x4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP6 SWAP4 DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x3DA4 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP3 SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0x26F8AA21 PUSH1 0xE2 SHL DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3D6E JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH4 0x23DADA53 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3D9D JUMPI JUMPDEST PUSH2 0x3D85 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3D96 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3D56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D7B JUMP JUMPDEST SWAP3 SWAP5 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x3DDC JUMPI JUMPDEST PUSH2 0x3DBE DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP5 SWAP3 SWAP1 DUP5 SWAP1 PUSH1 0x64 PUSH2 0x3D1C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3DB4 JUMP JUMPDEST SWAP2 POP POP CALLER SUB PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x3E20 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3E9F JUMPI JUMPDEST POP PUSH2 0x3717 PUSH2 0x3E99 PUSH2 0x14B9 PUSH2 0x3E99 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4CEA JUMP JUMPDEST PUSH2 0x3EB4 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST POP POP SWAP1 POP SWAP1 PUSH0 PUSH2 0x3E86 JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3FA9 JUMPI SWAP1 JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3F99 JUMPI SWAP2 JUMPDEST PUSH2 0x3717 PUSH2 0x3F40 DUP5 PUSH2 0xE4B DUP6 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP4 PUSH2 0xE4B PUSH2 0x3F72 DUP3 PUSH2 0xE4B DUP8 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x3F0F JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x3EE7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP4 PUSH2 0xE4B PUSH2 0x3FC9 SWAP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x3FDA PUSH2 0x3FD5 DUP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x4EAB JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH18 0xB7ABC627050305ADF14A3D9E40000000000 DIV SWAP3 PUSH10 0xD3C21BCECCEDA1000000 SWAP5 DUP6 DUP6 ADD SWAP1 DUP2 DUP7 GT PUSH2 0x4F7 JUMPI PUSH2 0x4033 PUSH8 0xDE0B6B3A7640000 SWAP3 DUP4 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x4042 DUP4 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP8 PUSH2 0x405A DUP8 DUP5 PUSH2 0x4D48 JUMP JUMPDEST SWAP1 DUP9 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x406E SWAP2 PUSH2 0x4D48 JUMP JUMPDEST SWAP2 DUP2 DUP4 MUL SWAP3 DUP1 DUP5 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x40C0 PUSH2 0x40C5 SWAP3 PUSH2 0x4097 DUP10 PUSH2 0x2000 PUSH2 0x40CB SWAP8 PUSH2 0x4EAB JUMP JUMPDEST PUSH2 0x40A0 DUP8 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH2 0x40AE DUP10 PUSH2 0xD2C DUP9 PUSH2 0x364B JUMP JUMPDEST SWAP1 PUSH2 0x40B9 DUP5 DUP13 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH2 0x366F JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH2 0x4104 DUP4 PUSH2 0x4DFF JUMP JUMPDEST AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH2 0x4120 DUP4 PUSH2 0x4DFF JUMP JUMPDEST PUSH1 0x80 SHL AND OR PUSH1 0x8 SSTORE PUSH1 0x40 SWAP1 PUSH32 0xF36B0FD05D55CA91FB3EBD8493ADF78A3405A11C145C054A092D0994B665B637 DUP3 DUP1 MLOAD DUP6 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 DUP3 MLOAD SWAP4 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x419C DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5669727475616C42616C616E6365735570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH2 0x420F SWAP1 PUSH2 0x32F8 JUMP JUMPDEST JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 SWAP2 SWAP1 DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x44A0 JUMPI JUMPDEST PUSH2 0x4491 JUMPI PUSH2 0x4233 PUSH2 0x375E JUMP JUMPDEST SWAP2 PUSH2 0x423D DUP6 PUSH2 0x48DF JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP4 DUP5 MLOAD SWAP3 PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP5 MSTORE ADDRESS PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4487 JUMPI PUSH0 SWAP2 PUSH2 0x4452 JUMPI JUMPDEST POP ISZERO PUSH2 0x443E JUMPI POP PUSH2 0x43E7 SWAP3 SWAP2 PUSH2 0x43D9 SWAP2 PUSH2 0x42B0 PUSH2 0x485B JUMP JUMPDEST SWAP10 PUSH2 0x42BA DUP12 PUSH2 0x48DF JUMP JUMPDEST SWAP9 JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x42D3 DUP13 PUSH2 0x4E2A JUMP JUMPDEST AND DUP3 MSTORE PUSH2 0x42DF DUP4 PUSH2 0x4E2A JUMP JUMPDEST DUP2 DUP9 DUP5 ADD SWAP2 AND DUP2 MSTORE PUSH28 0xFFFFFFFF000000000000000000000000000000000000000000000000 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH2 0x4326 DUP8 PUSH2 0x4E5A JUMP JUMPDEST SWAP4 DUP14 DUP7 ADD SWAP6 PUSH4 0xFFFFFFFF DUP1 SWAP7 AND DUP8 MSTORE PUSH2 0x433E DUP11 PUSH2 0x4E5A JUMP JUMPDEST SWAP6 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE MLOAD AND SWAP3 MLOAD PUSH1 0x60 SHL AND SWAP4 MLOAD PUSH1 0xC0 SHL AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL SWAP1 PUSH1 0xE0 SHL AND SWAP3 OR OR OR PUSH1 0x6 SSTORE PUSH32 0xA18562EA402E57CC2B437F8D7A139C6C38958ADC1ECBB706EC37A7A64FF6E7A5 DUP2 DUP11 PUSH2 0x43B3 DUP7 DUP7 DUP14 MLOAD SWAP5 DUP6 SWAP5 DUP6 SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG1 DUP8 MLOAD SWAP9 DUP10 SWAP6 DUP7 ADD SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP6 MSTORE DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5072696365526174696F53746174655570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP6 SWAP8 SWAP2 PUSH2 0x43D9 SWAP2 DUP4 PUSH2 0x43E7 SWAP6 SWAP5 SWAP9 SWAP11 PUSH2 0x42BC JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x4480 JUMPI JUMPDEST PUSH2 0x4469 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x447A SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x4298 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x445F JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x2CA4094F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP TIMESTAMP DUP2 LT PUSH2 0x4227 JUMP JUMPDEST PUSH8 0x29A2241AF62C0000 DUP2 GT PUSH2 0x4603 JUMPI PUSH3 0x1E6E9 PUSH8 0xDE0B6B3A7640000 SWAP2 DIV DUP2 SUB SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x44D9 DUP2 PUSH2 0x4831 JUMP JUMPDEST SWAP1 PUSH2 0x44E3 DUP2 PUSH2 0x4DFF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x7 SLOAD SWAP2 PUSH1 0x20 SHL AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT AND OR PUSH1 0x7 SSTORE PUSH1 0x40 PUSH32 0x7EE46B38BE05F748DE1C0FB2002AC48FE50A26A0017C654A92C0BF9228058847 DUP2 DUP1 MLOAD DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MLOAD SWAP3 DUP5 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x458F DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x45E6 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4461696C79507269636553686966744578706F6E656E74557064617465640000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x45FA JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x3717 SWAP1 PUSH2 0x32F8 JUMP JUMPDEST PUSH4 0x2B5B4F35 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT PUSH2 0x4741 JUMPI PUSH1 0x7 SLOAD PUSH32 0xFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH28 0xFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 PUSH1 0xA0 SHL AND SWAP2 AND OR PUSH1 0x7 SSTORE PUSH32 0x74D468C8E414C37C502176A45CCE93C85EAA0ABF608E40641DC6664CA5EFCAB0 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x46D7 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x43656E74657265646E6573734D617267696E5570646174656400000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH4 0x7304FAC7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x475E TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST AND DUP1 PUSH4 0xFFFFFFFF NOT PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x32A9FD44BDF167703F584BD25098494D3D18A4653A2D97116D28DA05209444D4 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x47D8 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4C61737454696D657374616D7055706461746564000000000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 DUP2 DUP4 GT PUSH2 0x4F7 JUMPI PUSH3 0x1E6E9 DUP1 DUP5 MUL SWAP4 DUP5 DIV EQ SWAP2 EQ OR ISZERO PUSH2 0x4F7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x3717 SWAP2 PUSH0 SWAP2 PUSH2 0x48C1 JUMPI JUMPDEST POP PUSH2 0x48BA DUP2 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP2 PUSH2 0x4E82 JUMP JUMPDEST PUSH2 0x48D5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x48B0 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4903 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x4A1E JUMPI JUMPDEST ISZERO PUSH2 0x4977 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x494E JUMP JUMPDEST PUSH2 0x4A83 SWAP1 PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 PUSH1 0xA0 SHR AND SWAP4 DUP3 PUSH4 0xFFFFFFFF DUP6 AND SWAP5 PUSH1 0x20 SHR AND SWAP3 DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4FDE JUMP JUMPDEST SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x4AE5 JUMPI JUMPDEST POP PUSH2 0x4A83 DUP3 PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4AFA SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP SWAP1 PUSH0 PUSH2 0x4ADB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4B60 SWAP2 PUSH0 SWAP2 PUSH2 0x4B7F JUMPI JUMPDEST POP PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4B6F JUMPI JUMPDEST POP POP PUSH2 0x420F PUSH2 0x4750 JUMP JUMPDEST PUSH2 0x4B78 SWAP2 PUSH2 0x40F2 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x4B65 JUMP JUMPDEST PUSH2 0x4B93 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4B5A JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x4BA8 DUP4 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4BB6 JUMPI POP POP POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0x4BBF DUP4 PUSH2 0x364B JUMP JUMPDEST MLOAD ISZERO PUSH2 0x4C3E JUMPI PUSH2 0x4BDE PUSH2 0x14B9 PUSH2 0x4BE5 SWAP4 PUSH2 0x4BD8 DUP7 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x38D6 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x4C14 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C0F SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C38 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x4CCC JUMPI JUMPDEST POP PUSH2 0x4CC6 PUSH1 0x8 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST POP LT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x4CE0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4C9A JUMP JUMPDEST PUSH1 0x1 DUP2 MLOAD PUSH2 0x4CF7 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x4D00 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x4D3B JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x4 SWAP4 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33CD77E7 PUSH1 0xE1 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI JUMPDEST POP SWAP1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D52 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 DUP1 DUP4 MUL DUP4 ISZERO SWAP2 DUP5 DUP3 DIV EQ DUP3 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH8 0xDE111A6B7DE4000 DUP1 DUP7 MUL SWAP6 DUP7 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP2 SWAP1 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x4DC9 JUMPI JUMPDEST POP POP POP PUSH2 0x4DBA JUMPI JUMP JUMPDEST PUSH4 0x3D9F09DF PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP PUSH0 DUP1 DUP1 PUSH2 0x4DB1 JUMP JUMPDEST PUSH2 0x4DF5 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0xD2C PUSH2 0x14B9 PUSH2 0x4DFB SWAP6 PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x4E13 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x80 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E43 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x60 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E6B JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E DUP7 PUSH2 0x1895 PUSH2 0x3717 SWAP9 DUP9 PUSH2 0x4EA6 SWAP9 PUSH2 0x4DD5 JUMP JUMPDEST PUSH2 0x531C JUMP JUMPDEST PUSH1 0x1 DUP1 DUP3 GT ISZERO PUSH2 0x4D37 JUMPI PUSH2 0x4F7A SWAP1 DUP1 DUP4 PUSH17 0x100000000000000000000000000000000 DUP2 LT ISZERO PUSH2 0x4FC7 JUMPI JUMPDEST DUP1 PUSH9 0x10000000000000000 PUSH1 0x4 SWAP3 LT ISZERO PUSH2 0x4FBA JUMPI JUMPDEST PUSH5 0x100000000 DUP2 LT ISZERO PUSH2 0x4FAD JUMPI JUMPDEST PUSH3 0x10000 DUP2 LT ISZERO PUSH2 0x4FA0 JUMPI JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x4F94 JUMPI JUMPDEST PUSH1 0x10 DUP2 LT ISZERO PUSH2 0x4F88 JUMPI JUMPDEST LT ISZERO PUSH2 0x4F81 JUMPI JUMPDEST PUSH1 0x3 MUL DUP2 SHR PUSH2 0x4F2F DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F3C DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F49 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F56 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F63 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F70 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD SWAP1 SHR DUP1 SWAP3 PUSH2 0x38E9 JUMP JUMPDEST DUP2 GT SWAP1 SUB SWAP1 JUMP JUMPDEST DUP2 SHL PUSH2 0x4F20 JUMP JUMPDEST DUP2 SHR SWAP2 PUSH1 0x2 SHL SWAP2 PUSH2 0x4F19 JUMP JUMPDEST PUSH1 0x8 SHR SWAP2 DUP2 SHL SWAP2 PUSH2 0x4F0F JUMP JUMPDEST PUSH1 0x10 SHR SWAP2 PUSH1 0x8 SHL SWAP2 PUSH2 0x4F04 JUMP JUMPDEST PUSH1 0x20 SHR SWAP2 PUSH1 0x10 SHL SWAP2 PUSH2 0x4EF8 JUMP JUMPDEST PUSH1 0x40 SHR SWAP2 PUSH1 0x20 SHL SWAP2 PUSH2 0x4EEA JUMP JUMPDEST POP PUSH9 0x10000000000000000 SWAP1 POP PUSH1 0x80 DUP5 SWAP1 SHR PUSH2 0x4ED5 JUMP JUMPDEST SWAP2 SWAP5 SWAP6 SWAP3 SWAP4 SWAP1 SWAP6 PUSH0 SWAP5 PUSH2 0x4FF0 TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP5 AND SWAP9 DUP3 DUP7 AND DUP11 DUP2 EQ PUSH2 0x530E JUMPI DUP12 DUP3 SWAP12 PUSH2 0x5010 PUSH2 0x375E JUMP JUMPDEST SWAP3 DUP7 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP5 DUP8 MLOAD AND SWAP5 PUSH2 0x504A DUP14 DUP3 PUSH1 0x20 DUP12 ADD MLOAD AND SWAP10 PUSH1 0x40 DUP2 ADD SWAP11 PUSH1 0x60 DUP7 DUP14 MLOAD AND SWAP3 ADD SWAP10 DUP7 DUP12 MLOAD AND SWAP4 PUSH2 0x55FD JUMP JUMPDEST AND SWAP7 MLOAD AND LT SWAP3 DUP4 PUSH2 0x5301 JUMPI JUMPDEST POP POP POP PUSH2 0x518C JUMPI JUMPDEST POP POP POP SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x507A DUP11 DUP13 DUP10 PUSH2 0x4B9D JUMP JUMPDEST SWAP7 SWAP1 SWAP2 AND GT PUSH2 0x508C JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 POP PUSH2 0x50A1 DUP5 DUP7 DUP11 PUSH2 0x4E82 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP7 DUP8 DUP3 MUL SWAP2 DUP1 DUP4 DIV DUP10 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x50C8 PUSH2 0x50F2 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP6 DUP10 ISZERO PUSH2 0x5172 JUMPI PUSH2 0x50E2 PUSH2 0x50DB DUP13 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP8 JUMPDEST DUP11 ISZERO PUSH2 0x516A JUMPI POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND DUP6 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP8 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x5122 SWAP3 PUSH2 0x4DF5 PUSH2 0x5116 SWAP3 DUP9 SWAP5 PUSH2 0x56B3 JUMP JUMPDEST DIV SWAP6 PUSH2 0x4DF5 DUP5 DUP9 PUSH2 0x38AC JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A763FFFF NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI PUSH2 0x514D SWAP4 PUSH2 0x5147 DUP8 PUSH2 0x1F74 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST DIV PUSH2 0x3AFE JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x5165 JUMPI SWAP1 JUMPDEST SWAP1 SWAP2 PUSH1 0x1 SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x5084 JUMP JUMPDEST PUSH2 0x5155 JUMP JUMPDEST SWAP1 POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST PUSH2 0x5185 PUSH2 0x517E DUP13 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x50E5 JUMP JUMPDEST DUP3 SWAP12 POP PUSH2 0x51A1 SWAP3 SWAP2 SWAP5 SWAP13 POP DUP1 SWAP4 SWAP11 POP DUP9 PUSH2 0x4B9D JUMP JUMPDEST SWAP10 SWAP1 SWAP2 DUP11 ISZERO PUSH2 0x52EA JUMPI PUSH2 0x51CE SWAP1 PUSH2 0x51B7 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP3 DUP2 DUP5 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 DUP1 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP6 SUB PUSH2 0x4F7 JUMPI PUSH2 0x5210 DUP6 PUSH1 0x2 SHL DUP3 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0x1BC16D674EC7FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x522C SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH15 0xC097CE7BC90715B34B9F1000000000 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x525B SWAP3 PUSH2 0x5255 PUSH2 0x4DF5 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP1 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x4F7 JUMPI PUSH2 0x52AB PUSH2 0xE4B SWAP2 PUSH2 0x52B2 SWAP5 PUSH1 0x1 SHL SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP4 DUP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP8 ISZERO PUSH2 0x52D8 JUMPI SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP8 JUMPDEST SWAP8 SWAP9 PUSH1 0x1 SWAP8 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH0 DUP1 PUSH2 0x505E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x52C7 JUMP JUMPDEST SWAP1 PUSH2 0x51CE SWAP1 PUSH2 0x52F8 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 PUSH2 0x51BC JUMP JUMPDEST MLOAD AND GT SWAP1 POP PUSH0 DUP7 DUP2 PUSH2 0x5056 JUMP JUMPDEST POP SWAP9 POP PUSH0 SWAP8 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x202A JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5388 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x539A DUP4 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x53C5 JUMPI JUMPDEST POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x540B JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x53F0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0x3717 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5469 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x547E DUP2 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x54A6 JUMPI POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x54ED JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x54D2 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x557C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x544 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x5572 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x3513 JUMPI DUP1 PUSH2 0x5599 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x55B0 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x55CB JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x55D5 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP1 DUP3 AND SUB SWAP2 SWAP1 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP3 DUP5 AND DUP2 LT PUSH2 0x561F JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 DUP6 AND LT ISZERO PUSH2 0x56AB JUMPI DUP4 DUP3 PUSH2 0x563A PUSH2 0x5648 SWAP7 PUSH2 0x5641 SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP4 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 AND PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 MUL SWAP4 DUP3 DUP6 DIV DUP3 EQ DUP4 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x568E PUSH2 0x5694 SWAP2 PUSH2 0x5689 DUP7 PUSH2 0x3717 SWAP9 PUSH2 0x38E9 JUMP JUMPDEST PUSH2 0x56B3 JUMP JUMPDEST DUP5 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP2 DUP2 DUP1 DUP3 LT SWAP2 XOR MUL XOR DUP2 DUP1 DUP3 GT SWAP2 XOR MUL XOR PUSH2 0x4E2A JUMP JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x56CA JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x56E7 JUMPI POP POP DUP1 PUSH2 0x4DFB SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x570B JUMPI POP PUSH2 0x5704 DUP3 PUSH2 0x4DFB SWAP4 PUSH2 0x38D6 JUMP JUMPDEST DIV DUP1 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 POP PUSH2 0x5716 SWAP2 PUSH2 0x577A JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x4F7 JUMPI DUP2 LT ISZERO PUSH2 0x5751 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5F26 JUMPI DUP2 ISZERO PUSH2 0x5F20 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x5F12 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x5F03 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x5EF2 JUMPI JUMPDEST ISZERO PUSH2 0x5BA5 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x5803 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF NOT ADD DUP4 MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH9 0x238FD42C5CF03FFFF NOT DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x5B92 JUMPI JUMPDEST ISZERO PUSH2 0x5B83 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x5B70 JUMPI JUMPDEST ISZERO PUSH2 0x5B61 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x5B52 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x5B05 JUMPI PUSH9 0x6F05B59D3B1FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x5AE2 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x5ABE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x5A9C JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x5A7A JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x5A59 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x5A38 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x5A17 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x59F6 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x3717 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x5756 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5977 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5965 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5953 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 DUP4 SWAP2 PUSH9 0xAD78EBC5AC61FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x594A JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5938 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5926 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5914 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH9 0xAD78EBC5AC61FFFFFF NOT ADD PUSH2 0x5902 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x5B3F JUMPI PUSH9 0x3782DACE9D8FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x58A7 JUMP JUMPDEST PUSH4 0xD4794EFD PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5898 JUMP JUMPDEST PUSH4 0xA2F9F7E3 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5888 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x5EDC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x5EB1 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x5E90 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x5E6D JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x5E4D JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x5E2D JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x5E0D JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x5DED JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x5DD6 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x5DB6 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x5D96 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x5D77 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x5D58 JUMPI JUMPDEST POP PUSH2 0x5D05 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 DUP1 DUP3 ADD SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x5D53 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x5872 JUMP JUMPDEST PUSH2 0x5D4D JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CDF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CCB JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CB7 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CA3 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C7B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C67 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C52 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C3D JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x5C25 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x5C04 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x5BE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x5EE8 SWAP2 POP PUSH2 0x5756 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x5BBA JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x57C0 JUMP JUMPDEST PUSH4 0xD8317311 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0x11380F PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 PUSH1 0x3 EQ PUSH2 0x5F7F JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x5F6B JUMPI PUSH1 0x2 EQ PUSH2 0x5F62 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x3717 SWAP2 PUSH2 0x4D48 JUMP JUMPDEST POP PUSH2 0x4DFB SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSIZE GT DUP10 ORIGIN 0x26 PUSH17 0x11C7CF97006BC40463D53AEA2D566EEECA 0xB5 0xCB GAS KECCAK256 0xCC CALL ADD SHL 0xCA PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1970:42991:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:49:33;1970:42991:58;4124:49:33;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:50:21;1970:42991:58;1615:50:21;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;18318:35;;18347:4;1970:42991;18318:35;;1970:42991;;18318:6;1970:42991;18318:6;;;1970:42991;18318:35;;;;;;;1970:42991;18318:35;;;1970:42991;18417:9;;;;;;:::i;:::-;1970:42991;;;;18417:45;;:27;:45;:27;;;1970:42991;;;18417:45;1970:42991;18477:22;;:53;;;18417:45;18473:118;;18634:16;;:::i;:::-;42828:46;;43112:70;42940:154;42828:46;;;;:::i;:::-;42940:154;;:::i;:::-;43112:30;;;43151;43112;;;:::i;:::-;1970:42991;43151:30;;:::i;:::-;1970:42991;43112:70;;:::i;:::-;18805:9;;;;;:::i;:::-;1970:42991;;18805:27;:85;;;;;18955:25;;;;;:::i;:::-;1970:42991;;;;;;;;;;;18932:61;;;;1970:42991;;;18932:61;;;;;;;;;;;;;;1970:42991;18932:61;;;18805:85;19053:21;;;;;:::i;:::-;1970:42991;;;;;;19030:57;;;;;;;;;;;;;1970:42991;19030:57;;;18805:85;1970:42991;;;3818:2;1970:42991;;3818:2;1970:42991;;;;465:4:31;838:5;1970:42991:58;19197:52;1946:22:29;19197:52:58;19925:58;19197:52;;:::i;:::-;1946:22:29;;:::i;:::-;838:5:31;:::i;:::-;1970:42991:58;;;;;;;;:::i;:::-;19646:1;1970:42991;;;;;;;;19658:60;;;;:::i;:::-;1970:42991;19791:22;;1970:42991;19925:58;:::i;:::-;1970:42991;;3818:2;1970:42991;;3818:2;1970:42991;;;;3665:25:29;3638:53;20020:48:58;;19889:196;20020:48;;:::i;3665:25:29:-;3638:53;;:::i;:::-;19889:196:58;;;:::i;:::-;1970:42991;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19791:88;19861:18;19925:58;:::i;19030:57::-;1970:42991;19030:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1970:42991;;;;;;;;;18932:61;19053:21;18932:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;18805:85;;;;18473:118;18553:27;;;1970:42991;18553:27;1970:42991;;18553:27;18477:53;18521:9;;;;;:::i;:::-;1970:42991;;18503:27;;;18477:53;;18417:45;1970:42991;;;18417:45;;18318:35;;;;;;;1970:42991;18318:35;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1970:42991;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;23395:26;;:::i;:::-;1970:42991;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;;;3545:47:33;;3570:4;1970:42991:58;3545:47:33;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;3545:6:33;1970:42991:58;3545:47:33;;;;;;1970:42991:58;3545:47:33;;;1970:42991:58;;;;;;;;;3545:47:33;;1970:42991:58;3545:47:33;;1970:42991:58;3545:47:33;;;;;;1970:42991:58;3545:47:33;;;:::i;:::-;;;1970:42991:58;;;;;;;3545:47:33;;;;;-1:-1:-1;3545:47:33;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12545:4;1970:42991;;12545:4;1970:42991;;12545:4;1970:42991;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;5510:15:33;;:26;5506:97;;5696:16;;-1:-1:-1;;;;;1970:42991:58;-1:-1:-1;1970:42991:58;1121:7:45;1970:42991:58;;;-1:-1:-1;1970:42991:58;;;;;;;;;759:395:45;;5696:16:33;1970:42991:58;;;;5644:79:33;;1970:42991:58;1443:95:33;1970:42991:58;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79:33;;1970:42991:58;;;;;;;;;;;;;;;7105:8:50;1970:42991:58;7051:25:50;1970:42991:58;;;;5634:90:33;;5053:20:51;;:::i;:::-;3445:249:52;1970:42991:58;3445:249:52;;-1:-1:-1;;;3445:249:52;;;;;;;;;;1970:42991:58;;;3445:249:52;1970:42991:58;;3445:249:52;;7051:25:50;:::i;:::-;7105:8;;;;;:::i;:::-;1970:42991:58;5848:15:33;;;5844:88;;1970:42991:58;;-1:-1:-1;;;5942:38:33;;-1:-1:-1;;;;;1970:42991:58;;;;5942:38:33;;1970:42991:58;;;;;;;;;;;;;;;;;-1:-1:-1;5942:6:33;1970:42991:58;;5942:38:33;;;;;;;;1970:42991:58;5942:38:33;1970:42991:58;5942:38:33;;1970:42991:58;5942:38:33;;;;;;1970:42991:58;5942:38:33;;;:::i;:::-;;;1970:42991:58;;;;;;;:::i;:::-;;5942:38:33;;;-1:-1:-1;5942:38:33;;5844:88;5886:35;;;1970:42991:58;5886:35:33;1970:42991:58;;;;;;5886:35:33;1970:42991:58;;;;;;;;;;;;5506:97:33;5559:33;;;;1970:42991:58;5559:33:33;1970:42991:58;;;;5559:33:33;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;6605:86;;:::i;:::-;1970:42991;;-1:-1:-1;;;699:32:35;;30329:4:58;1970:42991;699:32:35;;1970:42991:58;-1:-1:-1;;;;;699:32:35;1970:42991:58;;;699:6:35;1970:42991:58;;699:32:35;;;;;;;798:11;699:32;1970:42991:58;699:32:35;1970:42991:58;699:32:35;;;1970:42991:58;699:47:35;;1970:42991:58;;30329:4;798:11:35;:::i;:::-;30229:495:58;;:::i;:::-;1970:42991;699:32:35;1970:42991:58;;:::i;:::-;30452:39;1970:42991;;30494:15;-1:-1:-1;30448:118:58;;30642:75;30494:15;;30604:27;;:::i;:::-;30642:75;:::i;30448:118::-;30532:23;;;1970:42991;30532:23;1970:42991;;30532:23;699:32:35;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;1615:50:21;;1658:4;1970:42991:58;1615:50:21;;1970:42991:58;1615:50:21;1970:42991:58;;;1615:6:21;-1:-1:-1;;;;;1970:42991:58;1615:50:21;;;;;;1970:42991:58;1615:50:21;;;;1970:42991:58;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;2697:8;1970:42991;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;24363:38:58;;24395:4;1970:42991;24363:38;;1970:42991;-1:-1:-1;1970:42991:58;;;24363:6;-1:-1:-1;;;;;1970:42991:58;24363:38;;;;;;;1970:42991;;24418:100;1970:42991;;24363:38;;;1970:42991;;24475:20;1970:42991;;-1:-1:-1;;;;;1970:42991:58;;;;;24418:100;;:::i;:::-;1970:42991;;;;;;;;;;;;24363:38;;;;;;1970:42991;24363:38;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;6605:86;;:::i;:::-;6373:83;;:::i;:::-;1970:42991;;-1:-1:-1;;;699:32:35;;30971:4:58;1970:42991;699:32:35;;1970:42991:58;-1:-1:-1;;;;;699:32:35;1970:42991:58;;;699:6:35;1970:42991:58;;699:32:35;;;;;;;798:11;699:32;1970:42991:58;699:32:35;1970:42991:58;699:32:35;;;:47;;1970:42991:58;;30971:4;798:11:35;:::i;:::-;34754:7:58;;:::i;:::-;1970:42991;34935:52;1970:42991;;34935:52;:::i;:::-;1970:42991;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;23689:38:58;;23721:4;1970:42991;23689:38;;1970:42991;-1:-1:-1;1970:42991:58;;;23689:6;-1:-1:-1;;;;;1970:42991:58;23689:38;;;;;;1970:42991;;;23689:38;;;1970:42991;23893:70;29554:71:61;23893:70:58;;;:::i;:::-;1970:42991;;;24147:19;1970:42991;;;;29554:71:61;;:::i;:::-;1970:42991:58;;;;29642:34:61;;;1970:42991:58;;;;;;;;;23689:38;;;;;;1970:42991;23689:38;;;;;;:::i;:::-;;;;;;;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;21361:100;21416:19;:44;21362;21315:28;;:::i;:::-;21362:19;;;;;;;;;:::i;:::-;1970:42991;21362:44;:::i;:::-;21416:19;;:::i;1970:42991::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;436:67:37;;:::i;:::-;1970:42991:58;;-1:-1:-1;;;17149:24:58;;-1:-1:-1;;;;;1970:42991:58;;;;17149:24;;1970:42991;;;;;;17149:6;1970:42991;17149:24;;;;;;;1970:42991;17149:24;;;1970:42991;17826:22;17316:70;17714:53;1970:42991;17715:33;1970:42991;17626:53;1970:42991;17627:33;17202:34;1970:42991;;17202:34;;:::i;:::-;17316:70;;;;:::i;:::-;17627:33;;;;:::i;:::-;17626:53;:::i;:::-;17715:33;;:::i;17714:53::-;17826:22;;:::i;:::-;;;:::i;:::-;1970:42991;;;;;;;17149:24;;;1970:42991;17149:24;;1970:42991;17149:24;;;;;;1970:42991;17149:24;;;:::i;:::-;;;1970:42991;;;;;;;17714:53;17149:24;;;;;-1:-1:-1;17149:24:58;;1970:42991;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;1441:44:21;;1479:4;1970:42991:58;1441:44:21;;1970:42991:58;-1:-1:-1;1970:42991:58;;;1441:6:21;-1:-1:-1;;;;;1970:42991:58;1441:44:21;;;;;;1970:42991:58;1441:44:21;1970:42991:58;1441:44:21;;;1970:42991:58;;;;;;;;;;;;;;;:::i;1441:44:21:-;;;;;;1970:42991:58;1441:44:21;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;1247:38:21;;1279:4;1970:42991:58;1247:38:21;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;-1:-1:-1;1970:42991:58;;;1247:6:21;1970:42991:58;;1247:38:21;;;;;;1970:42991:58;;;;;;;1247:38:21;;;1970:42991:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38:21;;;;;;;;;;;1970:42991:58;1247:38:21;;;;;;:::i;:::-;;;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;892:35:21;;921:4;1970:42991:58;892:35:21;;1970:42991:58;-1:-1:-1;1970:42991:58;;;892:6:21;-1:-1:-1;;;;;1970:42991:58;892:35:21;;;;;;1970:42991:58;892:35:21;1970:42991:58;892:35:21;;;1970:42991:58;;;;;;;;;;;;;;;:::i;892:35:21:-;;;;;;1970:42991:58;892:35:21;;;;;;:::i;:::-;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;3345:39:33;1970:42991:58;;;:::i;:::-;;;-1:-1:-1;;;3345:39:33;;3361:10;1970:42991:58;3345:39:33;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39:33;;:6;1970:42991:58;-1:-1:-1;;;;;3345:6:33;1970:42991:58;3345:39:33;;;;;;;;1970:42991:58;;;;;;;3345:39:33;1970:42991:58;3345:39:33;;1970:42991:58;3345:39:33;;;;;;1970:42991:58;3345:39:33;;;:::i;:::-;;;1970:42991:58;;;;;;;:::i;:::-;;3345:39:33;;;;;;-1:-1:-1;3345:39:33;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;6605:86;;:::i;:::-;1970:42991;;-1:-1:-1;;;699:32:35;;27975:4:58;1970:42991;699:32:35;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;699:6:35;1970:42991:58;699:6:35;1970:42991:58;;699:32:35;;;;;;;798:11;699:32;1970:42991:58;699:32:35;1970:42991:58;699:32:35;;;:47;;1970:42991:58;;27975:4;798:11:35;:::i;:::-;1229:15:22;;3281:5:55;1229:15:22;;3066:5:55;1970:42991:58;3060:42:55;1271:27:22;;;;1267:109;;28245:57:58;;;;:::i;:::-;3560:6;;28395:49;;;;28391:121;;28583:141;28391:121;;;:::i;:::-;28583:141;;;:::i;:::-;28761:124;:32;;;;;28808:31;;;;:::i;:::-;3760:3;28900:40;;28896:118;;-1:-1:-1;29833:31:58;;;;;;1970:42991;;;;;;;;;;;;;;29920:32;1744:19:31;29920:32:58;;;;;:::i;:::-;1744:19:31;;:::i;:::-;30091:34:58;-1:-1:-1;30053:131:58;;1970:42991;;;;;;;;30053:131;30148:25;;;1970:42991;30148:25;1970:42991;;30148:25;1970:42991;-1:-1:-1;;;1970:42991:58;;;;;;;;29833:209;1970:42991;;;;;;;;;;;;;;;30011:30;1744:19:31;30011:30:58;;;;;:::i;1744:19:31:-;29833:209:58;;28896:118;28963:40;;;;;1970:42991;28963:40;1970:42991;;;28963:40;28761:124;28854:31;;;;:::i;:::-;28761:124;;28391:121;28467:34;;;1970:42991;28467:34;1970:42991;;28467:34;1267:109:22;1321:44;;;;;1970:42991:58;1321:44:22;1970:42991:58;;;;;1321:44:22;699:32:35;;;;1970:42991:58;699:32:35;1970:42991:58;699:32:35;;;;;;;:::i;:::-;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;23241:27;;:::i;1970:42991::-;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;6018:37:61;5862:19;4041:256;5963:94;1970:42991:58;9314:20;1970:42991;;-1:-1:-1;;;;;9390:20:58;1970:42991;;;;;;;;;;;;;;;;;;;;;4041:256:61;;:::i;:::-;1970:42991:58;;;;;;;:::i;:::-;5850:31:61;5862:19;;6018;5977:37;5862:19;5850:95;;5977:19;;;:::i;:37::-;6018:19;;:::i;:37::-;5963:94;;:::i;5850:95::-;6018:19;5977:37;1970:42991:58;5850:95:61;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;-1:-1:-1;1970:42991:58;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;-1:-1:-1;;;;;2951:6:33;1970:42991:58;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;6099:41:51;:5;:41;:::i;:::-;6554:47;:8;:47;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:51;;1970:42991:58;;;;5625:4:51;1970:42991:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;20240:39:58;;20273:4;1970:42991;20240:39;;1970:42991;20240:6;-1:-1:-1;;;;;1970:42991:58;;20240:39;1970:42991;;;;20240:39;;;;;;;1970:42991;20240:39;;;1970:42991;-1:-1:-1;20236:491:58;;;1970:42991;;;;;;;;;;;;20339:38;;20273:4;1970:42991;20339:38;;1970:42991;20339:38;;;;;;1970:42991;;;20339:38;;;20236:491;20446:48;37266:66:61;36977:33;465:4:31;838:5;36976:54:61;36592:159;20446:48:58;;;:::i;:::-;36592:159:61;;;;;;;:::i;:::-;36977:33;;;;;:::i;36976:54::-;838:5:31;;;:::i;:::-;1970:42991:58;37266:66:61;;:::i;:::-;1970:42991:58;;;;;20240:39;1970:42991;;;;20339:38;;;;;;1970:42991;20339:38;;;;;;:::i;:::-;;;;;;;;20236:491;20655:18;1970:42991;20655:18;20698;20236:491;;20240:39;;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991;;;;;;;:::i;:::-;20240:39;;;;;;-1:-1:-1;20240:39:58;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;;-1:-1:-1;;;1911:35:21;;1940:4;1970:42991:58;1911:35:21;;1970:42991:58;1911:35:21;;;1970:42991:58;;;1911:6:21;-1:-1:-1;;;;;1970:42991:58;1911:35:21;;;;;;;1970:42991:58;1911:35:21;1970:42991:58;1911:35:21;;;1970:42991:58;1986:37:21;;2063:38;1986:37;;;1970:42991:58;2063:38:21;;1970:42991:58;;;;;;;;;;;1911:35:21;;;;;;-1:-1:-1;1911:35:21;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26395:35;;26424:4;1970:42991;26395:35;;1970:42991;;26395:6;1970:42991;26395:6;-1:-1:-1;;;;;26395:6:58;1970:42991;26395:35;;;;;;;1970:42991;26395:35;;;1970:42991;-1:-1:-1;26381:49:58;;1970:42991;;-1:-1:-1;;;26473:39:58;;26424:4;1970:42991;26473:39;;1970:42991;-1:-1:-1;1970:42991:58;;;26395:6;-1:-1:-1;;;;;1970:42991:58;26473:39;;;;;;;1970:42991;26473:39;;;1970:42991;;;;;26440:72;26553:28;1970:42991;;;;;;26622:28;1970:42991;;;;;;2697:8;1970:42991;;;;2774:5;1970:42991;;;;26834:18;1970:42991;;;;26885:18;1970:42991;;;;26939:21;1970:42991;;;;27008:35;1970:42991;;;;27086:28;1970:42991;;;;3239:6;1970:42991;;;;27264:34;1970:42991;;;;3560:6;1970:42991;;;;3760:3;1970:42991;;;;4057:7;1970:42991;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26473:39;;;;;;1970:42991;26473:39;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;26395:35;;;;;;1970:42991;26395:35;;;;;;:::i;:::-;;;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;-1:-1:-1;;;;;1970:42991:58;;:::i;:::-;;;;624:7:45;1970:42991:58;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;436:67:37;;:::i;:::-;10084:78:58;10128:24;;10084:78;:::i;:::-;10173:109;;;;;;;;1970:42991;10173:109;;:::i;:::-;1970:42991;;;;:::i;:::-;;;;:::i;:::-;10359:33;;8921:169:61;10482:24:58;9016:54:61;9125:31;10482:24:58;;;9016:73:61;10482:24:58;;1970:42991;;;;;;;;;;8763:115:61;;;:17;;:115;:17;;;8922:77;8763:115;8923:31;9016:30;8763:115;;8923:56;8763:115;;;8923:31;:::i;8922:77::-;9016:30;;;:::i;:54::-;:73;:::i;:::-;8921:169;;:::i;:::-;9125:31;;:::i;:::-;1970:42991:58;9105:51:61;;9101:210;;1970:42991:58;10408:304;1970:42991;;;;;;9101:210:61;12118:29;;;1970:42991:58;9271:29:61;1970:42991:58;;9271:29:61;8763:115;;8922:77;8763:115;8923:31;9016:30;8763:115;;8923:56;8763:115;;;8923:31;:::i;10355:703:58:-;10817:24;1970:42991;;;;;;10817:24;;;;11972:31:61;1970:42991:58;10817:24;11972:31:61;:::i;:::-;1970:42991:58;11952:51:61;;11948:210;;12597:31;12234:115;;12498:54;12597:76;12234:115;12597:56;12234:115;:17;;:115;:17;;;12498:30;12234:115;;;;12498:30;;:::i;:54::-;12597:31;;:::i;:56::-;:76;:::i;:::-;2004:6:31;;;2000:58;;2153:5;2560:120;2153:5;1970:42991:58;2153:5:31;;:::i;:::-;2560:120;;;;;;;;;;;10355:703:58;;2000:58:31;2033:14;;;1970:42991:58;2033:14:31;1970:42991:58;;2033:14:31;12234:115:61;;12498:30;;12234:115;;10173:109:58;10248:22;;;;:::i;:::-;10173:109;;1970:42991;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;3082:40:33;;3107:4;1970:42991:58;3082:40:33;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;3082:6:33;1970:42991:58;3082:40:33;;;;;;;1970:42991:58;3082:40:33;;;1970:42991:58;;;;;;;;3082:40:33;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991:58;;;;;3082:40:33;;;;;;;;1970:42991:58;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;12179:31;;;1970:42991;12179:31;1970:42991;;12179:31;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;2774:5;1970:42991;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;6339:10:33;-1:-1:-1;1970:42991:58;;;1121:7:45;1970:42991:58;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;23051:59;23082:27;;:::i;:::-;23051:59;:::i;1970:42991::-;;;;;5175:32:33;1970:42991:58;;;:::i;:::-;436:67:37;;;;;;:::i;:::-;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;5175:32:33;;1970:42991:58;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;991:8:30;1970:42991:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;991:8:30;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;21014:28;;:::i;:::-;1970:42991;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;22557:48;-1:-1:-1;;;;;22557:20:58;1970:42991;;;;22557:48;:::i;1970:42991::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;436:67:37;;:::i;:::-;1970:42991:58;;-1:-1:-1;;;15796:24:58;;-1:-1:-1;;;;;1970:42991:58;;;;15796:24;;1970:42991;;;;;;15796:6;1970:42991;15796:24;;;;;;;1970:42991;15796:24;;;1970:42991;16502:22;15974:70;16381:63;1970:42991;16382:43;1970:42991;16283:63;1970:42991;16284:43;15859:35;1970:42991;;;15859:35;:::i;15796:24::-;;;1970:42991;15796:24;;1970:42991;15796:24;;;;;;1970:42991;15796:24;;;:::i;:::-;;;1970:42991;;;;;;;16381:63;15796:24;;;;;-1:-1:-1;15796:24:58;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;22049:14;1970:42991;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;6533:20:33;;:::i;1970:42991:58:-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;2727:2:33;1970:42991:58;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;1443:95:33;1970:42991:58;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24698:44;;24736:4;1970:42991;24698:44;;1970:42991;;24698:6;1970:42991;24698:6;-1:-1:-1;;;;;24698:6:58;1970:42991;24698:44;;;;;;;1970:42991;24698:44;;;1970:42991;-1:-1:-1;24670:72:58;;1970:42991;;-1:-1:-1;;;24774:39:58;;24736:4;1970:42991;24774:39;;1970:42991;-1:-1:-1;1970:42991:58;;;24698:6;-1:-1:-1;;;;;1970:42991:58;24774:39;;;;;;;1970:42991;24774:39;;;1970:42991;;;;;24752:61;1970:42991;;;;;24854:50;;24736:4;1970:42991;24854:50;;1970:42991;;24698:6;1970:42991;24698:6;-1:-1:-1;;;;;24698:6:58;1970:42991;24854:50;;;;;;;1970:42991;24854:50;;;1970:42991;;;;;;24933:13;;:::i;:::-;1970:42991;;;;;24978:14;1970:42991;;;;;;;;25152:52;1970:42991;;;;;:::i;:::-;42246:1;1970:42991;;;;;;;;42283:20;1970:42991;;-1:-1:-1;;;;;1970:42991:58;;;;42258:45;;;:::i;:::-;1970:42991;;;42313:45;;;:::i;:::-;1970:42991;;;;25002:52;1970:42991;;;;;;;;;25152:52;:::i;:::-;1970:42991;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;25432:29;;1970:42991;;;;;;25504:31;1970:42991;25504:31;;1970:42991;;;;;;25576:29;1970:42991;;;;;;;;;;;25647:35;;24736:4;1970:42991;25647:35;;1970:42991;;24698:6;1970:42991;24698:6;-1:-1:-1;;;;;24698:6:58;1970:42991;25647:35;;;;;;;1970:42991;25647:35;;;1970:42991;25717:28;1970:42991;;25717:28;;1970:42991;;;;;;;;;;25775:23;;1970:42991;;;;;;;25836:31;1970:42991;;;;;;;25997:208;;1970:42991;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25997:208;26140:54;26064:27;;:::i;:::-;1970:42991;;;;;26140:54;:::i;:::-;1970:42991;;;;25997:208;;25647:35;;;;1970:42991;25647:35;1970:42991;25647:35;;;;;;;:::i;:::-;;;;24854:50;;;1970:42991;24854:50;;1970:42991;24854:50;;;;;;1970:42991;24854:50;;;:::i;:::-;;;1970:42991;;;;;24854:50;;;;;;-1:-1:-1;24854:50:58;;24774:39;;;;;;1970:42991;24774:39;;;;;;:::i;:::-;;;;;;24698:44;;;;;;1970:42991;24698:44;;;;;;:::i;:::-;;;;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;4942:26:33;1970:42991:58;;;:::i;:::-;;;;;4124:49:33;1970:42991:58;;;:::i;:::-;;;-1:-1:-1;;;4124:49:33;;4144:10;1970:42991:58;4124:49:33;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;4124:6:33;1970:42991:58;4124:49:33;;;;;;;;;1970:42991:58;;4190:4:33;1970:42991:58;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;22734:20;1970:42991;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;22405:19;1970:42991;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;436:67:37;;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14088:175;13839:60;1970:42991;;;;;;;;;;;;;;13685:16;;:::i;:::-;1970:42991;;;;;;13839:60;:::i;:::-;1970:42991;;;;;;;;;;14088:175;:::i;:::-;1970:42991;;;;;;13910:353;;;1970:42991;39774:54;39682:48;:19;;;:::i;:::-;1970:42991;39710:19;;;:::i;39682:48::-;39774:22;39805;39774;;;:::i;:54::-;1970:42991;;;;;;;;;;;;;;;;;465:4:31;1970:42991:58;;;;;;;;;;;;;;;;;40084:34;;:72;;;;;1970:42991;40080:140;;;;;14379:19;41407:8;41048:159;41613:8;14379:19;43321:66;14379:19;;;14933:75;14379:19;838:5:31;14379:19:58;14907:15;14379:19;40998:11;14379:19;:58;:19;14407:29;14379:19;838:5:31;14379:19:58;;:::i;:::-;1970:42991;14407:26;;:29;:::i;14379:58::-;1970:42991;;;;838:5:31;:::i;:::-;1970:42991:58;;;;;838:5:31;:::i;:::-;1970:42991:58;;;;;;;;;40877:86;40878:37;:19;;;;:::i;:37::-;40925;:19;;;;:::i;40877:86::-;40998:11;:::i;:::-;41048:159;:::i;:::-;41313:33;41312:54;41313:33;;;;;:::i;41407:8::-;838:5:31;;;;:::i;41613:8:58:-;14907:15;:::i;:::-;1970:42991;14975:15;;;14933:75;;:::i;:::-;;15053:64;15081:35;15053:64;:::i;:::-;;15150:28;;;:::i;40080:140::-;40179:30;;;1970:42991;40179:30;1970:42991;;40179:30;40084:72;1970:42991;-1:-1:-1;;;40084:72:58;;;;;1970:42991;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;:::i;:::-;;9819:16;;;1970:42991;9819:16;1970:42991;;9819:16;1970:42991;;;;;;-1:-1:-1;;1970:42991:58;;;;;22234:20;1970:42991;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;436:67:37;;;:::i;:::-;1970:42991:58;12937:23;:85;;;1970:42991;12937:144;;;1970:42991;;;;;;;;;;;12937:144;-1:-1:-1;13038:34:58;1970:42991;;;;;;;12937:144;1970:42991;;;;12937:85;-1:-1:-1;1970:42991:58;;;;;;;12937:85;1970:42991;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;3819:43:33;1970:42991:58;;;:::i;:::-;;;-1:-1:-1;;;3819:43:33;;3834:10;1970:42991:58;3819:43:33;;1970:42991:58;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;;2434:8:33;1970:42991:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;2434:8:33;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;6605:86;;:::i;:::-;6373:83;;:::i;:::-;6876:131;;:::i;:::-;1970:42991;;-1:-1:-1;;;699:32:35;;31461:4:58;1970:42991;699:32:35;;1970:42991:58;-1:-1:-1;;;;;699:32:35;1970:42991:58;;;699:6:35;1970:42991:58;;699:32:35;;;;;;;798:11;699:32;1970:42991:58;699:32:35;1970:42991:58;699:32:35;;;:47;;1970:42991:58;;31461:4;798:11:35;:::i;:::-;36198:272:58;;:::i;:::-;36444:18;1970:42991;;36444:18;:::i;:::-;6959:1;;:::i;1970:42991::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;877:25:53;;;;862:40;1970:42991:58;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;-1:-1:-1;;1970:42991:58;;;;:::o;:::-;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1970:42991:58;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1970:42991:58;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2769:110:33:-;1970:42991:58;;-1:-1:-1;;;2839:33:33;;2866:4;2839:33;;;1970:42991:58;2839:33:33;1970:42991:58;;;2839:6:33;-1:-1:-1;;;;;1970:42991:58;2839:33:33;;;;;;;-1:-1:-1;2839:33:33;;;2832:40;2769:110;:::o;2839:33::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991:58;;;;;2769:110:33;:::o;2839:33::-;;;-1:-1:-1;2839:33:33;;859:1:61;1970:42991:58;;883:1:61;859;;;;;;;:::o;:::-;1970:42991:58;;;859:1:61;;;;;;;;;1970:42991:58;;859:1:61;;;;;;:::o;:::-;1970:42991:58;;859:1:61;;;;;;;;;;;;:::o;1970:42991:58:-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;25301:16;1970:42991;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;465:4:31;1970:42991:58;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1931:430:23;1970:42991:58;;2303:50:23;;;2320:22;;1970:42991:58;;;;;;;;;;2303:50:23;;;;;;:::i;:::-;1970:42991:58;2293:61:23;;1931:430;:::o;1970:42991:58:-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;3818:2::-;;;;;;;;;:::o;6697:173::-;1970:42991;;-1:-1:-1;;;6762:39:58;;6795:4;6762:39;;;1970:42991;6762:39;1970:42991;;;6762:6;-1:-1:-1;;;;;1970:42991:58;6762:39;;;;;;;-1:-1:-1;6762:39:58;;;6697:173;1970:42991;;6758:106;;6697:173::o;6758:106::-;6833:20;;;-1:-1:-1;6833:20:58;6762:39;-1:-1:-1;6833:20:58;6762:39;;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991;;;;;;;:::i;:::-;6762:39;;;;;;-1:-1:-1;6762:39:58;;6462:137;1970:42991;;-1:-1:-1;;;6522:19:58;;;1970:42991;6522:19;1970:42991;6522:6;-1:-1:-1;;;;;1970:42991:58;6522:19;;;;;;;;;;;6462:137;6518:75;;;6462:137::o;6518:75::-;6564:18;;;6522:19;6564:18;6522:19;;6564:18;6522:19;;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991;;;;;;;:::i;:::-;6522:19;;;;;;-1:-1:-1;6522:19:58;;42408:167;42476:26;;:::i;:::-;1970:42991;42472:97;;42408:167::o;42472:97::-;42534:24;;;42506:5;42534:24;;42506:5;42534:24;1708:434:35;;-1:-1:-1;;;;;1970:42991:58;;;1817:25:35;;;-1:-1:-1;1930:20:35;1840:1;1942:7;1970:42991:58;1942:7:35;1930:20;:::i;:::-;1970:42991:58;;-1:-1:-1;;;1530:22:35;;;;1970:42991:58;;1530:22:35;1970:42991:58;1530:22:35;1970:42991:58;1530:6:35;1970:42991:58;;1530:22:35;;;;;;;;;;;1840:1;1530:22;;;1813:323;1970:42991:58;;;;;;;;;;;;;;;1530:59:35;;:22;:59;;1970:42991:58;1952:10:35;1970:42991:58;;;;;;;;;;1530:59:35;;;;;;;1840:1;1530:59;;;1813:323;1970:42991:58;;;1914:125:35;;1708:434::o;1914:125::-;2107:18;;;1840:1;2006:18;1530:22;1840:1;2006:18;1530:59;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991:58;;;;;;;:::i;:::-;1530:59:35;;;;;;;;;:22;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991:58;;;;;;;;;;;;1530:22:35;;;;;1970:42991:58;1530:22:35;;;;;;;1813:323;2059:10;;;;:25;2055:81;;1708:434::o;509:165:37:-;-1:-1:-1;;;;;586:6:37;1970:42991:58;564:10:37;:29;560:108;;509:165::o;560:108::-;616:41;;;;;564:10;616:41;1970:42991:58;;616:41:37;;43400:264:58;1970:42991;;-1:-1:-1;;;43528:38:58;;43560:4;43528:38;;;1970:42991;;-1:-1:-1;1970:42991:58;;;43528:6;-1:-1:-1;;;;;1970:42991:58;43528:38;;;;;;;;;;;43400:264;43599:12;43630:27;43644:12;43585:27;43599:12;;;:::i;:::-;;43585:27;:::i;43528:38::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;43877:1082;44069:28;;;;:53;;44140:28;;;;:53;;44913:39;44796:36;44797:18;:26;:18;;:26;:::i;44796:36::-;44854:18;44914:29;44853:36;44854:18;:26;:18;;:26;:::i;44853:36::-;44914:21;;:29;:::i;44140:53::-;;465:4:31;44140:53:58;;;44069;;465:4:31;44069:53:58;;;14548:1763:61;;;;;1511:7:31;1625:13;14548:1763:61;1511:7:31;:::i;1625:13::-;38815:41:61;38825:30;;;:::i;:::-;38815:41;:::i;:::-;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;2632:10:61;;1970:42991:58;;;;;;;;;;838:5:31;465:4;838:5;;;;:::i;:::-;1970:42991:58;;;;;;;;:::i;:::-;15705:1:61;1970:42991:58;;;;;;;;15668:39:61;15845:50;;;;;:::i;:::-;1970:42991:58;;;;;;;;;15845:151:61;;;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;;;16146:128:61;16145:159;38815:41;15815:233;38815:41;;16119:185;38815:41;;:::i;15815:233::-;15777:271;;;:::i;:::-;1970:42991:58;16146:61:61;:23;;;;:::i;:61::-;838:5:31;;;;;:::i;:::-;1970:42991:58;16146:128:61;;:::i;:::-;16145:159;:::i;:::-;16119:185;;:::i;:::-;1970:42991:58;14548:1763:61:o;1320:325:31:-;;465:4;1970:42991:58;;;;;;;;;;;;;;;1625:13:31;;;:::i;32277:399:58:-;;-1:-1:-1;;;;;32402:27:58;;;:::i;:::-;1970:42991;-1:-1:-1;;32462:27:58;;;:::i;:::-;1970:42991;;;;32379:50;1970:42991;;;32505:56;1970:42991;;;;;;;;;;;32505:56;-1:-1:-1;;;;;32572:6:58;1970:42991;;;;32624:44;1970:42991;32624:44;;1970:42991;;;;;32624:44;;;;;;:::i;:::-;32572:97;;;;;1970:42991;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;32572:97;;1970:42991;32572:97;;;1970:42991;;;;;;;;;;;:::i;:::-;32572:97;;;;;;;;;;;;32277:399;:::o;32572:97::-;;;;:::i;:::-;32277:399::o;32572:97::-;1970:42991;;-1:-1:-1;1970:42991:58;;;;;32682:1796;;;;32892:51;;;:98;;;;32682:1796;32888:154;;1970:42991;;:::i;:::-;33154:45;;;;:::i;:::-;33210:33;-1:-1:-1;;;;;33257:6:58;1970:42991;;;;;;;;;;33257:39;;33290:4;33257:39;;;1970:42991;33257:39;;;;1970:42991;33257:39;;;;;;;;;1970:42991;33257:39;;;32682:1796;-1:-1:-1;33253:331:58;;;33330:27;34269:192;33330:27;;34269:192;33330:27;;;:::i;:::-;33399:47;;;;:::i;:::-;33253:331;;1970:42991;33638:36;;;;:::i;:::-;1970:42991;;;33726:34;;;:::i;:::-;33684:39;;;;1970:42991;;;;;;33814:36;;;:::i;:::-;33770:41;;;;1970:42991;;;;;;;33902:34;;;:::i;:::-;1970:42991;;;33860:39;;;1970:42991;;;;;33860:39;1970:42991;;;;;;;;;;;;;;;;;;;33093:16;1970:42991;33997:184;1970:42991;;33997:184;1970:42991;;;;33997:184;;;;1970:42991;;;;;;;;;;;;;;;;;;;;;;;33997:184;;;;1970:42991;;34269:192;;;;;1970:42991;;;;;;;;;;;;;;;;;;;;;;;34269:192;;1970:42991;;34269:192;;;;;;:::i;:::-;34192:279;;;;;1970:42991;;;;;;;;;;;;;;;;;34192:279;;1970:42991;33257:39;34192:279;;1970:42991;;;;;;;;;;;:::i;33253:331::-;33477:51;;;34269:192;33477:51;;34269:192;33477:51;;33542:31;33253:331;;;33257:39;;;;;;;;;;;;;;;;:::i;:::-;;;1970:42991;;;;;;;:::i;:::-;33257:39;;;;;;;;;1970:42991;;;;;;;;;32888:154;33013:18;;;1970:42991;33013:18;;1970:42991;33013:18;32892:98;32975:15;;32947:43;;32892:98;;35000:947;3239:6;35111:57;;35107:127;;2263:6:61;465:4:31;1970:42991:58;;;;;;;;;35533:47;;;:::i;:::-;35614:31;;;;:::i;:::-;1970:42991;35591:54;1970:42991;;;;;;;;;;35591:54;1970:42991;;35661:76;1970:42991;;;;;;;;;;;35661:76;-1:-1:-1;;;;;35748:6:58;1970:42991;;;35833:56;;1970:42991;35833:56;;1970:42991;;;;;35833:56;;;;;;:::i;:::-;35748:151;;;;;1970:42991;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;35748:151;;1970:42991;35748:151;;;1970:42991;;;;;;;;;;;:::i;:::-;35748:151;;;;;;;;;;;;35910:30;35000:947;:::o;35748:151::-;;;;:::i;35107:127::-;35191:32;;;;;;;;36667:517;465:4:31;36750:35:58;;36746:100;;36971:48;1970:42991;;;;;;;;;;36971:48;1970:42991;37035:45;1970:42991;;;;;;37035:45;-1:-1:-1;;;;;37091:6:58;1970:42991;;;37146:30;1970:42991;37146:30;;1970:42991;;37146:30;;;;;:::i;:::-;37091:86;;;;;1970:42991;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;37091:86;;1970:42991;37091:86;;;1970:42991;;;;;;;;;;;:::i;:::-;37091:86;;;;;;;;;;36667:517;:::o;36746:100::-;36808:27;;;;;;;;37706:289;1970:42991;37778:26;:15;:26;:::i;:::-;1970:42991;;;;37814:32;1970:42991;;;37814:32;1970:42991;37862:37;1970:42991;;;;;;37862:37;-1:-1:-1;;;;;37910:6:58;1970:42991;;;37960:27;1970:42991;37960:27;;1970:42991;;37960:27;;;;;:::i;:::-;37910:78;;;;;1970:42991;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;;;37910:78;;1970:42991;37910:78;;;1970:42991;;;;;;;;;;;:::i;38245:202:61:-;465:4:31;1970:42991:58;;;;;;;;;2263:6:61;1970:42991:58;;;;;;;;;;;;;38245:202:61;:::o;38501:380:58:-;1970:42991;;-1:-1:-1;;;38624:38:58;;38656:4;38624:38;;;1970:42991;-1:-1:-1;1970:42991:58;;;38624:6;-1:-1:-1;;;;;1970:42991:58;38624:38;;;;;;38793:81;1970:42991;38624:38;;;;38501:380;38727:48;;;;:::i;:::-;38793:81;;;:::i;38624:38::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;39143:176:61;465:4:31;1970:42991:58;;;;;;;;;;;;;;;;39253:41:61;;;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;39243:69:61;;;:::i;3845:262:51:-;-1:-1:-1;;;;;3938:11:51;1970:42991:58;3929:4:51;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1970:42991:58;;4204:80:51;;;1970:42991:58;2079:95:51;1970:42991:58;;4226:11:51;1970:42991:58;2079:95:51;;1970:42991:58;4239:14:51;2079:95;;;1970:42991:58;4255:13:51;2079:95;;;1970:42991:58;3929:4:51;2079:95;;;1970:42991:58;2079:95:51;4204:80;;2079:95;1970:42991:58;;;;;;;;;;;;;;4194:91:51;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;31730:541:58;31990:274;31730:541;32075:20;1970:42991;-1:-1:-1;;;;;32143:20:58;1970:42991;;;;;;;;;;;;;;;;;;;;;;31990:274;;:::i;:::-;31930:334;;31730:541;:::o;21474:460::-;1970:42991;;-1:-1:-1;;;21771:38:58;;21803:4;21771:38;;;1970:42991;;-1:-1:-1;1970:42991:58;;;21771:6;-1:-1:-1;;;;;1970:42991:58;21771:38;;;;;;;;;;;21474:460;21744:65;21879:48;21744:65;21879:48;:::i;21771:38::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;37190:450;1970:42991;;-1:-1:-1;;;37287:38:58;;37319:4;37287:38;;;1970:42991;-1:-1:-1;1970:42991:58;;;37287:6;-1:-1:-1;;;;;1970:42991:58;37287:38;;;;;;37416:70;1970:42991;37287:38;;;;37190:450;37416:70;;:::i;:::-;37496:109;;37190:450;37496:109;;;;:::i;:::-;37571:22;;;:::i;:::-;37496:109;;;;37287:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;30425:1078:61;;;30656:19;;;:::i;:::-;1970:42991:58;30656:19:61;;30782:17;;;1970:42991:58;30782:17:61;1970:42991:58;30782:17:61;:::o;30652:235::-;30820:19;;;:::i;:::-;1970:42991:58;30820:24:61;30816:71;;31004:19;30917:37;30986;30652:235;30917:19;;;:::i;:::-;1970:42991:58;30917:37:61;:::i;31004:19::-;1970:42991:58;30986:37:61;;:::i;:::-;31185:24;;;;;465:4:31;1970:42991:58;;;;;;;;;;;;;;;1625:13:31;;;:::i;:::-;31288:25:61;1970:42991:58;30425:1078:61;:::o;31181:261::-;465:4:31;;1970:42991:58;;;;;;;;;;;;;;;1625:13:31;;;:::i;:::-;31407:24:61;883:1;30425:1078;:::o;30816:71::-;30860:16;;;1970:42991:58;30860:16:61;883:1;30860:16;:::o;38993:390:58:-;1970:42991;;-1:-1:-1;;;39112:38:58;;39144:4;39112:38;;;1970:42991;-1:-1:-1;1970:42991:58;;;39112:6;-1:-1:-1;;;;;1970:42991:58;39112:38;;;;;;;;;;;38993:390;1970:42991;29554:71:61;39267:20:58;1970:42991;;39343:19;1970:42991;;;;;-1:-1:-1;;;;;1970:42991:58;;;;;29554:71:61;;:::i;:::-;29642:34;;;38993:390:58;:::o;39112:38::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;43670:201;43793:19;1970:42991;;;;;:::i;:::-;;;;:::i;:::-;43770:42;43793:19;;43815:22;-1:-1:-1;;;;;43815:22:58;:32;:22;;1970:42991;;;;;;;;;;;43815:32;;;;;;;;;-1:-1:-1;43815:32:58;;;43770:94;;43670:201;:::o;43770:94::-;;465:4:31;43670:201:58;:::o;887:427:31:-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;2560:120;;1186:122;;;;;;;;887:427;:::o;41635:466:58:-;1970:42991;;;;;;;;;;;;;;;;465:4:31;1970:42991:58;;;;;;;;;;;;;;;;41970:30;;:64;;;;;41635:466;41966:129;;;;;41635:466::o;41966:129::-;42057:27;;;-1:-1:-1;42057:27:58;;-1:-1:-1;42057:27:58;41970:64;1970:42991;-1:-1:-1;;;41970:64:58;;;;;5575:489:61;6018:37;465:4:31;5575:489:61;6018:19;5977:37;838:5:31;5575:489:61;5977:19;;;:::i;6018:37::-;838:5:31;;:::i;:::-;1970:42991:58;5575:489:61;:::o;9264:218:56:-;-1:-1:-1;;;;;9344:25:56;;;;9340:105;;1970:42991:58;9264:218:56;:::o;9340:105::-;9392:42;;;;;9423:3;9392:42;1970:42991:58;;;;9392:42:56;;11296:213;1970:42991:58;11374:24:56;;;;11370:103;;1970:42991:58;11296:213:56;:::o;11370:103::-;9392:42;;;11421:41;;11452:2;11421:41;1970:42991:58;;;;11421:41:56;;15296:213;1970:42991:58;15374:24:56;;;;15370:103;;1970:42991:58;15296:213:56;:::o;15370:103::-;9392:42;;;15421:41;;15452:2;15421:41;1970:42991:58;;;;15421:41:56;;35123:352:61;36977:33;465:4:31;838:5;36976:54:61;35123:352;36592:159;1744:19:31;35123:352:61;;37266:66;35123:352;36592:159;:::i;37266:66::-;1744:19:31;:::i;18080:5181:55:-;18246:1;18241:6;;;;18237:53;;23237:6;;19217:14;;19285:8;19278:16;;;19274:92;;18080:5181;19383:15;19390:7;19898:6;19383:15;;;19379:90;;18080:5181;19493:7;19486:15;;;19482:90;;18080:5181;19596:7;19589:15;;;19585:89;;18080:5181;19698:6;19691:14;;;19687:87;;18080:5181;19798:6;19791:14;;;19787:87;;18080:5181;19891:14;;19887:61;;18080:5181;20374:1;1970:42991:58;;;22284:6:55;;;;:::i;:::-;1970:42991:58;;;22393:6:55;;;;:::i;:::-;1970:42991:58;;;22504:6:55;;;;:::i;:::-;1970:42991:58;;;22613:6:55;;;;:::i;:::-;1970:42991:58;;;22723:6:55;;;;:::i;:::-;1970:42991:58;;;22833:6:55;;;;:::i;:::-;1970:42991:58;;;23237:6:55;;;:::i;:::-;23232:11;;1970:42991:58;;18080:5181:55;:::o;19887:61::-;1970:42991:58;;19887:61:55;;19787:87;1970:42991:58;;;19858:1:55;1970:42991:58;19787:87:55;;;19687;19732:1;1970:42991:58;;;;19687:87:55;;;19585:89;19631:2;1970:42991:58;;19658:1:55;1970:42991:58;19585:89:55;;;19482:90;19528:2;1970:42991:58;;19555:2:55;1970:42991:58;19482:90:55;;;19379;19425:2;1970:42991:58;;19452:2:55;1970:42991:58;19379:90:55;;;19274:92;-1:-1:-1;1970:42991:58;;-1:-1:-1;19321:3:55;1970:42991:58;;;19274:92:55;;17902:2761:61;;;;;;;;1970:42991:58;18358:15:61;:26;:15;:26;:::i;:::-;1970:42991:58;;;;;;;;;;18542:33:61;;;18538:120;;18668:44;18722;1970:42991:58;;;:::i;:::-;;;;;;;;;;19074:39:61;18936:307;19074:39;;;;;1970:42991:58;;19131:41:61;;;;1970:42991:58;19190:39:61;1970:42991:58;;;;19190:39:61;;1970:42991:58;;;;;18936:307:61;;:::i;:::-;1970:42991:58;;;;-1:-1:-1;19398:135:61;;;;17902:2761;19377:515;;;;;17902:2761;19961:131;;;;1970:42991:58;19961:131:61;;;;;;;;;:::i;:::-;1970:42991:58;;;;-1:-1:-1;20208:449:61;;17902:2761;;;;;;;:::o;20208:449::-;26239:69;;;;;;;;;;;;;;;:::i;:::-;465:4:31;1970:42991:58;;;;;;;;;;;;;;;;26216:119:61;28122:32;26216:119;;:::i;:::-;26526:131;;;;;26580:19;26559;;;:::i;:::-;1970:42991:58;26580:19:61;;:::i;:::-;1970:42991:58;26526:131:61;;26739:115;;;;;;28122:32;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;;;28234:81:61;28093:80;;838:5:31;28093:80:61;;;;:::i;838:5:31:-;1970:42991:58;28263:51:61;;;;;:::i;28234:81::-;1970:42991:58;-1:-1:-1;;1970:42991:58;;;;;;;28233:194:61;838:5:31;;;28332:94:61;838:5:31;;:::i;:::-;1970:42991:58;28332:94:61;:::i;28233:194::-;28481:153;;;;;;20261:356;20632:14;20642:4;20208:449;;;;;;;;;28481:153;;;26739:115;;;;28122:32;:::i;26526:131::-;26637:19;26616;;;:::i;:::-;1970:42991:58;26637:19:61;;:::i;:::-;1970:42991:58;26526:131:61;;;19377:515;22307:125;;;;;;;;;;;;;;;:::i;:::-;22710:181;;;;;;;838:5:31;22747:19:61;;;;:::i;:::-;1970:42991:58;22710:181:61;;;;465:4:31;838:5;;;;;:::i;:::-;1970:42991:58;;;;;;;;;;;;;;;;;24362:37:61;1970:42991:58;;;24362:37:61;;:::i;:::-;-1:-1:-1;;1970:42991:58;;;;;;;24342:65:61;;;:::i;:::-;24410:4;1970:42991:58;;;;;;;24225:191:61;24332:83;;24264:151;24332:83;;:::i;:::-;24264:151;;:::i;24225:191::-;-1:-1:-1;;1970:42991:58;;;;;;;;;;;;;;24224:247:61;24518:56;1970:42991:58;24517:102:61;1970:42991:58;;;24224:247:61;;:::i;:::-;24518:56;;;:::i;24517:102::-;24667:153;;;;;1970:42991:58;24667:153:61;;;;;19566:278;19863:14;1970:42991:58;19377:515:61;;;;;;;;;;24667:153;1970:42991:58;;24667:153:61;;;;;22710:181;22829:19;838:5:31;22829:19:61;;;;:::i;:::-;1970:42991:58;22710:181:61;;;;;19398:135;1970:42991:58;;-1:-1:-1;;;19398:135:61;;;;;18538:120;-1:-1:-1;18591:56:61;-1:-1:-1;1970:42991:58;;-1:-1:-1;;;;;;;18591:56:61:o;1822:864:31:-;;2004:6;;2000:58;;465:4;1970:42991:58;;;;;;;;;;;;;;;2560:120:31;;;;;;;;;;;;1822:864;:::o;3358:267:47:-;1390:66;3481:46;;1390:66;;;2625:40;;2679:11;2688:2;2679:11;;2675:69;;1970:42991:58;;;;;;:::i;:::-;2324:106:47;;2311:2;1970:42991:58;;2324:106:47;3543:22;:::o;2675:69::-;2713:20;;;1970:42991:58;2713:20:47;;1970:42991:58;2713:20:47;3477:142;1970:42991:58;;;-1:-1:-1;1970:42991:58;-1:-1:-1;1970:42991:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:47;;;;;;;;:::i;1970:42991:58:-;;;;-1:-1:-1;1970:42991:58;;;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;1390:66:47;;-1:-1:-1;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;;;;;;;;1390:66:47;1970:42991:58;;;;;;;;;;;;;;;;;;;;;3358:267:47;1390:66;3481:46;;1390:66;;;2625:40;;2679:11;2688:2;2679:11;;2675:69;;1970:42991:58;;;;;;:::i;3477:142:47:-;1970:42991:58;;;-1:-1:-1;6584:16:51;;1970:42991:58;6584:16:51;1970:42991:58;;;;:::i;:::-;;;;;;;6584:16:51;1970:42991:58;;;6584:16:51;;;;1970:42991:58;;;;;1390:66:47;;;;;;;;:::i;1970:42991:58:-;;;;6584:16:51;-1:-1:-1;1970:42991:58;;;-1:-1:-1;1970:42991:58;;;;;;;-1:-1:-1;1390:66:47;;-1:-1:-1;;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1970:42991:58;;;;;;5203:1551:50;;;6283:66;6270:79;;6266:164;;1970:42991:58;;;;;;;;;;;;;;;;;;;;;;;;;;6541:24:50;;;;;;;;;1970:42991:58;6541:24:50;-1:-1:-1;;;;;1970:42991:58;;6579:20:50;6575:113;;6698:49;1970:42991:58;6698:49:50;1970:42991:58;5203:1551:50;:::o;6575:113::-;6615:62;1970:42991:58;6615:62:50;6541:24;6615:62;1970:42991:58;6615:62:50;:::o;6266:164::-;6365:54;;;1970:42991:58;6365:54:50;6385:30;6365:54;;:::o;7280:532::-;1970:42991:58;;;;;;7366:29:50;;;7411:7;;:::o;7362:444::-;1970:42991:58;7462:38:50;;1970:42991:58;;7523:23:50;;;7375:20;7523:23;1970:42991:58;7375:20:50;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;;;7375:20;7634:46;1970:42991:58;;;7375:20:50;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;;;-1:-1:-1;7763:32:50;1970:42991:58;;;-1:-1:-1;7763:32:50;1970:42991:58;;;;;;;;;;;;;;;:::o;32314:2251:61:-;;;;;;;1970:42991:58;;;;;;;;32659:38:61;;1970:42991:58;;32713:30:61;;;;;;;;:::o;32655:208::-;1970:42991:58;;;-1:-1:-1;32764:40:61;32760:103;;32655:208;;33909:39;33901:131;32655:208;33971:51;32655:208;33909:39;:::i;:::-;1970:42991:58;33971:51:61;;:::i;:::-;1970:42991:58;33901:131:61;;:::i;:::-;1970:42991:58;;;;;;;465:4:31;1970:42991:58;;;;;;;;;;;;;;;34137:96:61;838:5:31;1625:13;;;34481:77:61;1625:13:31;;:::i;:::-;34137:96:61;:::i;:::-;838:5:31;;:::i;:::-;1970:42991:58;3463:5:55;;;;;3066;;1970:42991:58;3060:42:55;3281:5;;;;3066;;1970:42991:58;3060:42:55;34481:77:61;:::i;32760:103::-;32820:32;;;;;;:::o;3736:794:31:-;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;1970:42991:58;4028:8:31;;1970:42991:58;;838:5:31;;;;;;:::i;4024:500::-;1970:42991:58;4093:9:31;;1970:42991:58;;838:5:31;;;;;;:::i;:::-;1970:42991:58;838:5:31;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;638:5;1970:42991:58;;;;;;;;;;;;;;;2560:120:31;;1186:122;;;;;;;;;;1970:42991:58;;;;;;;;;4347:14:31;;;;;4381:8;;;-1:-1:-1;4381:8:31;:::o;4343:171::-;1970:42991:58;;4460:21:31;:::o;2648:13:32:-;;;;;;;;:::o;:::-;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1970:42991:58;;;5129:68:32;;1970:42991:58;5591:24:32;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;-1:-1:-1;;2707:26:32;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;1970:42991:58;;;;;;;2648:13:32;;;;;;;;;;;;;1970:42991:58;1564:4:32;5770:720;;2648:13;-1:-1:-1;;6615:36:32;;;;;:76;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;1970:42991:58;7316:5:32;1970:42991:58;7316:5:32;;7312:417;;5770:720;-1:-1:-1;9497:3:32;;2789:21;9082:7;;2789:21;;2707:26;;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;1970:42991:58;2648:13:32;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;;;2707:26:32;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;1970:42991:58;4181:19:32;;-1:-1:-1;9497:3:32;7312:417;;7074:112;7158:17;;;1970:42991:58;7158:17:32;;1970:42991:58;7158:17:32;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;;;1970:42991:58;6715:20:32;;1970:42991:58;6715:20:32;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;1970:42991:58;14954:10:32;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;1970:42991:58;2648:13:32;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;;;;2707:26;;;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;1970:42991:58;;;;;2648:13:32;;2593;2648;20303:35;;;;;1970:42991:58;4181:19:32;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;;;1970:42991:58;5638:21:32;;1970:42991:58;5638:21:32;5129:68;5169:17;;;1970:42991:58;5169:17:32;;1970:42991:58;5169:17:32;4714:45;4740:8;;1970:42991:58;4740:8:32;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o;1970:42991:58:-;;;;;;;;;;;;;;;465:4:31;;;1970:42991:58;;;;;;;;;;;;;;;:::i;:::-;838:5:31;;;465:4;838:5;;:::i;1970:42991:58:-;465:4:31;;1970:42991:58;;;;;;;;;;;;;;;1625:13:31;;;:::i"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeCurrentFourthRootPriceRatio()":"569ee350","computeCurrentPoolCenteredness()":"cd80a1af","computeCurrentPriceRange()":"84254cf9","computeCurrentPriceRatio()":"a103b044","computeCurrentSpotPrice()":"c0209f1d","computeCurrentVirtualBalances()":"4f149b3f","computeInitialBalancesRaw(address,uint256)":"e45801da","computeInvariant(uint256[],uint8)":"984de9e8","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getActionId(bytes4)":"851c1bb3","getAggregateFeePercentages()":"81fa807c","getCenterednessMargin()":"1d8a5e7e","getCurrentLiveBalances()":"b156aa0a","getDailyPriceShiftBase()":"215666a8","getDailyPriceShiftExponent()":"4efd88c9","getHookFlags()":"d77153a7","getLastTimestamp()":"37899770","getLastVirtualBalances()":"105ae7ad","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getPriceRatioState()":"6bd838c7","getRate()":"679aefce","getReClammPoolDynamicData()":"2c357688","getReClammPoolImmutableData()":"7f118b90","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808","getVault()":"8d928af8","incrementNonce()":"627cdcb9","isPoolWithinTargetRange()":"dfba3818","isPoolWithinTargetRangeUsingCurrentVirtualBalances()":"c480b9e6","name()":"06fdde03","nonces(address)":"7ecebe00","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","setCenterednessMargin(uint256)":"0673d09a","setDailyPriceShiftExponent(uint256)":"c66dbc4b","startPriceRatioUpdate(uint256,uint256,uint256)":"a6d2e718","stopPriceRatioUpdate()":"d4a5b63a","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"centerednessMargin\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"initialMinPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMaxPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTargetPrice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tokenAPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"tokenBPriceIncludesRate\",\"type\":\"bool\"}],\"internalType\":\"struct ReClammPoolParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AmountOutGreaterThanBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceRatioExceedsTolerance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DailyPriceShiftExponentTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCenterednessMargin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"InvalidStartTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolOutsideTargetRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fourthRootPriceRatioDelta\",\"type\":\"uint256\"}],\"name\":\"PriceRatioDeltaBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioNotUpdating\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioUpdateDurationTooShort\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioUpdateTooFast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReClammPoolBptRateUnsupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongInitializationPrices\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"}],\"name\":\"CenterednessMarginUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftBase\",\"type\":\"uint256\"}],\"name\":\"DailyPriceShiftExponentUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"lastTimestamp\",\"type\":\"uint32\"}],\"name\":\"LastTimestampUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint256\"}],\"name\":\"PriceRatioStateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"virtualBalanceA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"virtualBalanceB\",\"type\":\"uint256\"}],\"name\":\"VirtualBalancesUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentFourthRootPriceRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPoolCenteredness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPriceRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPriceRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentSpotPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentVirtualBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentVirtualBalanceA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVirtualBalanceB\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"changed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmountInRaw\",\"type\":\"uint256\"}],\"name\":\"computeInitialBalancesRaw\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"initialBalancesRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCenterednessMargin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDailyPriceShiftBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDailyPriceShiftExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTimestamp\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastVirtualBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"virtualBalanceA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"virtualBalanceB\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceRatioState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint32\"}],\"internalType\":\"struct PriceRatioState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReClammPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"lastVirtualBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct ReClammPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReClammPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"tokenAPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"tokenBPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMinPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMaxPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTargetPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialDailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialCenterednessMargin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDailyPriceRatioUpdateRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minPriceRatioUpdateDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minPriceRatioDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceRatioAndPriceTolerance\",\"type\":\"uint256\"}],\"internalType\":\"struct ReClammPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPoolWithinTargetRange\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPoolWithinTargetRangeUsingCurrentVirtualBalances\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isWithinTargetRange\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualBalancesChanged\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCenterednessMargin\",\"type\":\"uint256\"}],\"name\":\"setCenterednessMargin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDailyPriceShiftExponent\",\"type\":\"uint256\"}],\"name\":\"setDailyPriceShiftExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"endPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint256\"}],\"name\":\"startPriceRatioUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"actualPriceRatioUpdateStartTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopPriceRatioUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BalanceRatioExceedsTolerance()\":[{\"details\":\"On pool creation, a theoretical balance ratio is computed from the min, max, and target prices. During initialization, the actual balance ratio is compared to this theoretical value, and must fall within a fixed, symmetrical tolerance range, or initialization reverts. If it were outside this range, the initial price would diverge too far from the target price, and the pool would be vulnerable to arbitrage.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"InvalidStartTime(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}],\"PoolNotInitialized()\":[{\"details\":\"Function called before initializing the pool.\"}],\"PriceRatioDeltaBelowMin(uint256)\":[{\"details\":\"The price ratio being set is too close to the current one.\"}],\"PriceRatioNotUpdating()\":[{\"details\":\"An attempt was made to stop the price ratio update while no update was in progress.\"}],\"ReClammPoolBptRateUnsupported()\":[{\"details\":\"ReClamm Pools should never be nested. This is because the invariant of the pool is only used to calculate swaps. When tracking the market price or shrinking or expanding the liquidity concentration, the invariant can can decrease or increase independent of the balances, which makes the BPT rate meaningless.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"CenterednessMarginUpdated(uint256)\":{\"details\":\"This will be emitted on deployment, and when changed by governance or the swap manager.\",\"params\":{\"centerednessMargin\":\"The new centeredness margin\"}},\"DailyPriceShiftExponentUpdated(uint256,uint256)\":{\"details\":\"This will be emitted on deployment, and when changed by governance or the swap manager.\",\"params\":{\"dailyPriceShiftBase\":\"Internal time constant used to update virtual balances (1 - tau)\",\"dailyPriceShiftExponent\":\"The new daily price shift exponent\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"LastTimestampUpdated(uint32)\":{\"details\":\"This is emitted on every swap or liquidity operation.\",\"params\":{\"lastTimestamp\":\"The timestamp of the operation\"}},\"PriceRatioStateUpdated(uint256,uint256,uint256,uint256)\":{\"details\":\"This event will be emitted on initialization, and when governance initiates a price ratio update.\",\"params\":{\"endFourthRootPriceRatio\":\"The fourth root price ratio at the end of an update\",\"priceRatioUpdateEndTime\":\"The timestamp when the update ends\",\"priceRatioUpdateStartTime\":\"The timestamp when the update begins\",\"startFourthRootPriceRatio\":\"The fourth root price ratio at the start of an update\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"VirtualBalancesUpdated(uint256,uint256)\":{\"details\":\"Unless the price range is changing, the virtual balances remain in proportion to the real balances. These balances will also be updated when the centeredness margin or daily price shift exponent is changed.\",\"params\":{\"virtualBalanceA\":\"Offset to the real balance reserves\",\"virtualBalanceB\":\"Offset to the real balance reserves\"}}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"_0\":\"The new balance of the selected token, after the operation\"}},\"computeCurrentFourthRootPriceRatio()\":{\"details\":\"The price ratio is the ratio of the max price to the min price, according to current real and virtual balances. This function returns its fourth root.\",\"returns\":{\"_0\":\"The current fourth root of price ratio\"}},\"computeCurrentPoolCenteredness()\":{\"details\":\"A value of 0 means the pool is at the edge of the price range (i.e., one of the real balances is zero). A value of FixedPoint.ONE means the balances (and market price) are exactly in the middle of the range. The centeredness margin is affected by the current live balances, so manipulating the result of this function is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"_0\":\"The current centeredness margin (as a 18-decimal FP value)\",\"_1\":\"True if the pool is above the center, false otherwise\"}},\"computeCurrentPriceRange()\":{\"details\":\"Prices represent the value of token A denominated in token B (i.e., how many B tokens equal the value of one A token). The \\\"target\\\" range is then defined as a subset of this total price range, with the margin trimmed symmetrically from each side. The pool endeavors to adjust this range as necessary to keep the current market price within it. The computation involves the current live balances (though it should not be sensitive to them), so manipulating the result of this function is theoretically possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"maxPrice\":\"The upper limit of the current total price range\",\"minPrice\":\"The lower limit of the current total price range\"}},\"computeCurrentPriceRatio()\":{\"details\":\"The price ratio is the ratio of the max price to the min price, according to current real and virtual balances.\",\"returns\":{\"_0\":\"The current price ratio\"}},\"computeCurrentSpotPrice()\":{\"details\":\"Given the nature of the internal pool maths (particularly when virtual balances are shifting), it is not recommended to use this pool as a price oracle.\",\"returns\":{\"_0\":\"Target price at the current pool state (real and virtual balances)\"}},\"computeCurrentVirtualBalances()\":{\"details\":\"The current virtual balances are calculated based on the last virtual balances. If the pool is within the target range and the price ratio is not updating, the virtual balances will not change. If the pool is outside the target range, or the price ratio is updating, this function will calculate the new virtual balances based on the timestamp of the last user interaction. Note that virtual balances are always scaled18 values. Current virtual balances might change as a result of an operation, manipulating the value to some degree. Ensure that the vault is locked before calling this function if this side effect is undesired.\",\"returns\":{\"changed\":\"Whether the current virtual balances are different from `lastVirtualBalances`\",\"currentVirtualBalanceA\":\"The current virtual balance of token A\",\"currentVirtualBalanceB\":\"The current virtual balance of token B\"}},\"computeInitialBalancesRaw(address,uint256)\":{\"details\":\"Convenience function to compute the initial funding amount for the second token, given the first. It returns the amount of tokens in raw amounts, which can be used as-is to initialize the pool using a standard router.\",\"params\":{\"referenceAmountInRaw\":\"The amount of the reference token to be used for initialization, in raw amounts\",\"referenceToken\":\"The token whose amount is known\"},\"returns\":{\"initialBalancesRaw\":\"Initialization raw balances sorted in token registration order, including the given amount and a calculated raw amount for the other token\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"_0\":\"The calculated invariant of the pool, represented as a uint256\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCenterednessMargin()\":{\"details\":\"The centeredness margin defines how closely an unbalanced pool can approach the limits of the total price range and still be considered within the target range. The margin is symmetrical. If it's 20%, the target range is defined as >= 20% above the lower bound and <= 20% below the upper bound.\",\"returns\":{\"_0\":\"The current centeredness margin\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getDailyPriceShiftBase()\":{\"details\":\"Equals dailyPriceShiftExponent / _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT.\",\"returns\":{\"_0\":\"The internal representation for the daily price shift exponent\"}},\"getDailyPriceShiftExponent()\":{\"details\":\"At 100% (FixedPoint.ONE), the price range doubles (or halves) within a day.\",\"returns\":{\"_0\":\"The daily price shift exponent\"}},\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"getLastTimestamp()\":{\"returns\":{\"_0\":\"The timestamp of the operation\"}},\"getLastVirtualBalances()\":{\"returns\":{\"virtualBalanceA\":\" The last virtual balance of token A\",\"virtualBalanceB\":\" The last virtual balance of token B\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}},\"getPriceRatioState()\":{\"details\":\"This includes start and end values for the fourth root price ratio, and start and end times for the update.\",\"returns\":{\"_0\":\"The current price ratio state\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getReClammPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic ReClamm pool parameters\"}},\"getReClammPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable ReClamm pool parameters\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}},\"isPoolWithinTargetRange()\":{\"details\":\"The pool is considered to be in the target range when the centeredness is greater than or equal to the centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness margin). Note that this function reports the state *after* the last operation. It is not very meaningful during or outside an operation, as the current or next operation could change it. If this is unlikely (e.g., for high- liquidity pools with high centeredness and small swaps), it may nonetheless be useful for some applications, such as off-chain indicators. The state depends on the current balances and centeredness margin, and it uses the *last* virtual balances in the calculation. This is fine because the real balances can only change during an operation, and the margin can only change through the permissioned setter - both of which update the virtual balances. So it is not possible for the current and last virtual balances to get out-of-sync. The range calculation is affected by the current live balances, so manipulating the result of this function is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"_0\":\"True if pool centeredness is greater than or equal to the centeredness margin\"}},\"isPoolWithinTargetRangeUsingCurrentVirtualBalances()\":{\"details\":\"The pool is considered to be in the target range when the centeredness is greater than the centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness margin.) This function is identical to `isPoolWithinTargetRange` above, except that it recomputes and uses the current instead of the last virtual balances. As noted above, these should normally give the same result.\",\"returns\":{\"isWithinTargetRange\":\"True if pool centeredness is greater than the centeredness margin\",\"virtualBalancesChanged\":\"True if the current virtual balances would not match the last virtual balances\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsInRaw, potentially modified by the hook\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"True if the hook allowed the registration, false otherwise\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}},\"setCenterednessMargin(uint256)\":{\"details\":\"This function is considered a user action, so it will update the last timestamp and virtual balances. This is a permissioned function.\",\"params\":{\"newCenterednessMargin\":\"The new centeredness margin\"}},\"setDailyPriceShiftExponent(uint256)\":{\"details\":\"This function is considered a user interaction, and therefore recalculates the virtual balances and sets the last timestamp. This is a permissioned function. A percentage of 100% will make the price range double (or halve) within a day. A percentage of 200% will make the price range quadruple (or quartered) within a day. More generically, the new price range will be either Range_old * 2^(newDailyPriceShiftExponent / 100), or Range_old / 2^(newDailyPriceShiftExponent / 100)\",\"params\":{\"newDailyPriceShiftExponent\":\"The new daily price shift exponent\"},\"returns\":{\"_0\":\"The actual new daily price shift exponent, after accounting for precision loss incurred when dealing with the internal representation of the exponent\"}},\"startPriceRatioUpdate(uint256,uint256,uint256)\":{\"details\":\"The price ratio is calculated by interpolating between the start and end times. The start price ratio will be set to the current fourth root price ratio of the pool. This is a permissioned function.\",\"params\":{\"endPriceRatio\":\"The new ending value of the price ratio, as a floating point value (e.g., 8 = 8e18)\",\"priceRatioUpdateEndTime\":\"The timestamp when the price ratio update will end\",\"priceRatioUpdateStartTime\":\"The timestamp when the price ratio update will start\"},\"returns\":{\"actualPriceRatioUpdateStartTime\":\"The actual start time for the price ratio update (min: block.timestamp).\"}},\"stopPriceRatioUpdate()\":{\"details\":\"The price ratio is calculated by interpolating between the start and end times. The new end price ratio will be set to the current one at the current timestamp, effectively pausing the update. This is a permissioned function.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutGreaterThanBalance()\":[{\"notice\":\"The swap result is greater than the real balance of the token (i.e., the balance would drop below zero).\"}],\"BalanceRatioExceedsTolerance()\":[{\"notice\":\"The initial balances of the ReClamm Pool must respect the initialization ratio bounds.\"}],\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"DailyPriceShiftExponentTooHigh()\":[{\"notice\":\"The daily price shift exponent is too high.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidCenterednessMargin()\":[{\"notice\":\"The centeredness margin is above 100% (Fixed point 1).\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"InvalidStartTime()\":[{\"notice\":\"The start time for the price ratio update is invalid (either in the past or after the given end time).\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"NotImplemented()\":[{\"notice\":\"The function is not implemented.\"}],\"PoolOutsideTargetRange()\":[{\"notice\":\"The pool is outside the target price range before or after the operation.\"}],\"PriceRatioUpdateDurationTooShort()\":[{\"notice\":\"The difference between end time and start time is too short for the price ratio update.\"}],\"PriceRatioUpdateTooFast()\":[{\"notice\":\"The rate of change exceeds the maximum daily price ratio rate.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"ReClammPoolBptRateUnsupported()\":[{\"notice\":\"`getRate` from `IRateProvider` was called on a ReClamm Pool.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"VaultIsNotLocked()\":[{\"notice\":\"The vault is not locked, so the pool balances are manipulable.\"}],\"WrongInitializationPrices()\":[{\"notice\":\"The current price interval or spot price is outside the initialization price range.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"CenterednessMarginUpdated(uint256)\":{\"notice\":\"The centeredness margin was updated.\"},\"DailyPriceShiftExponentUpdated(uint256,uint256)\":{\"notice\":\"The daily price shift exponent was updated.\"},\"LastTimestampUpdated(uint32)\":{\"notice\":\"The timestamp of the last user interaction.\"},\"PriceRatioStateUpdated(uint256,uint256,uint256,uint256)\":{\"notice\":\"The Price Ratio State was updated.\"},\"VirtualBalancesUpdated(uint256,uint256)\":{\"notice\":\"The virtual balances were updated after a user interaction (swap or liquidity operation).\"}},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeCurrentFourthRootPriceRatio()\":{\"notice\":\"Computes the current fourth root of price ratio.\"},\"computeCurrentPoolCenteredness()\":{\"notice\":\"Compute the current pool centeredness (a measure of how unbalanced the pool is).\"},\"computeCurrentPriceRange()\":{\"notice\":\"Computes the current total price range.\"},\"computeCurrentPriceRatio()\":{\"notice\":\"Computes the current price ratio.\"},\"computeCurrentSpotPrice()\":{\"notice\":\"Computes the current target price. This is the ratio of the total (i.e., real + virtual) balances (B/A).\"},\"computeCurrentVirtualBalances()\":{\"notice\":\"Computes the current virtual balances and a flag indicating whether they have changed.\"},\"computeInitialBalancesRaw(address,uint256)\":{\"notice\":\"Compute the initialization amounts, given a reference token and amount.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCenterednessMargin()\":{\"notice\":\"Returns the centeredness margin.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getDailyPriceShiftBase()\":{\"notice\":\"Returns the internal time constant representation for the daily price shift exponent (tau).\"},\"getDailyPriceShiftExponent()\":{\"notice\":\"Returns the daily price shift exponent as an 18-decimal FP.\"},\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"getLastTimestamp()\":{\"notice\":\"Getter for the timestamp of the last user interaction.\"},\"getLastVirtualBalances()\":{\"notice\":\"Getter for the last virtual balances.\"},\"getPriceRatioState()\":{\"notice\":\"Returns the current price ratio state.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getReClammPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getReClammPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"},\"isPoolWithinTargetRange()\":{\"notice\":\"Compute whether the pool is within the target price range.\"},\"isPoolWithinTargetRangeUsingCurrentVirtualBalances()\":{\"notice\":\"Compute whether the pool is within the target price range, recomputing the virtual balances.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"},\"setCenterednessMargin(uint256)\":{\"notice\":\"Set the centeredness margin.\"},\"setDailyPriceShiftExponent(uint256)\":{\"notice\":\"Updates the daily price shift exponent, as a 18-decimal FP percentage.\"},\"startPriceRatioUpdate(uint256,uint256,uint256)\":{\"notice\":\"Initiates a price ratio update by setting a new ending price ratio and time interval.\"},\"stopPriceRatioUpdate()\":{\"notice\":\"Stops an ongoing price ratio update.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ReClammPool.sol\":\"ReClammPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0xf8557bcfefe95c0164faf3e840552d7e07899116e18ee58894acef85eb90d0ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://effbe33d58fcf3128cf1d861789f7032913a2054946391e8b2766bf02688ab76\",\"dweb:/ipfs/QmYrejbXfKNbN1bUWQPoneRgfnkn3r574i7jJ7rTb8XewE\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xd0a69d3c1a5711de402c56714381b9c2382e2b8c9036365107c33fdb612a1f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cbe86c3e7d8a45a114528c4eae13a26d660e31bbf1483e2f687364b07859924\",\"dweb:/ipfs/QmWTqLX6azYtUaD4PRobczB8Khig1tc51JmgGtdMckVUhm\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3\",\"dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x7d94fa0af099a2172eb01f9c8a8a443cbe7e0e43654841563e4e09968efdb549\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65e38fb76b6add407d4557753ae83dd1268e8261195dbe5c19a580d5ba6e4e9a\",\"dweb:/ipfs/QmTkGSJtaQrqjcyWM4AgemeEmKgtDydKPPVRajsUJRQSrK\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x10eb97d047f8d84fe263a02bb4a656ac6674f6679d74532cc37546289e073a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e41287d40b0c46982f1083d40d32de2761f009c5c51627fe79a7feb0ab1cf5c\",\"dweb:/ipfs/Qme7dbh6HX3ZvUJdbQAcVqXkmyXyfcLiUZRhhon3cU6K8p\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/ReClammPool.sol\":{\"keccak256\":\"0x9cb2ab272d7127917364cf925809738248bcb7b71eddf69f4983f4d8d783ff95\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b31c5e41f657a2fe6a8b579bb3660f21bf672687dc29b2a4ff290d50f61abd9c\",\"dweb:/ipfs/Qmbe98CdD9esU8Td1oKtv4XZ8GszVxHd7NVqJS2aZjrgBN\"]},\"contracts/interfaces/IReClammPool.sol\":{\"keccak256\":\"0x54a0dbf40078c94f40f3c0385790edfa8d25ef70125c856da1ff57261f59a10a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ecdebb566e4f59671b1275cbc9669582dc7a797832ccc0b038f4b3de54f0799\",\"dweb:/ipfs/QmbphvcdRmqbqQRnpuEokSQ3GJKX3XZ1Pp2R6yQUBd6aMS\"]},\"contracts/lib/ReClammMath.sol\":{\"keccak256\":\"0x57f520fcdaa5baab20bb9e9e8220e5a22ba1d5580ea35134ab2db6eb4cbb195c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8306a99b53f4d3b78b45b79ec240b1774499afd75be388cb44c8184216ac7d66\",\"dweb:/ipfs/QmedHs4j4hBU6hrRa7RkRsRxqXP7Dt55gNPDzMKWZydoHm\"]}},\"version\":1}"}},"contracts/ReClammPoolFactory.sol":{"ReClammPoolFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"string","name":"poolVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CodeDeploymentFailed","type":"error"},{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"inputs":[],"name":"VaultNotSet","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokens","type":"tuple[]"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"components":[{"internalType":"uint256","name":"initialMinPrice","type":"uint256"},{"internalType":"uint256","name":"initialMaxPrice","type":"uint256"},{"internalType":"uint256","name":"initialTargetPrice","type":"uint256"},{"internalType":"bool","name":"tokenAPriceIncludesRate","type":"bool"},{"internalType":"bool","name":"tokenBPriceIncludesRate","type":"bool"}],"internalType":"struct ReClammPriceParams","name":"priceParams","type":"tuple"},{"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"centerednessMargin","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"create","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreationCode","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreationCodeContracts","outputs":[{"internalType":"address","name":"contractA","type":"address"},{"internalType":"address","name":"contractB","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":236,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":194,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_dataslot_string_storage_3694":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint256":{"entryPoint":1124,"id":null,"parameterSlots":2,"returnSlots":1},"clean_up_bytearray_end_slots_string_storage":{"entryPoint":588,"id":null,"parameterSlots":2,"returnSlots":0},"clean_up_bytearray_end_slots_string_storage_2013":{"entryPoint":508,"id":null,"parameterSlots":2,"returnSlots":0},"constructor_ReClammPoolFactory":{"entryPoint":901,"id":16154,"parameterSlots":4,"returnSlots":0},"copy_arguments_for_constructor_object_ReClammPoolFactory":{"entryPoint":317,"id":null,"parameterSlots":0,"returnSlots":4},"copy_byte_array_to_storage_from_string_to_string":{"entryPoint":668,"id":null,"parameterSlots":1,"returnSlots":0},"extract_byte_array_length":{"entryPoint":452,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"fun_deploy":{"entryPoint":1363,"id":3679,"parameterSlots":1,"returnSlots":1},"fun_deploy_1995":{"entryPoint":1442,"id":3679,"parameterSlots":1,"returnSlots":1},"fun_setVersion":{"entryPoint":1142,"id":4518,"parameterSlots":1,"returnSlots":0},"panic_error_0x11":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":174,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"610180604052346100aa5761001e61001561013d565b92919091610385565b6040516116ba90816105e38239608051818181610203015261124c015260a051816111d6015260c0518181816102270152611271015260e051816111f701526101005181610f140152610120518181816102f901528181610972015281816109e00152818161114801526114b2015261014051816108df015261016051818181610cf0015261119e0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176100e757604052565b6100ae565b81601f820112156100aa578051906001600160401b0382116100e75761011b601f8301601f19166020016100c2565b92828452602083830101116100aa57815f9260208093018386015e8301015290565b618954908138038061014e816100c2565b9384398201906080838303126100aa578251906001600160a01b03821682036100aa5760208401519363ffffffff851685036100aa5760408101516001600160401b0394908581116100aa57816101a69184016100ec565b9460608301519081116100aa576101bd92016100ec565b9193929190565b90600182811c921680156101f2575b60208310146101de57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916101d3565b601f8111610208575050565b60035f5260205f20906020601f840160051c83019310610242575b601f0160051c01905b818110610237575050565b5f815560010161022c565b9091508190610223565b601f8111610258575050565b60045f5260205f20906020601f840160051c83019310610292575b601f0160051c01905b818110610287575050565b5f815560010161027c565b9091508190610273565b80519091906001600160401b0381116100e7576102c3816102be6004546101c4565b61024c565b602080601f8311600114610304575081906102f493945f926102f9575b50508160011b915f199060031b1c19161790565b600455565b015190505f806102e0565b60045f52601f198316949091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f905b87821061036d575050836001959610610355575b505050811b01600455565b01515f1960f88460031b161c191690555f808061034a565b80600185968294968601518155019501930190610336565b929192616cb7610397602082016100c2565b90808252611c9d60208301398051908160011c918260a05282810392818411610450578360e0528083526103ca83610553565b60805282019182519383526103de836105a2565b60c052525230610100526001600160a01b03811615610441576101205263ffffffff9261040d84831642610464565b93808511610432576104309461042b93610140521661016052610476565b61029c565b565b6368755a1160e01b5f5260045ffd5b630647140b60e51b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b9190820180921161047157565b610450565b80519091906001600160401b0381116100e75761049d816104986003546101c4565b6101fc565b602080601f83116001146104d2575081906104cd93945f926102f95750508160011b915f199060031b1c19161790565b600355565b60035f52601f198316949091907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b925f905b87821061053b575050836001959610610523575b505050811b01600355565b01515f1960f88460031b161c191690555f8080610518565b80600185968294968601518155019501930190610504565b9081517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe835260208101835ff092526001600160a01b0382161561059357565b63fef8220760e01b5f5260045ffd5b9081517f60fe600053602038038060206001396001016000f3fefefefefefefefefefefe835260208101835ff092526001600160a01b038216156105935756fe60806040526004361015610011575f80fd5b5f3560e01c8062c194db14610153578063174481fa1461014e578063193ad50f146101495780632f2770db146101445780633f819b6f1461013f57806344f6fec71461013a57806353a72f7e1461013557806354fd4d50146101305780636634b7531461012b578063673a2a1f146101265780636c57f5a91461012157806378da80cb1461011c578063851c1bb3146101175780638d928af8146101125780638eec5d701461010d578063aaabadc514610108578063b3595be014610103578063db035ebc146100fe578063e9d56e19146100f95763ec888061146100f4575f80fd5b610d14565b610cd4565b610cac565b610bf9565b6109b3565b610996565b610953565b610903565b6108c3565b6108a1565b610813565b6107d3565b6106c1565b6105d5565b6104f0565b610408565b61029d565b61024e565b6101e4565b61018a565b5f91031261016257565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610162575f366003190112610162576040516020810181811067ffffffffffffffff8211176101df576101db916101c7916040525f81526111d3565b604051918291602083526020830190610166565b0390f35b610423565b34610162575f36600319011261016257604080516001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b34610162575f366003190112610162576080610268610d2e565b61029b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b34610162575f366003190112610162576102d95f357fffffffff0000000000000000000000000000000000000000000000000000000016610f0a565b60405163aaabadc560e01b81526020916001600160a01b039183816004817f000000000000000000000000000000000000000000000000000000000000000087165afa80156103c0578492610360925f926103c5575b506040516326f8aa2160e21b8152600481019190915233602482015230604482015293849283919082906064820190565b0392165afa9182156103c0575f92610393575b50501561038457610382610d52565b005b6323dada5360e01b5f5260045ffd5b6103b29250803d106103b9575b6103aa8183610467565b81019061166f565b5f80610373565b503d6103a0565b610f7c565b6103e6919250843d86116103ed575b6103de8183610467565b810190610f67565b905f61032f565b503d6103d4565b906020610405928181520190610166565b90565b34610162575f366003190112610162576101db6101c7610d8d565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176101df57604052565b67ffffffffffffffff81116101df57604052565b90601f8019910116810190811067ffffffffffffffff8211176101df57604052565b60405190610140820182811067ffffffffffffffff8211176101df57604052565b92919267ffffffffffffffff82116101df57604051916104d4601f8201601f191660200184610467565b829481845281830111610162578281602093845f960137010152565b346101625760403660031901126101625760043567ffffffffffffffff81116101625736602382011215610162576001600160a01b036055600b6105416101db9436906024816004013591016104aa565b61055561054f6024356112b4565b916111d3565b602081519101209060405191604083015260208201523081520160ff81532016604051918291829190916001600160a01b036020820193169052565b60209060206040818301928281528551809452019301915f5b8281106105b8575050505090565b83516001600160a01b0316855293810193928101926001016105aa565b346101625760403660031901126101625760043560243590600191600154808310156106b2578183018084116106ad57811061069c575b5061061681610a58565b916106246040519384610467565b818352601f1961063383610a58565b013660208501375f5b82811061065157604051806101db8682610591565b8061069661067e61066b610666899587610e7e565b610e9f565b90546001600160a01b039160031b1c1690565b6106888388610ef6565b906001600160a01b03169052565b0161063c565b828103915081116106ad575f61060c565b610e6a565b634e23d03560e01b5f5260045ffd5b34610162575f366003190112610162576040515f60035460018160011c91600181169182156107b8575b6020916020851084146107a4578487526020870193908115610785575060011461072c575b6101db8661072081880382610467565b604051918291826103f4565b60035f90815294509192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8386106107745750505091019050610720826101db5f610710565b805485870152948201948101610759565b60ff1916845250505090151560051b019050610720826101db5f610710565b634e487b7160e01b5f52602260045260245ffd5b92607f16926106eb565b6001600160a01b0381160361016257565b34610162576020366003190112610162576001600160a01b036004356107f8816107c2565b165f525f602052602060ff60405f2054166040519015158152f35b34610162575f36600319011261016257604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610883576101db86610877818a0382610467565b60405191829182610591565b84546001600160a01b03168752958601959383019390830190610860565b34610162575f36600319011261016257602060ff600254166040519015158152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162576020366003190112610162576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036101625761094b602091610f0a565b604051908152f35b34610162575f3660031901126101625760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f366003190112610162576020600154604051908152f35b34610162575f3660031901126101625760405163aaabadc560e01b81526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156103c0576020925f92610a1e575b5060405191168152f35b610a36919250833d85116103ed576103de8183610467565b905f610a14565b9080601f8301121561016257816020610405933591016104aa565b67ffffffffffffffff81116101df5760051b60200190565b8015150361016257565b9080601f83011215610162578135916020610a9484610a58565b93604093610aa56040519687610467565b818652828087019260071b85010193818511610162578301915b848310610acf5750505050505090565b60808383031261016257855190610ae582610437565b8335610af0816107c2565b8252848401359060028210156101625782869283608095015288860135610b16816107c2565b8982015260608087013590610b2a82610a70565b820152815201920191610abf565b606090606319011261016257604051906060820182811067ffffffffffffffff8211176101df5760405281606435610b6f816107c2565b8152608435610b7d816107c2565b6020820152604060a43591610b91836107c2565b0152565b60a09060e3190112610162576040519060a0820182811067ffffffffffffffff8211176101df576040528160e435815261010435602082015261012435604082015261014435610be481610a70565b606082015260806101643591610b9183610a70565b34610162576101e03660031901126101625767ffffffffffffffff60043581811161016257610c2c903690600401610a3d565b9060243581811161016257610c45903690600401610a3d565b91604435918211610162576101db92610c65610c92933690600401610a7a565b90610c6f36610b38565b92610c7936610b95565b906101c435946101a43594610184359460c43593611054565b6040516001600160a01b0390911681529081906020820190565b34610162575f366003190112610162576020610cc661119c565b63ffffffff60405191168152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f3660031901126101625760206040515f8152f35b60405190610d3b82610437565b5f6060838281528260208201528260408201520152565b610d5a611299565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1565b604051905f6004546001918160011c9260018316908115610e60575b6020906020861083146107a45785885287946020860193908115610e415750600114610de1575b505050610ddf92500383610467565b565b925093610e0f60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90565b945f935b828510610e2b57505050610ddf9350015f8080610dd0565b8654858501529586019588955093810193610e13565b92505050610ddf9491925060ff19168252151560051b015f8080610dd0565b93607f1693610da9565b634e487b7160e01b5f52601160045260245ffd5b919082018092116106ad57565b634e487b7160e01b5f52603260045260245ffd5b600154811015610ed45760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b610e8b565b805115610ed45760200190565b805160011015610ed45760400190565b8051821015610ed45760209160051b010190565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b166040820152602481526060810181811067ffffffffffffffff8211176101df5760405251902090565b908160209103126101625751610405816107c2565b6040513d5f823e3d90fd5b92916020610ddf92604086526110448151610fe3610fb3610140928360408c01526101808b0190610166565b85850151603f198b8303810160608d015291610fce91610166565b906040860151908b83030160808c0152610166565b606084015160a08a0152608084015167ffffffffffffffff1660c08a01529260a081015160e08a015261103860c08201519261010093848c015260e08301519361012094858d0152830151908b019015159052565b01511515610160880152565b9401906001600160a01b03169052565b969293989791946001600160a01b0361107760408701516001600160a01b031690565b1661118d57610ddf9761114061118495611136846110b59b611171976110a061117f988e611308565b6110a8610d2e565b5f6060820152600181529d565b825161111d6020850151926040860151946110e96110e360806110db60608b0151151590565b990151151590565b996113a0565b916110f2610489565b9b8c5260208c0152611102610d8d565b60408c015260608b015267ffffffffffffffff1660808a0152565b60a088015260c087015260e08601521515610100850152565b1515610120830152565b6040519283917f00000000000000000000000000000000000000000000000000000000000000009060208401610f87565b03601f198101835282610467565b6113cc565b958692836114a0565b63187b85d960e21b5f5260045ffd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156111ce5790565b505f90565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808201908183116106ad57845192838301958684116106ad5760209260018480946040519a82818d01016040528b52805f838d017f00000000000000000000000000000000000000000000000000000000000000003c8a01017f00000000000000000000000000000000000000000000000000000000000000003c01918501015e565b60ff600254166112a557565b633ac4266d60e11b5f5260045ffd5b60405160208101913383524660408301526060820152606081526112d781610437565b51902090565b600211156112e757565b634e487b7160e01b5f52602160045260245ffd5b5160028110156112e75790565b906002825111611391576060810151151580611370575b611337576080015115159081611346575b5061133757565b63a1e9dd9d60e01b5f5260045ffd5b60019150602061135861135f92610ee6565b51016112fb565b611368816112dd565b14155f611330565b506001611381602061135885610ed9565b61138a816112dd565b141561131f565b630e0f7beb60e31b5f5260045ffd5b67ffffffffffffffff908181116113b5571690565b6306dfcc6560e41b5f52604060045260245260445ffd5b9061054f6113d9916112b4565b805115611491576020815191015ff5903d1519821516610f7c576001600160a01b0391828116908115611482579261140f611299565b815f525f60205260405f20600160ff19825416179055600154680100000000000000008110156101df578060016114499201600155610e9f565b819291549060031b9184831b921b19161790557f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2565b63b06ebf3d60e01b5f5260045ffd5b631328927760e21b5f5260045ffd5b9294919390946001600160a01b0393847f000000000000000000000000000000000000000000000000000000000000000016956114db61119c565b91873b156101625797959493929190604095604051998a9863eeec802f60e01b8a526004836101a48c01931660048c015260246101a060248d015282518094526101c48c019a6020809401955f935b8685106115fe57505050505050505086946115a85f9997939561159788966115658d996115da9760448b015260648a019063ffffffff169052565b88608489015260a4880190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b6001600160a01b0316610104860152565b805115156101248501526020810151151561014485015260408101511515610164850152606001511515610184840152565b03925af180156103c0576115eb5750565b806115f8610ddf92610453565b80610158565b9193959798999a9b9c90929496809e505183815116825287810151600281101561165d5782899260809284600196015286888201511688830152606080910151151590820152019e0195019290918f9d9c9b9a9998979596949261152a565b86602185634e487b7160e01b5f52525ffd5b90816020910312610162575161040581610a7056fea2646970667358221220bcc086bfa8cf229b6f976634e41162488be79708c6a3a98d6b9628ae8ce31ee764736f6c634300081b00336103006040523461097b57616cb7803803809161001e8261030061097f565b6103003961030001604061030082031261097b5761030051906001600160401b03821161097b57610140826103000182031261097b576040519061014082016001600160401b0381118382101761079b576040526103008301516001600160401b03811161097b5781610096918561030001016109a2565b82526103208301516001600160401b03811161097b57816100bc918561030001016109a2565b6020830152610340830151906001600160401b03821161097b576100e5918461030001016109a2565b6040820181905261036083015160608301526103808301519092906001600160401b038116810361097b5760808301526103a081015160a08301526103c081015160c08301526103e081015160e083015261015b906101209061014b61040082016109f7565b61010085015261030001016109f7565b61012082015261032051916001600160a01b038316830361097b578151602083015160408051919592919081016001600160401b0381118282101761079b576040526001815260208101603160f81b81526101b583610a04565b610120526101c282610b87565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b0382111761079b576040525190206080523060c0526101608290528051906001600160401b03821161079b5760035490600182811c92168015610971575b602083101461077d5781601f849311610919575b50602090601f83116001146108a4575f92610899575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161079b57600454600181811c9116801561088f575b602082101461077d57601f8111610830575b506020601f82116001146107c95781929394955f926107be575b50508160011b915f199060031b1c1916176004555b610180819052336101a0526001600160a01b038116156107af576101c0528051906001600160401b03821161079b5760055490600182811c92168015610791575b602083101461077d5781601f84931161072f575b50602090601f83116001146106a7575f9261069c575b50508160011b915f199060031b1c1916176005555b60a0810151801590811561068f575b8115610682575b8115610673575b8115610661575b8115610652575b506106435760a08101516102205260c08101516102405260e08101516102605260608101516102805260808101516001600160401b03166102a05261010081015115156102c052610120015115156102e052676f05b59d3b21387661020052604051615fd9610cbe823960805181614955015260a05181614a21015260c05181614926015260e051816149a4015261010051816149ca01526101205181611709015261014051816117320152610160518181816103340152818161064b015281816108ce01528181610b1001528181610c6801528181610dea0152818161115f01528181611688015281816117f501528181611abe01528181611b0b01528181612099015281816124510152818161267b015281816126c8015281816127290152818161285601528181612b5a015281816135e101528181613b4d01528181613beb01528181613df801528181613e4e015281816141630152818161424801528181614556015281816146a1015281816147a20152818161487501528181614aa301528181614b1f0152614c62015261018051818181610a8501528181610ed401528181610f7901528181611091015261198801526101a05181613abc01526101c0518181816109a801528181610be001528181611214015281816131ad0152613ce701526101e051815050610200518181816112db0152611c850152610220518181816118db01528181611bb50152613f1c0152610240518181816118fc01528181611bdb0152613f4e015261026051818181611c010152613f75015261028051818181611c280152612de601526102a051818181611c4f0152612e1001526102c051818181611b4b0152613ec101526102e051818181611b730152613ee90152615fd990f35b6359e6ae3360e11b5f5260045ffd5b905060c082015111155f6103bb565b60e083015160c08401511091506103b4565b80915060e083015110906103ad565b60e08301511591506103a6565b60c083015115915061039f565b015190505f8061037b565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610714576001945083601f198116106106fc575b505050811b01600555610390565b01515f1960f88460031b161c191690555f80806106ee565b818101518355602094850194600190930192909101906106d3565b90915060055f5260205f20601f840160051c810160208510610776575b90849392915b601f830160051c82018110610768575050610365565b5f8155859450600101610752565b508061074c565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610351565b634e487b7160e01b5f52604160045260245ffd5b630647140b60e51b5f5260045ffd5b015190505f806102fb565b60045f5260205f20905f5b601f1984168110610818575060019394959683601f19811610610800575b505050811b01600455610310565b01515f1960f88460031b161c191690555f80806107f2565b9091602060018192858b0151815501930191016107d4565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810160208410610888575b601f830160051c8201811061087d5750506102e1565b5f8155600101610867565b5080610867565b90607f16906102cf565b015190505f80610299565b60035f90815293505f516020616c975f395f51905f5291905b601f19841685106108fe576001945083601f198116106108e6575b505050811b016003556102ae565b01515f1960f88460031b161c191690555f80806108d8565b818101518355602094850194600190930192909101906108bd565b60035f529091505f516020616c975f395f51905f52601f840160051c81016020851061096a575b90849392915b601f830160051c8201811061095c575050610283565b5f8155859450600101610946565b5080610940565b91607f169161026f565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761079b57604052565b81601f8201121561097b578051906001600160401b03821161079b57604051926109d6601f8401601f19166020018561097f565b8284526020838301011161097b57815f9260208093018386015e8301015290565b5190811515820361097b57565b805160209081811015610a7a5750601f825111610a3c5780825192015190808310610a2e57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b03821161079b575f54926001938481811c91168015610b7d575b8382101461077d57601f8111610b4a575b5081601f8411600114610ae857509282939183925f94610add575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610ac8565b919083601f1981165f8052845f20945f905b88838310610b305750505010610b18575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610b0b565b858701518855909601959485019487935090810190610afa565b5f805284601f845f20920160051c820191601f860160051c015b828110610b72575050610aad565b5f8155018590610b64565b90607f1690610a9c565b805160209081811015610bb15750601f825111610a3c5780825192015190808310610a2e57501790565b9192916001600160401b03811161079b5760019182548381811c91168015610cb3575b8282101461077d57601f8111610c80575b5080601f8311600114610c205750819293945f92610c15575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610bfe565b90601f19831695845f52825f20925f905b888210610c695750508385969710610c51575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610c44565b808785968294968601518155019501930190610c31565b835f5283601f835f20920160051c820191601f850160051c015b828110610ca8575050610be5565b5f8155018490610c9a565b90607f1690610bd456fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714613209575080630673d09a1461316157806306fdde03146130b8578063095ea7b3146130615780630b89f18214612f18578063105ae7ad14612eea57806316a0b3e014612ea957806318160ddd14612e8f57806318b6eb5514612e4f5780631c149e2814612be35780631d8a5e7e14612bb9578063215666a814612b9157806323b872dd14612b0f57806323de665114612ade578063273c1adf14610ea55780632754888d14612a755780632c357688146125b557806330adf81f1461257b578063313ce567146125605780633644e51514612546578063378997701461252357806338be241d146124d857806345421ec71461239f5780634efd88c9146123775780634f149b3f146123465780635211fa771461230357806354fd4d501461225a5780635687f2b814612206578063569ee350146121e4578063627cdcb9146121bb578063654cf15d14612199578063679aefce1461217a5780636bd838c7146120ff57806370a082311461205257806372c9818614611e1d5780637ecebe0014611de55780637f118b9014611a0757806381fa807c1461195a57806384254cf9146117d057806384b0196e146116f4578063851c1bb3146116ac5780638d928af81461166957806395d89b411461158b578063976907cc146114d3578063984de9e814611417578063a0e8f5ac146113cf578063a103b044146113b5578063a6d2e718146111cf578063a9059cbb146110fb578063aa6ca80814611067578063abb1dc4414610f46578063b156aa0a14610eaa578063b677fa5614610ea5578063ba5f9f4014610d38578063c0209f1d14610cf7578063c480b9e614610c3e578063c66dbc4b14610b9c578063cd80a1af14610ae6578063ce20ece714610ac6578063d335b0cf14610a5a578063d4a5b63a1461096d578063d505accf14610775578063d77153a7146106b8578063dd62ed3e146105f3578063dfba3818146105cf5763e45801da146102f2575f80fd5b346105cb5760403660031901126105cb5761030b613263565b602435906001600160a01b03906040519163ca4f280360e01b83523060048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610544575f936105a7575b5080806103708561366f565b511692168092145f1461059e576001915f5b6001811480610589575b61057a57610398613e33565b91906103cd6103b06103aa8584613ebf565b91613fb9565b5050506103c66103bf8261364b565b519161366f565b51906140ce565b93856103d88961366f565b5116036105745791925b846103ed838961367c565b51169460405197889163313ce56760e01b9788845283600460209c8d935afa928315610544578a928a915f9561054f575b50906104299161367c565b51169660046040518099819382525afa958615610544575f96610512575b5060ff1660120391601283116104f757670de0b6b3a764000061048060ff9561047b6104756104b097613b24565b8d6138d6565b6138d6565b04906040519961048f8b6132dc565b60028b526040368b8d01376104a4828c61367c565b5261050b576001615f34565b921660120391601283116104f7576104d16104d79261047b6104de95613b24565b906140ce565b918461367c565b526104f3604051928284938452830190613467565b0390f35b634e487b7160e01b5f52601160045260245ffd5b6003615f34565b60ff91965061053690893d8b1161053d575b61052e8183613328565b810190613b0b565b9590610447565b503d610524565b6040513d5f823e3d90fd5b6104299291955061056c90853d871161053d5761052e8183613328565b94909161041e565b926103e2565b63c1ab6dc160e01b5f5260045ffd5b50826105948661364b565b511682141561038c565b5f916001610382565b6105c49193503d805f833e6105bc8183613328565b810190613978565b915f610364565b5f80fd5b346105cb575f3660031901126105cb5760206105e9614c48565b6040519015158152f35b346105cb5760403660031901126105cb5761060c613263565b6020610616613279565b60405163927da10560e01b81523060048201526001600160a01b039384166024820152908316604482015291829060649082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610544575f90610685575b602090604051908152f35b506020813d6020116106b0575b8161069f60209383613328565b810103126105cb576020905161067a565b3d9150610692565b346105cb575f3660031901126105cb576101406040516106d7816132bf565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346105cb5760e03660031901126105cb5761078e613263565b610796613279565b90604435916064359160843560ff811681036105cb5783421161095a576107d7826001600160a01b03165f52600260205260405f2080549060018201905590565b9060405160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c983526001600160a01b039687861694856040850152888816606085015289608085015260a084015260c083015260c0825260e082019082821067ffffffffffffffff831117610946578793610892936108899360405251902061086261491c565b906040519161190160f01b83526002830152602282015260c43591604260a4359220615505565b90929192615587565b168181036109315760405163e1f21c6760e01b81526001600160a01b03848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af18015610544576108fd57005b6020813d602011610929575b8161091660209383613328565b810103126105cb57610927906135b9565b005b3d9150610909565b6325c0072360e11b5f5260045260245260445ffd5b634e487b7160e01b5f52604160045260245ffd5b8363313c898160e11b5f5260045260245ffd5b346105cb575f3660031901126105cb57610985613b32565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576109ea926020915f91610a2b575b5001511630613c90565b6109f2614b05565b63ffffffff6060610a0161375e565b0151164211610a1c576109274242610a1761485b565b61421a565b63771cef4f60e01b5f5260045ffd5b610a4d915060603d606011610a53575b610a458183613328565b81019061353b565b846109e0565b503d610a3b565b346105cb575f3660031901126105cb5760405163b45090f960e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544575f9061068557602090604051908152f35b346105cb575f3660031901126105cb5760206040516509184e72a0008152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561054457604091610b68915f91610b76575b50600854906001600160801b038260801c921690614b9d565b825191825215156020820152f35b610b9291503d805f833e610b8a8183613328565b81019061399e565b9250505083610b4f565b346105cb5760203660031901126105cb57610bb5613b32565b610bbd613bd6565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457610c21926020915f91610a2b575001511630613c90565b610c29614b05565b6020610c366004356144a9565b604051908152f35b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576040915f91610cd9575b50610cc7610caf82614a47565b929167ffffffffffffffff60075460a01c1694614b9d565b50918351921015825215156020820152f35b610ced91503d805f833e610b8a8183613328565b9250505082610ca2565b346105cb575f3660031901126105cb576020610c36610d2c6104d1610d32610d1d614a88565b50610d2c83969394929461364b565b516138ac565b9361366f565b346105cb5760e03660031901126105cb57610d51613263565b50610d5a613279565b600460443510156105cb5767ffffffffffffffff6084358181116105cb57610d86903690600401613362565b5060a4358181116105cb57610d9f903690600401613362565b9060c4359081116105cb57602492610dbd60209236906004016133c2565b50610dc6613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f92610e6f575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b60643583613afe565b978894614a47565b5098906138d6565b6138e9565b946138d6565b906140f2565b610e64614750565b602060405160018152f35b91506020823d602011610e9d575b81610e8a60209383613328565b810103126105cb57905190610e56610e1a565b3d9150610e7d565b61344d565b346105cb575f3660031901126105cb576040516329ae7ec560e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f91610f24575b50604051918291602083526020830190613467565b610f4091503d805f833e610f388183613328565b8101906136f1565b82610f0f565b346105cb575f3660031901126105cb576040516333f0703b60e11b81523060048201526001600160a01b03905f816024817f000000000000000000000000000000000000000000000000000000000000000086165afa8015610544575f915f935f915f93611046575b50610fc5604051946080865260808601906134cd565b6020858203818701528080885193848152019701925f905b83821061100a5787806104f389610ffc8d8b8582036040870152613467565b908382036060850152613467565b909192939783606060019260408c51805161102481613509565b8352808501518716858401520151151560408201520199019493920190610fdd565b925093505061105f91503d805f833e610b8a8183613328565b919385610faf565b346105cb575f3660031901126105cb5760405163ca4f280360e01b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610544576104f3915f916110e1575b506040519182916020835260208301906134cd565b6110f591503d805f833e6105bc8183613328565b826110cc565b346105cb5760403660031901126105cb576111526020611119613263565b6040516317d5759960e31b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b6020813d6020116111c7575b816111af60209383613328565b810103126105cb576111c0906135b9565b5080610e64565b3d91506111a2565b346105cb5760603660031901126105cb57600435604435602480356111f2613b32565b6040516374eef59360e11b81523060048201526001600160a01b0360608285817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561054457611255926020915f91611396575001511630613c90565b8042118142180218928284116113815761126f8484613afe565b9162015180938484106113725761128f90611288614b05565b868461421a565b91828110611363576112a18382613afe565b620f4240811061135157508281111561132c5784810294818604149015171561131957506112d992916112d3916138d6565b9061531c565b7f00000000000000000000000000000000000000000000000000000000000000001061130a57602090604051908152f35b632b85f91760e11b5f5260045ffd5b634e487b7160e01b5f9081526011600452fd5b91848102948186041490151715611319575061134c92916112d3916138d6565b6112d9565b905063119d853760e21b5f526004525ffd5b61136d8184613afe565b6112a1565b6319f8e85560e11b5f5260045ffd5b50826364bb3b8360e11b5f526004525260445ffd5b6113af915060603d606011610a5357610a458183613328565b886109e0565b346105cb575f3660031901126105cb576020610c3661485b565b346105cb576003196060368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb57611407613279565b50604080515f81525f6020820152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57611449903690600401613362565b9060243560028110156105cb576020926114bf6001611494610c3695600854906001600160801b03600754918260a01c16928163ffffffff8416938c1c16918160801c911688614fde565b509190946114a181613509565b036114c557610d2c6114b96001955b610d2c8661366f565b9361364b565b91615f34565b610d2c6114b96002956114b0565b346105cb576101003660031901126105cb576114ed613263565b506114f6613279565b50600560443510156105cb5767ffffffffffffffff6064358181116105cb57611523903690600401613362565b506084358181116105cb5761153c903690600401613362565b60c4358281116105cb57611554903690600401613362565b5060e4359182116105cb576115706104f39236906004016133c2565b506040519182915f8352604060208401526040830190613467565b346105cb575f3660031901126105cb576040516004545f826115ac83613581565b91828252602093600190856001821691825f146116495750506001146115ee575b506115da92500383613328565b6104f360405192828493845283019061323f565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106116315750506115da9350820101856115cd565b8054838901850152879450869390920191810161161a565b60ff1916858201526115da95151560051b85010192508791506115cd9050565b346105cb575f3660031901126105cb5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346105cb5760203660031901126105cb576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036105cb57610c36602091613ab2565b346105cb575f3660031901126105cb5761172d7f000000000000000000000000000000000000000000000000000000000000000061534d565b6117567f0000000000000000000000000000000000000000000000000000000000000000615447565b9060405191602083019280841067ffffffffffffffff851117610946576117b06104f3926117a2956040525f8352604051958695600f60f81b875260e0602088015260e087019061323f565b90858203604087015261323f565b904660608501523060808501525f60a085015283820360c0850152613467565b346105cb575f3660031901126105cb576040516314cb3b1f60e21b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081602481855afa908115610544575f91611920575b50156118d6575f602491604051928380926333f0703b60e11b82523060048301525afa8015610544576040915f916118b8575b506118ac610e4b670de0b6b3a76400006118a561189e61189561188a87614a47565b508181939299614dd5565b948186926138d6565b94806138d6565b04906140ce565b82519182526020820152f35b6118cc91503d805f833e610b8a8183613328565b9250505082611868565b5060407f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006118ac565b90506020813d602011611952575b8161193b60209383613328565b810103126105cb5761194c906135b9565b82611835565b3d915061192e565b346105cb575f3660031901126105cb5760405163f29486a160e01b81523060048201526101a09081816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544576040925f926119da575b505060608282015191015182519182526020820152f35b6119f99250803d10611a00575b6119f18183613328565b8101906137a3565b82806119c3565b503d6119e7565b346105cb575f3660031901126105cb57604051610200810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e082015260405163ca4f280360e01b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91611dcb575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91611da8575b5060208201527f0000000000000000000000000000000000000000000000000000000000000000151560408201527f0000000000000000000000000000000000000000000000000000000000000000151560608201526509184e72a000608082015267016345785d8a000060a08201527f000000000000000000000000000000000000000000000000000000000000000060c08201527f000000000000000000000000000000000000000000000000000000000000000060e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201526729a2241af62c00006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152620151806101a0820152620f42406101c0820152655af3107a40006101e08201526040518091602082526101e0611d08611cf2835161020060208701526102208601906134cd565b6020840151858203601f1901604087015261349a565b91604081015115156060850152606081015115156080850152608081015160a085015260a081015160c085015260c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a08501526101a08101516101c08501526101c08101518285015201516102008301520390f35b611dc491503d805f833e611dbc8183613328565b81019061371a565b5082611b43565b611ddf91503d805f833e6105bc8183613328565b82611aee565b346105cb5760203660031901126105cb576001600160a01b03611e06613263565b165f526002602052602060405f2054604051908152f35b346105cb576003196020368201126105cb576004359067ffffffffffffffff908183116105cb5760e09083360301126105cb576040519160e083018381108382111761094657604052806004013560028110156105cb578352602083016024820135815260448201358381116105cb57611e9d9060043691850101613362565b9360408101948552606081019360648401358552608082019360848101358552611ec960a4820161328f565b60a084015260c48101359182116105cb576004611ee992369201016133c2565b60c0820152611ef6613dee565b611f008551614a47565b969196929092612043575b611f13614750565b51611f1d81613509565b611f2681613509565b611fb957611f7a92611f6f611f80969593611f7493519889975195519788945194859288155f14611fa157611f6892610d2c610d2c959361047b93979261367c565b958a61367c565b6138ac565b906138e9565b9261367c565b518111611f9257602090604051908152f35b635a09f12960e11b5f5260045ffd5b93611f6892610d2c610d2c959361047b93979261367c565b5193519251915193949092611fce838761367c565b518511611f9257610d2c8593611ffa612005966120009585155f1461203957610d2c9091955b8b61367c565b9761367c565b613afe565b90811561202a5761201a6001916020946138d6565b915f198301040190151502610c36565b630a0c22c760e01b5f5260045ffd5b94610d2c90611ff4565b61204d83886140f2565b611f0b565b346105cb576020806003193601126105cb5760448161206f613263565b604051633de222bb60e21b81523060048201526001600160a01b03918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916120d2575b50604051908152f35b90508181813d83116120f8575b6120e98183613328565b810103126105cb5751826120c9565b503d6120df565b346105cb575f3660031901126105cb575f606060405161211e816132a3565b8281528260208201528260408201520152608061213961375e565b604051906bffffffffffffffffffffffff8082511683526020820151166020830152606060408201519163ffffffff80931660408501520151166060820152f35b346105cb575f3660031901126105cb576356b7fcdb60e01b5f5260045ffd5b346105cb575f3660031901126105cb57602060405167016345785d8a00008152f35b346105cb575f3660031901126105cb57335f908152600260205260409020805460018101909155005b346105cb575f3660031901126105cb576020610c3661220161485b565b6148df565b346105cb5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561223736613418565b92919390612243613dee565b6001600160a01b03809160405195865216941692a3005b346105cb575f3660031901126105cb576040516005545f8261227b83613581565b91828252602093600190856001821691825f146116495750506001146122a857506115da92500383613328565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106122eb5750506115da9350820101856115cd565b805483890185015287945086939092019181016122d4565b346105cb576003196040368201126105cb576004359067ffffffffffffffff82116105cb5760e091360301126105cb5761233b613279565b5060206040515f8152f35b346105cb575f3660031901126105cb576060612360614a88565b919250604051928352602083015215156040820152f35b346105cb575f3660031901126105cb576020610c366001600160801b03600754831c16614831565b346105cb5760e03660031901126105cb576123b8613263565b506123c1613279565b600560443510156105cb5767ffffffffffffffff6064358181116105cb576123ed903690600401613362565b5060a4358181116105cb57612406903690600401613362565b9060c4359081116105cb5760249261242460209236906004016133c2565b5061242d613dee565b6040516339370aa960e21b81526001600160a01b03918216600482015293849182907f0000000000000000000000000000000000000000000000000000000000000000165afa918215610544575f926124a2575b610e5c610e43610e5685610e4b86610e5083610e4b610e3b826084356138ac565b91506020823d6020116124d0575b816124bd60209383613328565b810103126105cb57905190610e56612481565b3d91506124b0565b346105cb5760603660031901126105cb5767ffffffffffffffff6004358181116105cb5761250a903690600401613362565b506044359081116105cb5761233b9036906004016133c2565b346105cb575f3660031901126105cb57602063ffffffff60075416604051908152f35b346105cb575f3660031901126105cb576020610c3661491c565b346105cb575f3660031901126105cb57602060405160128152f35b346105cb575f3660031901126105cb5760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346105cb575f3660031901126105cb57604051610240810181811067ffffffffffffffff8211176109465760405260608152606060208201525f60408201525f60608201525f6080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201526040516329ae7ec560e11b81523060048201525f816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a5b575b508152604051633f1b0def60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91612a3f575b50602082015260405163b45090f960e01b81523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f91612a0d575b5060408201526127676135c6565b606082015267ffffffffffffffff60075463ffffffff811660808401526127db604051612793816132dc565b600281526040366020830137600854906001600160801b03918281166127b88361366f565b5260801c6127c58261364b565b5260a08601528260201c168060e0860152614831565b60c084015260a01c1661010082015263ffffffff60606127f961375e565b6bffffffffffffffffffffffff80825116610160860152602082015116610180850152826040820151166101a08501520151166101c082015260405163f29486a160e01b81523060048201526101a0816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610544575f916129ec575b5061012060e0820151151591826101e08501526101008101511515610200850152015115156102208301526129ca575b60405180916020825261022061292c6128dd8351610240602087015261026086019061349a565b6128f9602085015191601f19928388830301604089015261349a565b906040850151606087015260608501516080870152608085015160a087015260a0850151908683030160c087015261349a565b9160c081015160e085015260e08101516101008501526101008101516101208501526101208101516101408501526101408101516101608501526101608101516101808501526101808101516101a085015263ffffffff6101a0820151166101c085015263ffffffff6101c0820151166101e08501526101e08101511515610200850152610200810151151582850152015115156102408301520390f35b6129e16129d561485b565b806101208401526148df565b6101408201526128b6565b612a0791506101a03d6101a011611a00576119f18183613328565b82612886565b90506020813d602011612a37575b81612a2860209383613328565b810103126105cb575182612759565b3d9150612a1b565b612a5391503d805f833e611dbc8183613328565b905082612700565b612a6f91503d805f833e610f388183613328565b826126ab565b346105cb576101003660031901126105cb57612a8f613263565b50612a98613279565b50600460443510156105cb5767ffffffffffffffff6084358181116105cb57612ac5903690600401613362565b5060a4358181116105cb5761153c903690600401613362565b346105cb5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61223736613418565b346105cb5760846020612b2136613418565b604051630aed65f560e11b81523360048201526001600160a01b0393841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af180156105445761119657602060405160018152f35b346105cb575f3660031901126105cb5760206007546001600160801b0360405191831c168152f35b346105cb575f3660031901126105cb57602067ffffffffffffffff60075460a01c16604051908152f35b346105cb5760403660031901126105cb5767ffffffffffffffff6004358181116105cb57612c15903690600401613362565b6024358281116105cb57612c2d9036906004016133c2565b50612c36613dee565b60405191610120830190811183821017610946576040525f825260208201905f8252604083015f815260608401935f855260808101915f835260a08201926060845260c08301925f8452612cb9612caa60e08301925f84526101008101995f8b52612c9f613e33565b928382935252613ebf565b91828652818c52808752613fb9565b8a528352855280865297612ce9612cdc612cd28961364b565b516103c68a61366f565b996103c66103bf8261364b565b670de05bc096e9c000998a820282159b838204148c17156104f757670de0b6b3a76400009b670de111a6b7de40008085029485041417156104f7578b8091048210928315612e43575b505050612e345788612dc7612db8612dd196612dae958b85612de09f612d8890612dd69f612db39f612d75906103c6612d6d612d7e9461366f565b51915161366f565b9e8f90516138d6565b049c8d94516138d6565b049b8c935197519951612dae612da186610d2c8661364b565b6104d186610d2c8761366f565b614d6a565b614dd5565b92612dae84610e4b8b806138d6565b6118a586806138d6565b6140f2565b514290429061421a565b50612e0a7f00000000000000000000000000000000000000000000000000000000000000006144a9565b50610e5c7f0000000000000000000000000000000000000000000000000000000000000000614612565b6304f512cb60e41b5f5260045ffd5b041090508a8a81612d32565b346105cb576003196020368201126105cb576004359067ffffffffffffffff82116105cb5761018091360301126105cb57604080515f81525f6020820152f35b346105cb575f3660031901126105cb576020610c366135c6565b346105cb5760603660031901126105cb5760043567ffffffffffffffff81116105cb57612eda903690600401613362565b5063d623472560e01b5f5260045ffd5b346105cb575f3660031901126105cb5760406008548151906001600160801b038116825260801c6020820152f35b346105cb5760e03660031901126105cb57612f31613263565b50612f3a613279565b5060443567ffffffffffffffff81116105cb57366023820112156105cb578060040135612f668161334a565b91612f746040519384613328565b81835260206024602085019360071b830101913683116105cb57602401925b828410612ff0578460803660631901126105cb57600290612fb2613dee565b511480612fdf575b80612fcd575b6020906040519015158152f35b5060c435801590811514612fc0575f80fd5b506064358015158114612fba575f80fd5b6080843603126105cb5760405190613007826132a3565b6130108561328f565b82528285013560028110156105cb578383015260408501356001600160a01b03811681036105cb576040830152606090818601359283151584036105cb576080938593820152815201930192612f93565b346105cb5760403660031901126105cb57611152602061307f613263565b60405163e1f21c6760e01b81523360048201526001600160a01b0390911660248083019190915235604482015291829081906064820190565b346105cb575f3660031901126105cb576040516003545f826130d983613581565b91828252602093600190856001821691825f1461164957505060011461310657506115da92500383613328565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b8583106131495750506115da9350820101856115cd565b80548389018501528794508693909201918101613132565b346105cb5760203660031901126105cb5761317a613b32565b613182613bd6565b61318a613c73565b6040516374eef59360e11b81523060048201526001600160a01b036060826024817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610544576131ee926020915f91610a2b575001511630613c90565b6131f6614b05565b613201600435614612565b610927613c73565b346105cb5760203660031901126105cb576004359063ffffffff60e01b82168092036105cb576020916301ffc9a760e01b148152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105cb57565b602435906001600160a01b03821682036105cb57565b35906001600160a01b03821682036105cb57565b6080810190811067ffffffffffffffff82111761094657604052565b610140810190811067ffffffffffffffff82111761094657604052565b6060810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff811161094657604052565b6040810190811067ffffffffffffffff82111761094657604052565b90601f8019910116810190811067ffffffffffffffff82111761094657604052565b67ffffffffffffffff81116109465760051b60200190565b9080601f830112156105cb57602090823561337c8161334a565b9361338a6040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106133b3575050505090565b813581529083019083016133a5565b81601f820112156105cb5780359067ffffffffffffffff821161094657604051926133f7601f8401601f191660200185613328565b828452602083830101116105cb57815f926020809301838601378301015290565b60609060031901126105cb576001600160a01b039060043582811681036105cb579160243590811681036105cb579060443590565b346105cb575f3660031901126105cb5760206040515f8152f35b9081518082526020808093019301915f5b828110613486575050505090565b835185529381019392810192600101613478565b9081518082526020808093019301915f5b8281106134b9575050505090565b8351855293810193928101926001016134ab565b9081518082526020808093019301915f5b8281106134ec575050505090565b83516001600160a01b0316855293810193928101926001016134de565b6002111561351357565b634e487b7160e01b5f52602160045260245ffd5b51906001600160a01b03821682036105cb57565b908160609103126105cb576135796040805192613557846132dc565b61356081613527565b845261356e60208201613527565b602085015201613527565b604082015290565b90600182811c921680156135af575b602083101461359b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613590565b519081151582036105cb57565b6040516339370aa960e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f9161361c575090565b90506020813d602011613643575b8161363760209383613328565b810103126105cb575190565b3d915061362a565b80516001101561365b5760400190565b634e487b7160e01b5f52603260045260245ffd5b80511561365b5760200190565b805182101561365b5760209160051b010190565b9080601f830112156105cb578151906020916136ab8161334a565b936136b96040519586613328565b81855260208086019260051b8201019283116105cb57602001905b8282106136e2575050505090565b815181529083019083016136d4565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613690565b90565b9190916040818403126105cb5780519267ffffffffffffffff938481116105cb5781613747918401613690565b9360208301519081116105cb576137179201613690565b6040519061376b826132a3565b8160606006546bffffffffffffffffffffffff808216845281831c16602084015263ffffffff8160c01c16604084015260e01c910152565b809103906101a082126105cb576080604051926137bf846132bf565b126105cb576040516137d0816132a3565b6137d9826135b9565b81526137e7602083016135b9565b60208201526137f8604083016135b9565b6040820152613809606083016135b9565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036105cb576080830152610100908181015163ffffffff811681036105cb576138a5916101809160a0860152610120936138778583016135b9565b60c087015261388961014083016135b9565b60e087015261389b61016083016135b9565b90860152016135b9565b9082015290565b919082018092116104f757565b90670de0b6b3a7640000918281029281840414901517156104f757565b818102929181159184041417156104f757565b81156138f3570490565b634e487b7160e01b5f52601260045260245ffd5b9080601f830112156105cb578151906020916139228161334a565b936139306040519586613328565b81855260208086019260051b8201019283116105cb57602001905b828210613959575050505090565b81516001600160a01b03811681036105cb57815290830190830161394b565b906020828203126105cb57815167ffffffffffffffff81116105cb576137179201613907565b916080838303126105cb5782519067ffffffffffffffff918281116105cb57836139c9918601613907565b936020808201518481116105cb57820185601f820112156105cb578051906139f08261334a565b926040613a006040519586613328565b83855281850190826060809602850101938a85116105cb578301915b848310613a59575050505050509360408201518481116105cb5781613a42918401613690565b9360608301519081116105cb576137179201613690565b85838c03126105cb57815190613a6e826132dc565b835160028110156105cb57825284840151906001600160a01b03821682036105cb57828692838a950152613aa38587016135b9565b85820152815201920191613a1c565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b16604082015260248152613af8816132dc565b51902090565b919082039182116104f757565b908160209103126105cb575160ff811681036105cb5790565b604d81116104f757600a0a90565b6040516314cb3b1f60e21b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613b9c575b5015613b8d57565b63486aa30760e01b5f5260045ffd5b90506020813d602011613bce575b81613bb760209383613328565b810103126105cb57613bc8906135b9565b5f613b85565b3d9150613baa565b604051638380edb760e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91613c39575b50613c2a57565b633915d7f960e21b5f5260045ffd5b90506020813d602011613c6b575b81613c5460209383613328565b810103126105cb57613c65906135b9565b5f613c23565b3d9150613c47565b613c7b614c48565b15613c8257565b62f656ad60e21b5f5260045ffd5b906001600160a01b0390811680613de35750613cce5f357fffffffff0000000000000000000000000000000000000000000000000000000016613ab2565b60405163aaabadc560e01b8152602093909184836004817f000000000000000000000000000000000000000000000000000000000000000088165afa92831561054457859385915f91613da4575b50906064929160405196879586946326f8aa2160e21b86526004860152336024860152166044840152165afa918215610544575f92613d6e575b505015613d5f57565b6323dada5360e01b5f5260045ffd5b90809250813d8311613d9d575b613d858183613328565b810103126105cb57613d96906135b9565b5f80613d56565b503d613d7b565b92948092508391503d8311613ddc575b613dbe8183613328565b810103126105cb575183811681036105cb5784929084906064613d1c565b503d613db4565b9150503303613d5f57565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303613e2057565b63089676d560e01b5f523360045260245ffd5b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92613e9f575b50613717613e996114b9613e998561366f565b51614cea565b613eb49192503d805f833e610b8a8183613328565b50509050905f613e86565b7f000000000000000000000000000000000000000000000000000000000000000015613fa957905b7f000000000000000000000000000000000000000000000000000000000000000015613f9957915b613717613f4084610e4b857f00000000000000000000000000000000000000000000000000000000000000006138d6565b93610e4b613f7282610e4b877f00000000000000000000000000000000000000000000000000000000000000006138d6565b947f00000000000000000000000000000000000000000000000000000000000000006138d6565b50670de0b6b3a764000091613f0f565b50670de0b6b3a764000090613ee7565b92919083610e4b613fc9926138b9565b613fda613fd5826138b9565b614eab565b670de0b6b3a763ffff1981019081116104f75780156138f357710b7abc627050305adf14a3d9e40000000000049269d3c21bcecceda100000094858501908186116104f757614033670de0b6b3a76400009283926138d6565b049360405191614042836132dc565b600283526040366020850137829761405a8784614d48565b908881018091116104f75761406e91614d48565b91818302928084048314901517156104f7576140c06140c592614097896120006140cb97614eab565b6140a08761364b565b526140ae89610d2c8861364b565b906140b9848c6138d6565b0490613afe565b6140ce565b9161366f565b52565b90670de0b6b3a7640000918281029281840414901517156104f757613717916138e9565b906001600160801b0361410483614dff565b166fffffffffffffffffffffffffffffffff1961412083614dff565b60801b16176008556040907ff36b0fd05d55ca91fb3ebd8493adf78a3405a11c145c054a092d0994b665b637828051858152836020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082519360208501528284015281835261419c836132dc565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5669727475616c42616c616e63657355706461746564000000000000000000006004840152886024840152604483019061323f565b03925af190811561421157506142065750565b61420f906132f8565b565b513d5f823e3d90fd5b92919081811180156144a0575b6144915761423361375e565b9161423d856148df565b946001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916040938451926314cb3b1f60e21b84523060048501526020938481602481895afa908115614487575f91614452575b501561443e57506143e792916143d9916142b061485b565b996142ba8b6148df565b985b6bffffffffffffffffffffffff806142d38c614e2a565b1682526142df83614e2a565b81888401911681527bffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffff00000000000000000000000061432687614e5a565b938d86019563ffffffff809616875261433e8a614e5a565b95861660608201525116925160601b16935160c01b169163ffffffff60e01b9060e01b16921717176006557fa18562ea402e57cc2b437f8d7a139c6c38958adc1ecbb706ec37a7a64ff6e7a5818a6143b386868d51948594859094939260609260808301968352602083015260408201520152565b0390a1875198899586019094939260609260808301968352602083015260408201520152565b03601f198101855284613328565b803b156105cb576141f35f93918492845195868094819363c808824760e01b83527f5072696365526174696f537461746555706461746564000000000000000000006004840152886024840152604483019061323f565b9597916143d991836143e79594989a6142bc565b90508481813d8311614480575b6144698183613328565b810103126105cb5761447a906135b9565b5f614298565b503d61445f565b87513d5f823e3d90fd5b632ca4094f60e21b5f5260045ffd5b50428110614227565b6729a2241af62c00008111614603576201e6e9670de0b6b3a7640000910481039081116104f7576144d981614831565b906144e381614dff565b73ffffffffffffffffffffffffffffffff000000006007549160201b169073ffffffffffffffffffffffffffffffff0000000019161760075560407f7ee46b38be05f748de1c0fb2002ac48fe50a26a0017c654a92c0bf9228058847818051858152846020820152a16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168151928460208501528284015281835261458f836132dc565b803b156105cb576145e65f93918492845195868094819363c808824760e01b83527f4461696c79507269636553686966744578706f6e656e745570646174656400006004840152886024840152604483019061323f565b03925af190811561421157506145fa575090565b613717906132f8565b632b5b4f3560e01b5f5260045ffd5b670de0b6b3a76400008111614741576007547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000008360a01b169116176007557f74d468c8e414c37c502176a45cce93c85eaa0abf608e40641dc6664ca5efcab06020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526146d78261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f43656e74657265646e6573734d617267696e5570646174656400000000000000600484015260406024840152604483019061323f565b03925af18015610544576142065750565b637304fac760e01b5f5260045ffd5b63ffffffff61475e42614e5a565b168063ffffffff1960075416176007557f32a9fd44bdf167703f584bd25098494d3d18a4653a2d97116d28da05209444d46020604051838152a16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051916020830152602082526147d88261330c565b803b156105cb576147305f9291839260405194858094819363c808824760e01b83527f4c61737454696d657374616d7055706461746564000000000000000000000000600484015260406024840152604483019061323f565b670de0b6b3a7640000818103918183116104f7576201e6e980840293840414911417156104f75790565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457613717915f916148c1575b506148ba81614a47565b5091614e82565b6148d591503d805f833e610b8a8183613328565b925050505f6148b0565b670de0b6b3a764000090818102908082048314901517156104f75761490390614eab565b8181029181830414901517156104f75761371790614eab565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016301480614a1e575b15614977577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176109465760405251902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461494e565b614a83906008546001600160801b036007549167ffffffffffffffff8360a01c16938263ffffffff85169460201c16928260801c921690614fde565b909192565b6040516333f0703b60e11b8152306004820152905f826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610544575f92614ae5575b50614a8382614a47565b614afa9192503d805f833e610b8a8183613328565b92505050905f614adb565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561054457614b60915f91614b7f575b50614a47565b614b6f575b505061420f614750565b614b78916140f2565b5f80614b65565b614b9391503d805f833e610b8a8183613328565b925050505f614b5a565b9190614ba88361366f565b51614bb6575050505f905f90565b614bbf8361364b565b5115614c3e57614bde6114b9614be593614bd88661366f565b516138d6565b51906138d6565b808211614c1457670de0b6b3a7640000918281029281840414901517156104f757614c0f916138e9565b905f90565b90670de0b6b3a7640000918281029281840414901517156104f757614c38916138e9565b90600190565b5050505f90600190565b6040516333f0703b60e11b81523060048201525f816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610544575f91614ccc575b50614cc660085467ffffffffffffffff60075460a01c16926001600160801b038260801c921690614b9d565b50101590565b614ce091503d805f833e610b8a8183613328565b925050505f614c9a565b60018151614cf781613509565b614d0081613509565b03614d3b5760206001600160a01b0381600493015116604051928380926333cd77e760e11b82525afa908115610544575f9161361c575b5090565b50670de0b6b3a764000090565b90614d52916138d6565b6001670de0b6b3a76400005f19830104019015150290565b670de05bc096e9c000808302831591848204148217156104f757670de0b6b3a764000091670de111a6b7de40008086029586041417156104f7578190048210928315614dc9575b505050614dba57565b633d9f09df60e21b5f5260045ffd5b041090505f8080614db1565b614df5670de0b6b3a764000093610d2c6114b9614dfb95610d2c8661366f565b906138d6565b0490565b6001600160801b0390818111614e13571690565b6306dfcc6560e41b5f52608060045260245260445ffd5b6bffffffffffffffffffffffff90818111614e43571690565b6306dfcc6560e41b5f52606060045260245260445ffd5b63ffffffff90818111614e6b571690565b6306dfcc6560e41b5f52602060045260245260445ffd5b610e4b670de0b6b3a76400006118a561189e866118956137179888614ea698614dd5565b61531c565b600180821115614d3757614f7a908083700100000000000000000000000000000000811015614fc7575b80680100000000000000006004921015614fba575b640100000000811015614fad575b62010000811015614fa0575b610100811015614f94575b6010811015614f88575b1015614f81575b600302811c614f2f81856138e9565b01811c614f3c81856138e9565b01811c614f4981856138e9565b01811c614f5681856138e9565b01811c614f6381856138e9565b01811c614f7081856138e9565b01901c80926138e9565b8111900390565b811b614f20565b811c9160021b91614f19565b60081c91811b91614f0f565b60101c9160081b91614f04565b60201c9160101b91614ef8565b60401c9160201b91614eea565b50680100000000000000009050608084901c614ed5565b919495929390955f94614ff042614e5a565b9163ffffffff90818416988286168a811461530e578b829b61501061375e565b92866bffffffffffffffffffffffff9281848751169461504a8d8260208b01511699604081019a6060868d5116920199868b5116936155fd565b16965116109283615301575b50505061518c575b5050509067ffffffffffffffff9493929161507a8a8c89614b9d565b969091161161508c575b505050505050565b909192959894979396506150a184868a614e82565b670de0b6b3a764000096878202918083048914901517156104f7576150c86150f292614eab565b958915615172576150e26150db8c61366f565b519b61364b565b51975b8a1561516a5750946155e7565b16858102908082048714901517156104f75761512292614df56151169288946156b3565b0495614df584886138ac565b91670de0b6b3a763ffff1982019182116104f75761514d9361514787611f74946138d6565b04613afe565b901561516557905b90916001905f8080808080615084565b615155565b9050946155e7565b61518561517e8c61364b565b519b61366f565b51976150e5565b829b506151a19291949c5080939a5088614b9d565b9990918a156152ea576151ce906151b78961366f565b519092945b670de0b6b3a7640000928184926138d6565b04938083018093116104f7577f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851685036104f7576152108560021b826138ac565b671bc16d674ec7ffff1981019081116104f75761522c916138d6565b6ec097ce7bc90715b34b9f100000000081018091116104f75761525b92615255614df592614eab565b906138ac565b670de0b6b3a763ffff1983019283116104f7577f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831683036104f7576152ab610e4b916152b29460011b906138e9565b93846138d6565b97156152d8579067ffffffffffffffff939291975b979860019790919293945f8061505e565b67ffffffffffffffff939291906152c7565b906151ce906152f88961364b565b519092946151bc565b51161190505f8681615056565b5098505f9750505050505050565b90801561202a57670de0b6b3a7640000918281029281840414901517156104f7576001905f19830104019015150290565b60ff81146153885760ff811690601f8211615379576040519161536f8361330c565b8252602082015290565b632cd44ac360e21b5f5260045ffd5b506040515f815f549161539a83613581565b8083529260209060019081811690811561542357506001146153c5575b505061371792500382613328565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061540b57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926153f0565b9150506020925061371794915060ff191682840152151560051b8201015f806153b7565b60ff81146154695760ff811690601f8211615379576040519161536f8361330c565b506040515f8160019160015461547e81613581565b808452936020916001811690811561542357506001146154a657505061371792500382613328565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b8284106154ed57506137179450505081016020015f806153b7565b855487850183015294850194869450928101926154d2565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161557c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610544575f516001600160a01b0381161561557257905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156135135780615599575050565b600181036155b05763f645eedf60e01b5f5260045ffd5b600281036155cb575063fce698f760e01b5f5260045260245ffd5b6003146155d55750565b6335e2f38360e21b5f5260045260245ffd5b63ffffffff91821690821603919082116104f757565b90939192919063ffffffff90818116828416811061561f575050505050905090565b82851610156156ab57838261563a61564896615641946155e7565b16936155e7565b16906140ce565b916bffffffffffffffffffffffff8091169116670de0b6b3a7640000808202938285048214831517156104f75761568e6156949161568986613717986138e9565b6156b3565b846138d6565b049181808210911802188180821191180218614e2a565b505050505090565b670de0b6b3a7640000918083036156ca5750905090565b8290671bc16d674ec8000081036156e757505080614dfb916138d6565b673782dace9d900000810361570b575061570482614dfb936138d6565b04806138d6565b90506157169161577a565b6127108082029082820414821517156104f75760015f199384830104019015150290600182018083116104f757811015615751575050505f90565b030190565b80156138f3576ec097ce7bc90715b34b9f10000000000590565b81156138f3570590565b908015615f26578115615f20578160ff1c615f1257770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015615f035781670c7d713b49da00001280615ef2575b15615ba557670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090615803908402828101906ec097ce7bc90715b34b9f0fffffffff19018302615770565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b05680238fd42c5cf03ffff198181131580615b92575b15615b8357819082121580615b70575b15615b61575f915f8112615b52575b506064906806f05b59d3b20000008112615b05576806f05b59d3b1ffffff190168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215615ae2575b6856bc75e2d631000000811215615abe575b682b5e3af16b18800000811215615a9c575b6815af1d78b58c400000811215615a7a575b680ad78ebc5ac6200000811215615a59575b82811215615a38575b6802b5e3af16b1880000811215615a17575b68015af1d78b58c400008112156159f6575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146137175761371790615756565b6806f5f1775788937937839168015af1d78b58c3ffff190192020590615977565b6808f00f760a4b2db55d83916802b5e3af16b187ffff190192020590615965565b680ebc5fb41746121110839168056bc75e2d630fffff190192020590615953565b68280e60114edb805d038391680ad78ebc5ac61fffff19019202059061594a565b690127fa27722cc06cc5e283916815af1d78b58c3fffff190192020590615938565b693f1fce3da636ea5cf8508391682b5e3af16b187fffff190192020590615926565b6b02df0ab5a80a22c61ab5a70083916856bc75e2d630ffffff190192020590615914565b6e01855144814a7ff805980ff0084000915068ad78ebc5ac61ffffff1901615902565b6803782dace9d90000008112615b3f576803782dace9d8ffffff190168056bc75e2d63100000826b1425982cf597cd205cef7380926158ed565b68056bc75e2d63100000826001926158ed565b600192505f03905060646158a7565b63d4794efd60e01b5f5260045ffd5b5068070c1cc73b00c80000821315615898565b63a2f9f7e360e01b5f5260045ffd5b5068070c1cc73b00c80000821315615888565b81670de0b6b3a7640000925f91848112615edc575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215615eb1575b73011798004d755d3c8bc8e03204cf44619e000000821215615e90575b820290808302906e01855144814a7ff805980ff00840009081831215615e6d575b50506b02df0ab5a80a22c61ab5a70080821215615e4d575b50693f1fce3da636ea5cf85080821215615e2d575b50690127fa27722cc06cc5e280821215615e0d575b5068280e60114edb805d0380821215615ded575b50680ebc5fb4174612111080821215615dd6575b506808f00f760a4b2db55d80821215615db6575b506806f5f177578893793780821215615d96575b506806248f33704b28660380821215615d77575b506805c548670b9510e7ac80821215615d58575b50615d0568056bc75e2d6310000091828082019168056bc75e2d630fffff190102615770565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14615d53575f035b02615872565b615d4d565b68056bc75e2d631000006756bc75e2d63100009202059101905f615cdf565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f615ccb565b68056bc75e2d6310000068015af1d78b58c400009202059101905f615cb7565b68056bc75e2d631000006802b5e3af16b18800009202059101905f615ca3565b68056bc75e2d63100000809202059101905f615c8f565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f615c7b565b68056bc75e2d631000006815af1d78b58c4000009202059101905f615c67565b68056bc75e2d63100000682b5e3af16b188000009202059101905f615c52565b68056bc75e2d631000006856bc75e2d6310000009202059101905f615c3d565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80615c25565b906b1425982cf597cd205cef73806803782dace9d900000091059101615c04565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000615be7565b9050615ee89150615756565b6001906064615bba565b50670f43fc2c04ee000082126157c0565b63d831731160e01b5f5260045ffd5b6211380f60e51b5f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b91909180600314615f7f5780600114615f6b57600214615f6257634e487b7160e01b5f52605160045260245ffd5b61371791614d48565b50614dfb90670de0b6b3a7640000926138d6565b50670de0b6b3a7640000918281029281840414901517156104f757613717916138e956fea264697066735822122059118932267011c7cf97006bc40463d53aea2d566eeecab5cb5a20ccf1011bca64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0xAA JUMPI PUSH2 0x1E PUSH2 0x15 PUSH2 0x13D JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x385 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x16BA SWAP1 DUP2 PUSH2 0x5E3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x203 ADD MSTORE PUSH2 0x124C ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x11D6 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x227 ADD MSTORE PUSH2 0x1271 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x11F7 ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0xF14 ADD MSTORE PUSH2 0x120 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2F9 ADD MSTORE DUP2 DUP2 PUSH2 0x972 ADD MSTORE DUP2 DUP2 PUSH2 0x9E0 ADD MSTORE DUP2 DUP2 PUSH2 0x1148 ADD MSTORE PUSH2 0x14B2 ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x8DF ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0xCF0 ADD MSTORE PUSH2 0x119E ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0xE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0xAE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xAA JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xE7 JUMPI PUSH2 0x11B PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0xC2 JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xAA JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH2 0x8954 SWAP1 DUP2 CODESIZE SUB DUP1 PUSH2 0x14E DUP2 PUSH2 0xC2 JUMP JUMPDEST SWAP4 DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0xAA JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xAA JUMPI PUSH1 0x20 DUP5 ADD MLOAD SWAP4 PUSH4 0xFFFFFFFF DUP6 AND DUP6 SUB PUSH2 0xAA JUMPI PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP5 SWAP1 DUP6 DUP2 GT PUSH2 0xAA JUMPI DUP2 PUSH2 0x1A6 SWAP2 DUP5 ADD PUSH2 0xEC JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xAA JUMPI PUSH2 0x1BD SWAP3 ADD PUSH2 0xEC JUMP JUMPDEST SWAP2 SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F2 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1DE JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1D3 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x208 JUMPI POP POP JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x242 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x237 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x22C JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x223 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x258 JUMPI POP POP JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x292 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x287 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x27C JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x273 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xE7 JUMPI PUSH2 0x2C3 DUP2 PUSH2 0x2BE PUSH1 0x4 SLOAD PUSH2 0x1C4 JUMP JUMPDEST PUSH2 0x24C JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x304 JUMPI POP DUP2 SWAP1 PUSH2 0x2F4 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x2F9 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x4 SSTORE JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x1F NOT DUP4 AND SWAP5 SWAP1 SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP3 PUSH0 SWAP1 JUMPDEST DUP8 DUP3 LT PUSH2 0x36D JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x355 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x34A JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x336 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x6CB7 PUSH2 0x397 PUSH1 0x20 DUP3 ADD PUSH2 0xC2 JUMP JUMPDEST SWAP1 DUP1 DUP3 MSTORE PUSH2 0x1C9D PUSH1 0x20 DUP4 ADD CODECOPY DUP1 MLOAD SWAP1 DUP2 PUSH1 0x1 SHR SWAP2 DUP3 PUSH1 0xA0 MSTORE DUP3 DUP2 SUB SWAP3 DUP2 DUP5 GT PUSH2 0x450 JUMPI DUP4 PUSH1 0xE0 MSTORE DUP1 DUP4 MSTORE PUSH2 0x3CA DUP4 PUSH2 0x553 JUMP JUMPDEST PUSH1 0x80 MSTORE DUP3 ADD SWAP2 DUP3 MLOAD SWAP4 DUP4 MSTORE PUSH2 0x3DE DUP4 PUSH2 0x5A2 JUMP JUMPDEST PUSH1 0xC0 MSTORE MSTORE MSTORE ADDRESS PUSH2 0x100 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x441 JUMPI PUSH2 0x120 MSTORE PUSH4 0xFFFFFFFF SWAP3 PUSH2 0x40D DUP5 DUP4 AND TIMESTAMP PUSH2 0x464 JUMP JUMPDEST SWAP4 DUP1 DUP6 GT PUSH2 0x432 JUMPI PUSH2 0x430 SWAP5 PUSH2 0x42B SWAP4 PUSH2 0x140 MSTORE AND PUSH2 0x160 MSTORE PUSH2 0x476 JUMP JUMPDEST PUSH2 0x29C JUMP JUMPDEST JUMP JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x471 JUMPI JUMP JUMPDEST PUSH2 0x450 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xE7 JUMPI PUSH2 0x49D DUP2 PUSH2 0x498 PUSH1 0x3 SLOAD PUSH2 0x1C4 JUMP JUMPDEST PUSH2 0x1FC JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x4D2 JUMPI POP DUP2 SWAP1 PUSH2 0x4CD SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x2F9 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x3 SSTORE JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH1 0x1F NOT DUP4 AND SWAP5 SWAP1 SWAP2 SWAP1 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP3 PUSH0 SWAP1 JUMPDEST DUP8 DUP3 LT PUSH2 0x53B JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x523 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x518 JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x504 JUMP JUMPDEST SWAP1 DUP2 MLOAD PUSH32 0x602038038060206000396000F3FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP4 PUSH0 CREATE SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x593 JUMPI JUMP JUMPDEST PUSH4 0xFEF82207 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 MLOAD PUSH32 0x60FE600053602038038060206001396001016000F3FEFEFEFEFEFEFEFEFEFEFE DUP4 MSTORE PUSH1 0x20 DUP2 ADD DUP4 PUSH0 CREATE SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x593 JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xC194DB EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x174481FA EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x193AD50F EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x2F2770DB EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x11C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x112 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xB3595BE0 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0xFE JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0xF9 JUMPI PUSH4 0xEC888061 EQ PUSH2 0xF4 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xD14 JUMP JUMPDEST PUSH2 0xCD4 JUMP JUMPDEST PUSH2 0xCAC JUMP JUMPDEST PUSH2 0xBF9 JUMP JUMPDEST PUSH2 0x9B3 JUMP JUMPDEST PUSH2 0x996 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH2 0x903 JUMP JUMPDEST PUSH2 0x8C3 JUMP JUMPDEST PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x813 JUMP JUMPDEST PUSH2 0x7D3 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x5D5 JUMP JUMPDEST PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH2 0x29D JUMP JUMPDEST PUSH2 0x24E JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH2 0x18A JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x162 JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH2 0x1DB SWAP2 PUSH2 0x1C7 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH2 0x11D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH2 0x423 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND DUP3 MSTORE PUSH32 0x0 AND PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x80 PUSH2 0x268 PUSH2 0xD2E JUMP JUMPDEST PUSH2 0x29B PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH2 0x2D9 PUSH0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xF0A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x3C0 JUMPI DUP5 SWAP3 PUSH2 0x360 SWAP3 PUSH0 SWAP3 PUSH2 0x3C5 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x26F8AA21 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP2 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x393 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x384 JUMPI PUSH2 0x382 PUSH2 0xD52 JUMP JUMPDEST STOP JUMPDEST PUSH4 0x23DADA53 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3B2 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3B9 JUMPI JUMPDEST PUSH2 0x3AA DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x166F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x373 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0xF7C JUMP JUMPDEST PUSH2 0x3E6 SWAP2 SWAP3 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x3ED JUMPI JUMPDEST PUSH2 0x3DE DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xF67 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x32F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D4 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x405 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH2 0x1DB PUSH2 0x1C7 PUSH2 0xD8D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1DF JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x4D4 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP5 PUSH2 0x467 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x162 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x162 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x162 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x55 PUSH1 0xB PUSH2 0x541 PUSH2 0x1DB SWAP5 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x4AA JUMP JUMPDEST PUSH2 0x555 PUSH2 0x54F PUSH1 0x24 CALLDATALOAD PUSH2 0x12B4 JUMP JUMPDEST SWAP2 PUSH2 0x11D3 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 AND PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD SWAP4 AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5B8 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x5AA JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD DUP1 DUP4 LT ISZERO PUSH2 0x6B2 JUMPI DUP2 DUP4 ADD DUP1 DUP5 GT PUSH2 0x6AD JUMPI DUP2 LT PUSH2 0x69C JUMPI JUMPDEST POP PUSH2 0x616 DUP2 PUSH2 0xA58 JUMP JUMPDEST SWAP2 PUSH2 0x624 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x467 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x1F NOT PUSH2 0x633 DUP4 PUSH2 0xA58 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1DB DUP7 DUP3 PUSH2 0x591 JUMP JUMPDEST DUP1 PUSH2 0x696 PUSH2 0x67E PUSH2 0x66B PUSH2 0x666 DUP10 SWAP6 DUP8 PUSH2 0xE7E JUMP JUMPDEST PUSH2 0xE9F JUMP JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x3 SHL SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x688 DUP4 DUP9 PUSH2 0xEF6 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x63C JUMP JUMPDEST DUP3 DUP2 SUB SWAP2 POP DUP2 GT PUSH2 0x6AD JUMPI PUSH0 PUSH2 0x60C JUMP JUMPDEST PUSH2 0xE6A JUMP JUMPDEST PUSH4 0x4E23D035 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x3 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP2 AND SWAP2 DUP3 ISZERO PUSH2 0x7B8 JUMPI JUMPDEST PUSH1 0x20 SWAP2 PUSH1 0x20 DUP6 LT DUP5 EQ PUSH2 0x7A4 JUMPI DUP5 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP4 SWAP1 DUP2 ISZERO PUSH2 0x785 JUMPI POP PUSH1 0x1 EQ PUSH2 0x72C JUMPI JUMPDEST PUSH2 0x1DB DUP7 PUSH2 0x720 DUP2 DUP9 SUB DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x3F4 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP5 POP SWAP2 SWAP3 SWAP2 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP4 DUP7 LT PUSH2 0x774 JUMPI POP POP POP SWAP2 ADD SWAP1 POP PUSH2 0x720 DUP3 PUSH2 0x1DB PUSH0 PUSH2 0x710 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD MSTORE SWAP5 DUP3 ADD SWAP5 DUP2 ADD PUSH2 0x759 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP5 MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD SWAP1 POP PUSH2 0x720 DUP3 PUSH2 0x1DB PUSH0 PUSH2 0x710 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x6EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x162 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x7F8 DUP2 PUSH2 0x7C2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x883 JUMPI PUSH2 0x1DB DUP7 PUSH2 0x877 DUP2 DUP11 SUB DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x591 JUMP JUMPDEST DUP5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x162 JUMPI PUSH2 0x94B PUSH1 0x20 SWAP2 PUSH2 0xF0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xA1E JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA36 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3ED JUMPI PUSH2 0x3DE DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xA14 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x162 JUMPI DUP2 PUSH1 0x20 PUSH2 0x405 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4AA JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1DF JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x162 JUMPI JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x162 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 PUSH2 0xA94 DUP5 PUSH2 0xA58 JUMP JUMPDEST SWAP4 PUSH1 0x40 SWAP4 PUSH2 0xAA5 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x467 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x162 JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0xACF JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x162 JUMPI DUP6 MLOAD SWAP1 PUSH2 0xAE5 DUP3 PUSH2 0x437 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH2 0xAF0 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP3 MSTORE DUP5 DUP5 ADD CALLDATALOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x162 JUMPI DUP3 DUP7 SWAP3 DUP4 PUSH1 0x80 SWAP6 ADD MSTORE DUP9 DUP7 ADD CALLDATALOAD PUSH2 0xB16 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP10 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP8 ADD CALLDATALOAD SWAP1 PUSH2 0xB2A DUP3 PUSH2 0xA70 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0xABF JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x63 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE DUP2 PUSH1 0x64 CALLDATALOAD PUSH2 0xB6F DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x84 CALLDATALOAD PUSH2 0xB7D DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH2 0xB91 DUP4 PUSH2 0x7C2 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH1 0xA0 SWAP1 PUSH1 0xE3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0xA0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE DUP2 PUSH1 0xE4 CALLDATALOAD DUP2 MSTORE PUSH2 0x104 CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x124 CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH2 0xBE4 DUP2 PUSH2 0xA70 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 PUSH2 0x164 CALLDATALOAD SWAP2 PUSH2 0xB91 DUP4 PUSH2 0xA70 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH2 0x1E0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x162 JUMPI PUSH2 0xC2C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA3D JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x162 JUMPI PUSH2 0xC45 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA3D JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x162 JUMPI PUSH2 0x1DB SWAP3 PUSH2 0xC65 PUSH2 0xC92 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA7A JUMP JUMPDEST SWAP1 PUSH2 0xC6F CALLDATASIZE PUSH2 0xB38 JUMP JUMPDEST SWAP3 PUSH2 0xC79 CALLDATASIZE PUSH2 0xB95 JUMP JUMPDEST SWAP1 PUSH2 0x1C4 CALLDATALOAD SWAP5 PUSH2 0x1A4 CALLDATALOAD SWAP5 PUSH2 0x184 CALLDATALOAD SWAP5 PUSH1 0xC4 CALLDATALOAD SWAP4 PUSH2 0x1054 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH2 0xCC6 PUSH2 0x119C JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xD3B DUP3 PUSH2 0x437 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0xD5A PUSH2 0x1299 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 PUSH1 0x4 SLOAD PUSH1 0x1 SWAP2 DUP2 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP4 AND SWAP1 DUP2 ISZERO PUSH2 0xE60 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 DUP7 LT DUP4 EQ PUSH2 0x7A4 JUMPI DUP6 DUP9 MSTORE DUP8 SWAP5 PUSH1 0x20 DUP7 ADD SWAP4 SWAP1 DUP2 ISZERO PUSH2 0xE41 JUMPI POP PUSH1 0x1 EQ PUSH2 0xDE1 JUMPI JUMPDEST POP POP POP PUSH2 0xDDF SWAP3 POP SUB DUP4 PUSH2 0x467 JUMP JUMPDEST JUMP JUMPDEST SWAP3 POP SWAP4 PUSH2 0xE0F PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 JUMP JUMPDEST SWAP5 PUSH0 SWAP4 JUMPDEST DUP3 DUP6 LT PUSH2 0xE2B JUMPI POP POP POP PUSH2 0xDDF SWAP4 POP ADD PUSH0 DUP1 DUP1 PUSH2 0xDD0 JUMP JUMPDEST DUP7 SLOAD DUP6 DUP6 ADD MSTORE SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 PUSH2 0xE13 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xDDF SWAP5 SWAP2 SWAP3 POP PUSH1 0xFF NOT AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x5 SHL ADD PUSH0 DUP1 DUP1 PUSH2 0xDD0 JUMP JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0xDA9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6AD JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0xE8B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xED4 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x162 JUMPI MLOAD PUSH2 0x405 DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 SWAP2 PUSH1 0x20 PUSH2 0xDDF SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH2 0x1044 DUP2 MLOAD PUSH2 0xFE3 PUSH2 0xFB3 PUSH2 0x140 SWAP3 DUP4 PUSH1 0x40 DUP13 ADD MSTORE PUSH2 0x180 DUP12 ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST DUP6 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP12 DUP4 SUB DUP2 ADD PUSH1 0x60 DUP14 ADD MSTORE SWAP2 PUSH2 0xFCE SWAP2 PUSH2 0x166 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP7 ADD MLOAD SWAP1 DUP12 DUP4 SUB ADD PUSH1 0x80 DUP13 ADD MSTORE PUSH2 0x166 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xA0 DUP11 ADD MSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP11 ADD MSTORE SWAP3 PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xE0 DUP11 ADD MSTORE PUSH2 0x1038 PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x100 SWAP4 DUP5 DUP13 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD SWAP4 PUSH2 0x120 SWAP5 DUP6 DUP14 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP12 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP9 ADD MSTORE JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP7 SWAP3 SWAP4 SWAP9 SWAP8 SWAP2 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1077 PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND PUSH2 0x118D JUMPI PUSH2 0xDDF SWAP8 PUSH2 0x1140 PUSH2 0x1184 SWAP6 PUSH2 0x1136 DUP5 PUSH2 0x10B5 SWAP12 PUSH2 0x1171 SWAP8 PUSH2 0x10A0 PUSH2 0x117F SWAP9 DUP15 PUSH2 0x1308 JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0xD2E JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1 DUP2 MSTORE SWAP14 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x111D PUSH1 0x20 DUP6 ADD MLOAD SWAP3 PUSH1 0x40 DUP7 ADD MLOAD SWAP5 PUSH2 0x10E9 PUSH2 0x10E3 PUSH1 0x80 PUSH2 0x10DB PUSH1 0x60 DUP12 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP10 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP10 PUSH2 0x13A0 JUMP JUMPDEST SWAP2 PUSH2 0x10F2 PUSH2 0x489 JUMP JUMPDEST SWAP12 DUP13 MSTORE PUSH1 0x20 DUP13 ADD MSTORE PUSH2 0x1102 PUSH2 0xD8D JUMP JUMPDEST PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP11 ADD MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE JUMP JUMPDEST ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0xF87 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH2 0x13CC JUMP JUMPDEST SWAP6 DUP7 SWAP3 DUP4 PUSH2 0x14A0 JUMP JUMPDEST PUSH4 0x187B85D9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x11CE JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH32 0x0 DUP1 DUP3 ADD SWAP1 DUP2 DUP4 GT PUSH2 0x6AD JUMPI DUP5 MLOAD SWAP3 DUP4 DUP4 ADD SWAP6 DUP7 DUP5 GT PUSH2 0x6AD JUMPI PUSH1 0x20 SWAP3 PUSH1 0x1 DUP5 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP11 DUP3 DUP2 DUP14 ADD ADD PUSH1 0x40 MSTORE DUP12 MSTORE DUP1 PUSH0 DUP4 DUP14 ADD PUSH32 0x0 EXTCODECOPY DUP11 ADD ADD PUSH32 0x0 EXTCODECOPY ADD SWAP2 DUP6 ADD ADD MCOPY JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x12A5 JUMPI JUMP JUMPDEST PUSH4 0x3AC4266D PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x12D7 DUP2 PUSH2 0x437 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x12E7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x12E7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 MLOAD GT PUSH2 0x1391 JUMPI PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x1370 JUMPI JUMPDEST PUSH2 0x1337 JUMPI PUSH1 0x80 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x1346 JUMPI JUMPDEST POP PUSH2 0x1337 JUMPI JUMP JUMPDEST PUSH4 0xA1E9DD9D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 POP PUSH1 0x20 PUSH2 0x1358 PUSH2 0x135F SWAP3 PUSH2 0xEE6 JUMP JUMPDEST MLOAD ADD PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x1368 DUP2 PUSH2 0x12DD JUMP JUMPDEST EQ ISZERO PUSH0 PUSH2 0x1330 JUMP JUMPDEST POP PUSH1 0x1 PUSH2 0x1381 PUSH1 0x20 PUSH2 0x1358 DUP6 PUSH2 0xED9 JUMP JUMPDEST PUSH2 0x138A DUP2 PUSH2 0x12DD JUMP JUMPDEST EQ ISZERO PUSH2 0x131F JUMP JUMPDEST PUSH4 0xE0F7BEB PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x13B5 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x54F PUSH2 0x13D9 SWAP2 PUSH2 0x12B4 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1491 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD PUSH0 CREATE2 SWAP1 RETURNDATASIZE ISZERO NOT DUP3 ISZERO AND PUSH2 0xF7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1482 JUMPI SWAP3 PUSH2 0x140F PUSH2 0x1299 JUMP JUMPDEST DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x1DF JUMPI DUP1 PUSH1 0x1 PUSH2 0x1449 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0xE9F JUMP JUMPDEST DUP2 SWAP3 SWAP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP2 DUP5 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH4 0xB06EBF3D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x13289277 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP5 SWAP2 SWAP4 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP6 PUSH2 0x14DB PUSH2 0x119C JUMP JUMPDEST SWAP2 DUP8 EXTCODESIZE ISZERO PUSH2 0x162 JUMPI SWAP8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x40 SWAP6 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP9 PUSH4 0xEEEC802F PUSH1 0xE0 SHL DUP11 MSTORE PUSH1 0x4 DUP4 PUSH2 0x1A4 DUP13 ADD SWAP4 AND PUSH1 0x4 DUP13 ADD MSTORE PUSH1 0x24 PUSH2 0x1A0 PUSH1 0x24 DUP14 ADD MSTORE DUP3 MLOAD DUP1 SWAP5 MSTORE PUSH2 0x1C4 DUP13 ADD SWAP11 PUSH1 0x20 DUP1 SWAP5 ADD SWAP6 PUSH0 SWAP4 JUMPDEST DUP7 DUP6 LT PUSH2 0x15FE JUMPI POP POP POP POP POP POP POP POP DUP7 SWAP5 PUSH2 0x15A8 PUSH0 SWAP10 SWAP8 SWAP4 SWAP6 PUSH2 0x1597 DUP9 SWAP7 PUSH2 0x1565 DUP14 SWAP10 PUSH2 0x15DA SWAP8 PUSH1 0x44 DUP12 ADD MSTORE PUSH1 0x64 DUP11 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP9 PUSH1 0x84 DUP10 ADD MSTORE PUSH1 0xA4 DUP9 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x104 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP6 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP5 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x3C0 JUMPI PUSH2 0x15EB JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x15F8 PUSH2 0xDDF SWAP3 PUSH2 0x453 JUMP JUMPDEST DUP1 PUSH2 0x158 JUMP JUMPDEST SWAP2 SWAP4 SWAP6 SWAP8 SWAP9 SWAP10 SWAP11 SWAP12 SWAP13 SWAP1 SWAP3 SWAP5 SWAP7 DUP1 SWAP15 POP MLOAD DUP4 DUP2 MLOAD AND DUP3 MSTORE DUP8 DUP2 ADD MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x165D JUMPI DUP3 DUP10 SWAP3 PUSH1 0x80 SWAP3 DUP5 PUSH1 0x1 SWAP7 ADD MSTORE DUP7 DUP9 DUP3 ADD MLOAD AND DUP9 DUP4 ADD MSTORE PUSH1 0x60 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP15 ADD SWAP6 ADD SWAP3 SWAP1 SWAP2 DUP16 SWAP14 SWAP13 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP6 SWAP7 SWAP5 SWAP3 PUSH2 0x152A JUMP JUMPDEST DUP7 PUSH1 0x21 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x162 JUMPI MLOAD PUSH2 0x405 DUP2 PUSH2 0xA70 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xC0 DUP7 0xBF 0xA8 0xCF 0x22 SWAP12 PUSH16 0x976634E41162488BE79708C6A3A98D6B SWAP7 0x28 0xAE DUP13 0xE3 0x1E 0xE7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER PUSH2 0x300 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x97B JUMPI PUSH2 0x6CB7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 PUSH2 0x300 PUSH2 0x97F JUMP JUMPDEST PUSH2 0x300 CODECOPY PUSH2 0x300 ADD PUSH1 0x40 PUSH2 0x300 DUP3 SUB SLT PUSH2 0x97B JUMPI PUSH2 0x300 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x97B JUMPI PUSH2 0x140 DUP3 PUSH2 0x300 ADD DUP3 SUB SLT PUSH2 0x97B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE PUSH2 0x300 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x97B JUMPI DUP2 PUSH2 0x96 SWAP2 DUP6 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x320 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x97B JUMPI DUP2 PUSH2 0xBC SWAP2 DUP6 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x340 DUP4 ADD MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x97B JUMPI PUSH2 0xE5 SWAP2 DUP5 PUSH2 0x300 ADD ADD PUSH2 0x9A2 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD DUP2 SWAP1 MSTORE PUSH2 0x360 DUP4 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x380 DUP4 ADD MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x97B JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x3A0 DUP2 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x3C0 DUP2 ADD MLOAD PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x3E0 DUP2 ADD MLOAD PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x15B SWAP1 PUSH2 0x120 SWAP1 PUSH2 0x14B PUSH2 0x400 DUP3 ADD PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x300 ADD ADD PUSH2 0x9F7 JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MSTORE PUSH2 0x320 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP4 SUB PUSH2 0x97B JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP3 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x1B5 DUP4 PUSH2 0xA04 JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x1C2 DUP3 PUSH2 0xB87 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x971 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x77D JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x919 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x8A4 JUMPI PUSH0 SWAP3 PUSH2 0x899 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x79B JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x88F JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x830 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x7C9 JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x7BE JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 DUP2 SWAP1 MSTORE CALLER PUSH2 0x1A0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x7AF JUMPI PUSH2 0x1C0 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x791 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x77D JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x72F JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6A7 JUMPI PUSH0 SWAP3 PUSH2 0x69C JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO PUSH2 0x68F JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x682 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x673 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x661 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x652 JUMPI JUMPDEST POP PUSH2 0x643 JUMPI PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x220 MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH2 0x240 MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x260 MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x280 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x2A0 MSTORE PUSH2 0x100 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x2C0 MSTORE PUSH2 0x120 ADD MLOAD ISZERO ISZERO PUSH2 0x2E0 MSTORE PUSH8 0x6F05B59D3B213876 PUSH2 0x200 MSTORE PUSH1 0x40 MLOAD PUSH2 0x5FD9 PUSH2 0xCBE DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x4955 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x4A21 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x4926 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x49A4 ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0x49CA ADD MSTORE PUSH2 0x120 MLOAD DUP2 PUSH2 0x1709 ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x1732 ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0x334 ADD MSTORE DUP2 DUP2 PUSH2 0x64B ADD MSTORE DUP2 DUP2 PUSH2 0x8CE ADD MSTORE DUP2 DUP2 PUSH2 0xB10 ADD MSTORE DUP2 DUP2 PUSH2 0xC68 ADD MSTORE DUP2 DUP2 PUSH2 0xDEA ADD MSTORE DUP2 DUP2 PUSH2 0x115F ADD MSTORE DUP2 DUP2 PUSH2 0x1688 ADD MSTORE DUP2 DUP2 PUSH2 0x17F5 ADD MSTORE DUP2 DUP2 PUSH2 0x1ABE ADD MSTORE DUP2 DUP2 PUSH2 0x1B0B ADD MSTORE DUP2 DUP2 PUSH2 0x2099 ADD MSTORE DUP2 DUP2 PUSH2 0x2451 ADD MSTORE DUP2 DUP2 PUSH2 0x267B ADD MSTORE DUP2 DUP2 PUSH2 0x26C8 ADD MSTORE DUP2 DUP2 PUSH2 0x2729 ADD MSTORE DUP2 DUP2 PUSH2 0x2856 ADD MSTORE DUP2 DUP2 PUSH2 0x2B5A ADD MSTORE DUP2 DUP2 PUSH2 0x35E1 ADD MSTORE DUP2 DUP2 PUSH2 0x3B4D ADD MSTORE DUP2 DUP2 PUSH2 0x3BEB ADD MSTORE DUP2 DUP2 PUSH2 0x3DF8 ADD MSTORE DUP2 DUP2 PUSH2 0x3E4E ADD MSTORE DUP2 DUP2 PUSH2 0x4163 ADD MSTORE DUP2 DUP2 PUSH2 0x4248 ADD MSTORE DUP2 DUP2 PUSH2 0x4556 ADD MSTORE DUP2 DUP2 PUSH2 0x46A1 ADD MSTORE DUP2 DUP2 PUSH2 0x47A2 ADD MSTORE DUP2 DUP2 PUSH2 0x4875 ADD MSTORE DUP2 DUP2 PUSH2 0x4AA3 ADD MSTORE DUP2 DUP2 PUSH2 0x4B1F ADD MSTORE PUSH2 0x4C62 ADD MSTORE PUSH2 0x180 MLOAD DUP2 DUP2 DUP2 PUSH2 0xA85 ADD MSTORE DUP2 DUP2 PUSH2 0xED4 ADD MSTORE DUP2 DUP2 PUSH2 0xF79 ADD MSTORE DUP2 DUP2 PUSH2 0x1091 ADD MSTORE PUSH2 0x1988 ADD MSTORE PUSH2 0x1A0 MLOAD DUP2 PUSH2 0x3ABC ADD MSTORE PUSH2 0x1C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x9A8 ADD MSTORE DUP2 DUP2 PUSH2 0xBE0 ADD MSTORE DUP2 DUP2 PUSH2 0x1214 ADD MSTORE DUP2 DUP2 PUSH2 0x31AD ADD MSTORE PUSH2 0x3CE7 ADD MSTORE PUSH2 0x1E0 MLOAD DUP2 POP POP PUSH2 0x200 MLOAD DUP2 DUP2 DUP2 PUSH2 0x12DB ADD MSTORE PUSH2 0x1C85 ADD MSTORE PUSH2 0x220 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18DB ADD MSTORE DUP2 DUP2 PUSH2 0x1BB5 ADD MSTORE PUSH2 0x3F1C ADD MSTORE PUSH2 0x240 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18FC ADD MSTORE DUP2 DUP2 PUSH2 0x1BDB ADD MSTORE PUSH2 0x3F4E ADD MSTORE PUSH2 0x260 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C01 ADD MSTORE PUSH2 0x3F75 ADD MSTORE PUSH2 0x280 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C28 ADD MSTORE PUSH2 0x2DE6 ADD MSTORE PUSH2 0x2A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1C4F ADD MSTORE PUSH2 0x2E10 ADD MSTORE PUSH2 0x2C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1B4B ADD MSTORE PUSH2 0x3EC1 ADD MSTORE PUSH2 0x2E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1B73 ADD MSTORE PUSH2 0x3EE9 ADD MSTORE PUSH2 0x5FD9 SWAP1 RETURN JUMPDEST PUSH4 0x59E6AE33 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0xC0 DUP3 ADD MLOAD GT ISZERO PUSH0 PUSH2 0x3BB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD PUSH1 0xC0 DUP5 ADD MLOAD LT SWAP2 POP PUSH2 0x3B4 JUMP JUMPDEST DUP1 SWAP2 POP PUSH1 0xE0 DUP4 ADD MLOAD LT SWAP1 PUSH2 0x3AD JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO SWAP2 POP PUSH2 0x3A6 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MLOAD ISZERO SWAP2 POP PUSH2 0x39F JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x37B JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x714 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x6FC JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x390 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6EE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6D3 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x776 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x768 JUMPI POP POP PUSH2 0x365 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x752 JUMP JUMPDEST POP DUP1 PUSH2 0x74C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x351 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x647140B PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x818 JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x800 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x310 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x7F2 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x7D4 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP5 LT PUSH2 0x888 JUMPI JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x87D JUMPI POP POP PUSH2 0x2E1 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x867 JUMP JUMPDEST POP DUP1 PUSH2 0x867 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2CF JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x299 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x6C97 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x8FE JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x8E6 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x2AE JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x8D8 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x8BD JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x6C97 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x96A JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x95C JUMPI POP POP PUSH2 0x283 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x946 JUMP JUMPDEST POP DUP1 PUSH2 0x940 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x26F JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x79B JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x97B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x9D6 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x97F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x97B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x97B JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xA7A JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA3C JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA2E JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x79B JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xB7D JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xB4A JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xAE8 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xADD JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xAC8 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xB30 JUMPI POP POP POP LT PUSH2 0xB18 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB0B JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xAFA JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xB72 JUMPI POP POP PUSH2 0xAAD JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xB64 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA9C JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xBB1 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA3C JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA2E JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x79B JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xCB3 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x77D JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xC80 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xC20 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xC15 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xBFE JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xC69 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xC51 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC44 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xC31 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xCA8 JUMPI POP POP PUSH2 0xBE5 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0xC9A JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xBD4 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x3209 JUMPI POP DUP1 PUSH4 0x673D09A EQ PUSH2 0x3161 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x30B8 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3061 JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2F18 JUMPI DUP1 PUSH4 0x105AE7AD EQ PUSH2 0x2EEA JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x2EA9 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x2E8F JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2E4F JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2BE3 JUMPI DUP1 PUSH4 0x1D8A5E7E EQ PUSH2 0x2BB9 JUMPI DUP1 PUSH4 0x215666A8 EQ PUSH2 0x2B91 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x2B0F JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2ADE JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x2A75 JUMPI DUP1 PUSH4 0x2C357688 EQ PUSH2 0x25B5 JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x257B JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x2560 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x2546 JUMPI DUP1 PUSH4 0x37899770 EQ PUSH2 0x2523 JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x24D8 JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x239F JUMPI DUP1 PUSH4 0x4EFD88C9 EQ PUSH2 0x2377 JUMPI DUP1 PUSH4 0x4F149B3F EQ PUSH2 0x2346 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x2303 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x225A JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x2206 JUMPI DUP1 PUSH4 0x569EE350 EQ PUSH2 0x21E4 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x21BB JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x2199 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x217A JUMPI DUP1 PUSH4 0x6BD838C7 EQ PUSH2 0x20FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2052 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1E1D JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1DE5 JUMPI DUP1 PUSH4 0x7F118B90 EQ PUSH2 0x1A07 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x195A JUMPI DUP1 PUSH4 0x84254CF9 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16F4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x16AC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1669 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x158B JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x14D3 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x1417 JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x13CF JUMPI DUP1 PUSH4 0xA103B044 EQ PUSH2 0x13B5 JUMPI DUP1 PUSH4 0xA6D2E718 EQ PUSH2 0x11CF JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x10FB JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x1067 JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xF46 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xEAA JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xEA5 JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xD38 JUMPI DUP1 PUSH4 0xC0209F1D EQ PUSH2 0xCF7 JUMPI DUP1 PUSH4 0xC480B9E6 EQ PUSH2 0xC3E JUMPI DUP1 PUSH4 0xC66DBC4B EQ PUSH2 0xB9C JUMPI DUP1 PUSH4 0xCD80A1AF EQ PUSH2 0xAE6 JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xAC6 JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xA5A JUMPI DUP1 PUSH4 0xD4A5B63A EQ PUSH2 0x96D JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x775 JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x5F3 JUMPI DUP1 PUSH4 0xDFBA3818 EQ PUSH2 0x5CF JUMPI PUSH4 0xE45801DA EQ PUSH2 0x2F2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x30B PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP4 MSTORE ADDRESS PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP4 PUSH2 0x5A7 JUMPI JUMPDEST POP DUP1 DUP1 PUSH2 0x370 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SWAP3 AND DUP1 SWAP3 EQ PUSH0 EQ PUSH2 0x59E JUMPI PUSH1 0x1 SWAP2 PUSH0 JUMPDEST PUSH1 0x1 DUP2 EQ DUP1 PUSH2 0x589 JUMPI JUMPDEST PUSH2 0x57A JUMPI PUSH2 0x398 PUSH2 0x3E33 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x3CD PUSH2 0x3B0 PUSH2 0x3AA DUP6 DUP5 PUSH2 0x3EBF JUMP JUMPDEST SWAP2 PUSH2 0x3FB9 JUMP JUMPDEST POP POP POP PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP4 DUP6 PUSH2 0x3D8 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD AND SUB PUSH2 0x574 JUMPI SWAP2 SWAP3 JUMPDEST DUP5 PUSH2 0x3ED DUP4 DUP10 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP2 PUSH4 0x313CE567 PUSH1 0xE0 SHL SWAP8 DUP9 DUP5 MSTORE DUP4 PUSH1 0x4 PUSH1 0x20 SWAP13 DUP14 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP11 SWAP3 DUP11 SWAP2 PUSH0 SWAP6 PUSH2 0x54F JUMPI JUMPDEST POP SWAP1 PUSH2 0x429 SWAP2 PUSH2 0x367C JUMP JUMPDEST MLOAD AND SWAP7 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP7 PUSH2 0x512 JUMPI JUMPDEST POP PUSH1 0xFF AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x480 PUSH1 0xFF SWAP6 PUSH2 0x47B PUSH2 0x475 PUSH2 0x4B0 SWAP8 PUSH2 0x3B24 JUMP JUMPDEST DUP14 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x48F DUP12 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP12 MSTORE PUSH1 0x40 CALLDATASIZE DUP12 DUP14 ADD CALLDATACOPY PUSH2 0x4A4 DUP3 DUP13 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x50B JUMPI PUSH1 0x1 PUSH2 0x5F34 JUMP JUMPDEST SWAP3 AND PUSH1 0x12 SUB SWAP2 PUSH1 0x12 DUP4 GT PUSH2 0x4F7 JUMPI PUSH2 0x4D1 PUSH2 0x4D7 SWAP3 PUSH2 0x47B PUSH2 0x4DE SWAP6 PUSH2 0x3B24 JUMP JUMPDEST SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x367C JUMP JUMPDEST MSTORE PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 PUSH2 0x5F34 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP7 POP PUSH2 0x536 SWAP1 DUP10 RETURNDATASIZE DUP12 GT PUSH2 0x53D JUMPI JUMPDEST PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B0B JUMP JUMPDEST SWAP6 SWAP1 PUSH2 0x447 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x524 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x429 SWAP3 SWAP2 SWAP6 POP PUSH2 0x56C SWAP1 DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x53D JUMPI PUSH2 0x52E DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP5 SWAP1 SWAP2 PUSH2 0x41E JUMP JUMPDEST SWAP3 PUSH2 0x3E2 JUMP JUMPDEST PUSH4 0xC1AB6DC1 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH2 0x594 DUP7 PUSH2 0x364B JUMP JUMPDEST MLOAD AND DUP3 EQ ISZERO PUSH2 0x38C JUMP JUMPDEST PUSH0 SWAP2 PUSH1 0x1 PUSH2 0x382 JUMP JUMPDEST PUSH2 0x5C4 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3978 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x364 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0x5E9 PUSH2 0x4C48 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x60C PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x616 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x927DA105 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP4 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x6B0 JUMPI JUMPDEST DUP2 PUSH2 0x69F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x67A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x692 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x6D7 DUP2 PUSH2 0x32BF JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x78E PUSH2 0x3263 JUMP JUMPDEST PUSH2 0x796 PUSH2 0x3279 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP4 TIMESTAMP GT PUSH2 0x95A JUMPI PUSH2 0x7D7 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 DUP7 AND SWAP5 DUP6 PUSH1 0x40 DUP6 ADD MSTORE DUP9 DUP9 AND PUSH1 0x60 DUP6 ADD MSTORE DUP10 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE PUSH1 0xE0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x946 JUMPI DUP8 SWAP4 PUSH2 0x892 SWAP4 PUSH2 0x889 SWAP4 PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x862 PUSH2 0x491C JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1901 PUSH1 0xF0 SHL DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x5505 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x5587 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x8FD JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x929 JUMPI JUMPDEST DUP2 PUSH2 0x916 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x927 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x909 JUMP JUMPDEST PUSH4 0x25C00723 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 PUSH4 0x313C8981 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x985 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x9EA SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI JUMPDEST POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x9F2 PUSH2 0x4B05 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0xA01 PUSH2 0x375E JUMP JUMPDEST ADD MLOAD AND TIMESTAMP GT PUSH2 0xA1C JUMPI PUSH2 0x927 TIMESTAMP TIMESTAMP PUSH2 0xA17 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x421A JUMP JUMPDEST PUSH4 0x771CEF4F PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xA4D SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI JUMPDEST PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x353B JUMP JUMPDEST DUP5 PUSH2 0x9E0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA3B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP1 PUSH2 0x685 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH2 0xB68 SWAP2 PUSH0 SWAP2 PUSH2 0xB76 JUMPI JUMPDEST POP PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xB92 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x399E JUMP JUMPDEST SWAP3 POP POP POP DUP4 PUSH2 0xB4F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xBB5 PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0xBBD PUSH2 0x3BD6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0xC21 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0xC29 PUSH2 0x4B05 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xC36 PUSH1 0x4 CALLDATALOAD PUSH2 0x44A9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0xCD9 JUMPI JUMPDEST POP PUSH2 0xCC7 PUSH2 0xCAF DUP3 PUSH2 0x4A47 JUMP JUMPDEST SWAP3 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP5 PUSH2 0x4B9D JUMP JUMPDEST POP SWAP2 DUP4 MLOAD SWAP3 LT ISZERO DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xCED SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0xCA2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0xD2C PUSH2 0x4D1 PUSH2 0xD32 PUSH2 0xD1D PUSH2 0x4A88 JUMP JUMPDEST POP PUSH2 0xD2C DUP4 SWAP7 SWAP4 SWAP5 SWAP3 SWAP5 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x38AC JUMP JUMPDEST SWAP4 PUSH2 0x366F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0xD51 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0xD5A PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD86 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0xD9F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0xDBD PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0xDC6 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0xE6F JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B PUSH1 0x64 CALLDATALOAD DUP4 PUSH2 0x3AFE JUMP JUMPDEST SWAP8 DUP9 SWAP5 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP9 SWAP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x38E9 JUMP JUMPDEST SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0xE64 PUSH2 0x4750 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE9D JUMPI JUMPDEST DUP2 PUSH2 0xE8A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0xE1A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE7D JUMP JUMPDEST PUSH2 0x344D JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0xF24 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST PUSH2 0xF40 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x36F1 JUMP JUMPDEST DUP3 PUSH2 0xF0F JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x1046 JUMPI JUMPDEST POP PUSH2 0xFC5 PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x100A JUMPI DUP8 DUP1 PUSH2 0x4F3 DUP10 PUSH2 0xFFC DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0x1024 DUP2 PUSH2 0x3509 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xFDD JUMP JUMPDEST SWAP3 POP SWAP4 POP POP PUSH2 0x105F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP2 SWAP4 DUP6 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4F3 SWAP2 PUSH0 SWAP2 PUSH2 0x10E1 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH2 0x10F5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x10CC JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x1119 PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x17D57599 PUSH1 0xE3 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x11C7 JUMPI JUMPDEST DUP2 PUSH2 0x11AF PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x11C0 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST POP DUP1 PUSH2 0xE64 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11A2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH2 0x11F2 PUSH2 0x3B32 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 DUP6 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1255 SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0x1396 JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST DUP1 TIMESTAMP GT DUP2 TIMESTAMP XOR MUL XOR SWAP3 DUP3 DUP5 GT PUSH2 0x1381 JUMPI PUSH2 0x126F DUP5 DUP5 PUSH2 0x3AFE JUMP JUMPDEST SWAP2 PUSH3 0x15180 SWAP4 DUP5 DUP5 LT PUSH2 0x1372 JUMPI PUSH2 0x128F SWAP1 PUSH2 0x1288 PUSH2 0x4B05 JUMP JUMPDEST DUP7 DUP5 PUSH2 0x421A JUMP JUMPDEST SWAP2 DUP3 DUP2 LT PUSH2 0x1363 JUMPI PUSH2 0x12A1 DUP4 DUP3 PUSH2 0x3AFE JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x1351 JUMPI POP DUP3 DUP2 GT ISZERO PUSH2 0x132C JUMPI DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x12D9 SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 PUSH2 0x531C JUMP JUMPDEST PUSH32 0x0 LT PUSH2 0x130A JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x2B85F917 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP2 DUP5 DUP2 MUL SWAP5 DUP2 DUP7 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1319 JUMPI POP PUSH2 0x134C SWAP3 SWAP2 PUSH2 0x12D3 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x12D9 JUMP JUMPDEST SWAP1 POP PUSH4 0x119D8537 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x136D DUP2 DUP5 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x12A1 JUMP JUMPDEST PUSH4 0x19F8E855 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP3 PUSH4 0x64BB3B83 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x13AF SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0xA53 JUMPI PUSH2 0xA45 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP9 PUSH2 0x9E0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x485B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x60 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1407 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1449 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP3 PUSH2 0x14BF PUSH1 0x1 PUSH2 0x1494 PUSH2 0xC36 SWAP6 PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 DUP3 PUSH1 0xA0 SHR AND SWAP3 DUP2 PUSH4 0xFFFFFFFF DUP5 AND SWAP4 DUP13 SHR AND SWAP2 DUP2 PUSH1 0x80 SHR SWAP2 AND DUP9 PUSH2 0x4FDE JUMP JUMPDEST POP SWAP2 SWAP1 SWAP5 PUSH2 0x14A1 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x14C5 JUMPI PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x1 SWAP6 JUMPDEST PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP4 PUSH2 0x364B JUMP JUMPDEST SWAP2 PUSH2 0x5F34 JUMP JUMPDEST PUSH2 0xD2C PUSH2 0x14B9 PUSH1 0x2 SWAP6 PUSH2 0x14B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x14ED PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x14F6 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1523 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1554 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x1570 PUSH2 0x4F3 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x15AC DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x15EE JUMPI JUMPDEST POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST PUSH2 0x4F3 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1631 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x161A JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0x15DA SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x15CD SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0xC36 PUSH1 0x20 SWAP2 PUSH2 0x3AB2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x172D PUSH32 0x0 PUSH2 0x534D JUMP JUMPDEST PUSH2 0x1756 PUSH32 0x0 PUSH2 0x5447 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x946 JUMPI PUSH2 0x17B0 PUSH2 0x4F3 SWAP3 PUSH2 0x17A2 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH1 0xF PUSH1 0xF8 SHL DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x323F JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x3467 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1920 JUMPI JUMPDEST POP ISZERO PUSH2 0x18D6 JUMPI PUSH0 PUSH1 0x24 SWAP2 PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH2 0x18B8 JUMPI JUMPDEST POP PUSH2 0x18AC PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E PUSH2 0x1895 PUSH2 0x188A DUP8 PUSH2 0x4A47 JUMP JUMPDEST POP DUP2 DUP2 SWAP4 SWAP3 SWAP10 PUSH2 0x4DD5 JUMP JUMPDEST SWAP5 DUP2 DUP7 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 DUP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x40CE JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x18CC SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP DUP3 PUSH2 0x1868 JUMP JUMPDEST POP PUSH1 0x40 PUSH32 0x0 PUSH32 0x0 PUSH2 0x18AC JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1952 JUMPI JUMPDEST DUP2 PUSH2 0x193B PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x194C SWAP1 PUSH2 0x35B9 JUMP JUMPDEST DUP3 PUSH2 0x1835 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x192E JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x19DA JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x19F9 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x1A00 JUMPI JUMPDEST PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x37A3 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x19C3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x19E7 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x200 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xCA4F2803 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DCB JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x1DA8 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE PUSH6 0x9184E72A000 PUSH1 0x80 DUP3 ADD MSTORE PUSH8 0x16345785D8A0000 PUSH1 0xA0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x120 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x140 DUP3 ADD MSTORE PUSH8 0x29A2241AF62C0000 PUSH2 0x160 DUP3 ADD MSTORE PUSH32 0x0 PUSH2 0x180 DUP3 ADD MSTORE PUSH3 0x15180 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH3 0xF4240 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH6 0x5AF3107A4000 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1E0 PUSH2 0x1D08 PUSH2 0x1CF2 DUP4 MLOAD PUSH2 0x200 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x220 DUP7 ADD SWAP1 PUSH2 0x34CD JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x1F NOT ADD PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH2 0x1A0 DUP2 ADD MLOAD PUSH2 0x1C0 DUP6 ADD MSTORE PUSH2 0x1C0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD PUSH2 0x200 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x1DC4 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x371A JUMP JUMPDEST POP DUP3 PUSH2 0x1B43 JUMP JUMPDEST PUSH2 0x1DDF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x5BC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x1AEE JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1E06 PUSH2 0x3263 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT DUP4 DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 MSTORE PUSH1 0x20 DUP4 ADD PUSH1 0x24 DUP3 ADD CALLDATALOAD DUP2 MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x1E9D SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3362 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP2 ADD SWAP5 DUP6 MSTORE PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x64 DUP5 ADD CALLDATALOAD DUP6 MSTORE PUSH1 0x80 DUP3 ADD SWAP4 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP6 MSTORE PUSH2 0x1EC9 PUSH1 0xA4 DUP3 ADD PUSH2 0x328F JUMP JUMPDEST PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0x4 PUSH2 0x1EE9 SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x33C2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1EF6 PUSH2 0x3DEE JUMP JUMPDEST PUSH2 0x1F00 DUP6 MLOAD PUSH2 0x4A47 JUMP JUMPDEST SWAP7 SWAP2 SWAP7 SWAP3 SWAP1 SWAP3 PUSH2 0x2043 JUMPI JUMPDEST PUSH2 0x1F13 PUSH2 0x4750 JUMP JUMPDEST MLOAD PUSH2 0x1F1D DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1F26 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x1FB9 JUMPI PUSH2 0x1F7A SWAP3 PUSH2 0x1F6F PUSH2 0x1F80 SWAP7 SWAP6 SWAP4 PUSH2 0x1F74 SWAP4 MLOAD SWAP9 DUP10 SWAP8 MLOAD SWAP6 MLOAD SWAP8 DUP9 SWAP5 MLOAD SWAP5 DUP6 SWAP3 DUP9 ISZERO PUSH0 EQ PUSH2 0x1FA1 JUMPI PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST SWAP6 DUP11 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x38AC JUMP JUMPDEST SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x1F92 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH4 0x5A09F129 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP4 PUSH2 0x1F68 SWAP3 PUSH2 0xD2C PUSH2 0xD2C SWAP6 SWAP4 PUSH2 0x47B SWAP4 SWAP8 SWAP3 PUSH2 0x367C JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP3 MLOAD SWAP2 MLOAD SWAP4 SWAP5 SWAP1 SWAP3 PUSH2 0x1FCE DUP4 DUP8 PUSH2 0x367C JUMP JUMPDEST MLOAD DUP6 GT PUSH2 0x1F92 JUMPI PUSH2 0xD2C DUP6 SWAP4 PUSH2 0x1FFA PUSH2 0x2005 SWAP7 PUSH2 0x2000 SWAP6 DUP6 ISZERO PUSH0 EQ PUSH2 0x2039 JUMPI PUSH2 0xD2C SWAP1 SWAP2 SWAP6 JUMPDEST DUP12 PUSH2 0x367C JUMP JUMPDEST SWAP8 PUSH2 0x367C JUMP JUMPDEST PUSH2 0x3AFE JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0x202A JUMPI PUSH2 0x201A PUSH1 0x1 SWAP2 PUSH1 0x20 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0xC36 JUMP JUMPDEST PUSH4 0xA0C22C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP5 PUSH2 0xD2C SWAP1 PUSH2 0x1FF4 JUMP JUMPDEST PUSH2 0x204D DUP4 DUP9 PUSH2 0x40F2 JUMP JUMPDEST PUSH2 0x1F0B JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x44 DUP2 PUSH2 0x206F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3DE222BB PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x20D2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20F8 JUMPI JUMPDEST PUSH2 0x20E9 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x20C9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH2 0x211E DUP2 PUSH2 0x32A3 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE PUSH1 0x80 PUSH2 0x2139 PUSH2 0x375E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 PUSH4 0xFFFFFFFF DUP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD AND PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH4 0x56B7FCDB PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x2201 PUSH2 0x485B JUMP JUMPDEST PUSH2 0x48DF JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x2243 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x227B DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x22A8 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x22EB JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x22D4 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x40 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x233B PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x60 PUSH2 0x2360 PUSH2 0x4A88 JUMP JUMPDEST SWAP2 SWAP3 POP PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD DUP4 SHR AND PUSH2 0x4831 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x23B8 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x23C1 PUSH2 0x3279 JUMP JUMPDEST PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x23ED SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2406 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH1 0x24 SWAP3 PUSH2 0x2424 PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x242D PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x24A2 JUMPI JUMPDEST PUSH2 0xE5C PUSH2 0xE43 PUSH2 0xE56 DUP6 PUSH2 0xE4B DUP7 PUSH2 0xE50 DUP4 PUSH2 0xE4B PUSH2 0xE3B DUP3 PUSH1 0x84 CALLDATALOAD PUSH2 0x38AC JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x24D0 JUMPI JUMPDEST DUP2 PUSH2 0x24BD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI SWAP1 MLOAD SWAP1 PUSH2 0xE56 PUSH2 0x2481 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24B0 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x250A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x233B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x491C JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x240 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH0 PUSH2 0x120 DUP3 ADD MSTORE PUSH0 PUSH2 0x140 DUP3 ADD MSTORE PUSH0 PUSH2 0x160 DUP3 ADD MSTORE PUSH0 PUSH2 0x180 DUP3 ADD MSTORE PUSH0 PUSH2 0x1A0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1C0 DUP3 ADD MSTORE PUSH0 PUSH2 0x1E0 DUP3 ADD MSTORE PUSH0 PUSH2 0x200 DUP3 ADD MSTORE PUSH0 PUSH2 0x220 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0x29AE7EC5 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A5B JUMPI JUMPDEST POP DUP2 MSTORE PUSH1 0x40 MLOAD PUSH4 0x3F1B0DEF PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A3F JUMPI JUMPDEST POP PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xB45090F9 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x2A0D JUMPI JUMPDEST POP PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x2767 PUSH2 0x35C6 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x27DB PUSH1 0x40 MLOAD PUSH2 0x2793 DUP2 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x8 SLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP2 DUP3 DUP2 AND PUSH2 0x27B8 DUP4 PUSH2 0x366F JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0x27C5 DUP3 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH1 0xA0 DUP7 ADD MSTORE DUP3 PUSH1 0x20 SHR AND DUP1 PUSH1 0xE0 DUP7 ADD MSTORE PUSH2 0x4831 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xA0 SHR AND PUSH2 0x100 DUP3 ADD MSTORE PUSH4 0xFFFFFFFF PUSH1 0x60 PUSH2 0x27F9 PUSH2 0x375E JUMP JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND PUSH2 0x160 DUP7 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD AND PUSH2 0x180 DUP6 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MLOAD AND PUSH2 0x1A0 DUP6 ADD MSTORE ADD MLOAD AND PUSH2 0x1C0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD PUSH4 0xF29486A1 PUSH1 0xE0 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 DUP2 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x29EC JUMPI JUMPDEST POP PUSH2 0x120 PUSH1 0xE0 DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x220 DUP4 ADD MSTORE PUSH2 0x29CA JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 PUSH1 0x20 DUP3 MSTORE PUSH2 0x220 PUSH2 0x292C PUSH2 0x28DD DUP4 MLOAD PUSH2 0x240 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x260 DUP7 ADD SWAP1 PUSH2 0x349A JUMP JUMPDEST PUSH2 0x28F9 PUSH1 0x20 DUP6 ADD MLOAD SWAP2 PUSH1 0x1F NOT SWAP3 DUP4 DUP9 DUP4 SUB ADD PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x80 DUP6 ADD MLOAD PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xA0 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x349A JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 DUP6 ADD MSTORE PUSH2 0x100 DUP2 ADD MLOAD PUSH2 0x120 DUP6 ADD MSTORE PUSH2 0x120 DUP2 ADD MLOAD PUSH2 0x140 DUP6 ADD MSTORE PUSH2 0x140 DUP2 ADD MLOAD PUSH2 0x160 DUP6 ADD MSTORE PUSH2 0x160 DUP2 ADD MLOAD PUSH2 0x180 DUP6 ADD MSTORE PUSH2 0x180 DUP2 ADD MLOAD PUSH2 0x1A0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1A0 DUP3 ADD MLOAD AND PUSH2 0x1C0 DUP6 ADD MSTORE PUSH4 0xFFFFFFFF PUSH2 0x1C0 DUP3 ADD MLOAD AND PUSH2 0x1E0 DUP6 ADD MSTORE PUSH2 0x1E0 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x200 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x240 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x29E1 PUSH2 0x29D5 PUSH2 0x485B JUMP JUMPDEST DUP1 PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x48DF JUMP JUMPDEST PUSH2 0x140 DUP3 ADD MSTORE PUSH2 0x28B6 JUMP JUMPDEST PUSH2 0x2A07 SWAP2 POP PUSH2 0x1A0 RETURNDATASIZE PUSH2 0x1A0 GT PUSH2 0x1A00 JUMPI PUSH2 0x19F1 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x2886 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2A37 JUMPI JUMPDEST DUP2 PUSH2 0x2A28 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP3 PUSH2 0x2759 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A1B JUMP JUMPDEST PUSH2 0x2A53 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1DBC DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP1 POP DUP3 PUSH2 0x2700 JUMP JUMPDEST PUSH2 0x2A6F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF38 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP3 PUSH2 0x26AB JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH2 0x100 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2A8F PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2A98 PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2AC5 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x153C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x2237 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x2B21 CALLDATASIZE PUSH2 0x3418 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAED65F5 PUSH1 0xE1 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x1196 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x40 MLOAD SWAP2 DUP4 SHR AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C15 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2C2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x33C2 JUMP JUMPDEST POP PUSH2 0x2C36 PUSH2 0x3DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH2 0x120 DUP4 ADD SWAP1 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0x40 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0x80 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP3 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH1 0xC0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x2CB9 PUSH2 0x2CAA PUSH1 0xE0 DUP4 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH2 0x100 DUP2 ADD SWAP10 PUSH0 DUP12 MSTORE PUSH2 0x2C9F PUSH2 0x3E33 JUMP JUMPDEST SWAP3 DUP4 DUP3 SWAP4 MSTORE MSTORE PUSH2 0x3EBF JUMP JUMPDEST SWAP2 DUP3 DUP7 MSTORE DUP2 DUP13 MSTORE DUP1 DUP8 MSTORE PUSH2 0x3FB9 JUMP JUMPDEST DUP11 MSTORE DUP4 MSTORE DUP6 MSTORE DUP1 DUP7 MSTORE SWAP8 PUSH2 0x2CE9 PUSH2 0x2CDC PUSH2 0x2CD2 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD PUSH2 0x3C6 DUP11 PUSH2 0x366F JUMP JUMPDEST SWAP10 PUSH2 0x3C6 PUSH2 0x3BF DUP3 PUSH2 0x364B JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 SWAP10 DUP11 DUP3 MUL DUP3 ISZERO SWAP12 DUP4 DUP3 DIV EQ DUP13 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP12 PUSH8 0xDE111A6B7DE4000 DUP1 DUP6 MUL SWAP5 DUP6 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP12 DUP1 SWAP2 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x2E43 JUMPI JUMPDEST POP POP POP PUSH2 0x2E34 JUMPI DUP9 PUSH2 0x2DC7 PUSH2 0x2DB8 PUSH2 0x2DD1 SWAP7 PUSH2 0x2DAE SWAP6 DUP12 DUP6 PUSH2 0x2DE0 SWAP16 PUSH2 0x2D88 SWAP1 PUSH2 0x2DD6 SWAP16 PUSH2 0x2DB3 SWAP16 PUSH2 0x2D75 SWAP1 PUSH2 0x3C6 PUSH2 0x2D6D PUSH2 0x2D7E SWAP5 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH2 0x366F JUMP JUMPDEST SWAP15 DUP16 SWAP1 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP13 DUP14 SWAP5 MLOAD PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP12 DUP13 SWAP4 MLOAD SWAP8 MLOAD SWAP10 MLOAD PUSH2 0x2DAE PUSH2 0x2DA1 DUP7 PUSH2 0xD2C DUP7 PUSH2 0x364B JUMP JUMPDEST PUSH2 0x4D1 DUP7 PUSH2 0xD2C DUP8 PUSH2 0x366F JUMP JUMPDEST PUSH2 0x4D6A JUMP JUMPDEST PUSH2 0x4DD5 JUMP JUMPDEST SWAP3 PUSH2 0x2DAE DUP5 PUSH2 0xE4B DUP12 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x18A5 DUP7 DUP1 PUSH2 0x38D6 JUMP JUMPDEST PUSH2 0x40F2 JUMP JUMPDEST MLOAD TIMESTAMP SWAP1 TIMESTAMP SWAP1 PUSH2 0x421A JUMP JUMPDEST POP PUSH2 0x2E0A PUSH32 0x0 PUSH2 0x44A9 JUMP JUMPDEST POP PUSH2 0xE5C PUSH32 0x0 PUSH2 0x4612 JUMP JUMPDEST PUSH4 0x4F512CB PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP DUP11 DUP11 DUP2 PUSH2 0x2D32 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x3 NOT PUSH1 0x20 CALLDATASIZE DUP3 ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x5CB JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0x35C6 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x60 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x2EDA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3362 JUMP JUMPDEST POP PUSH4 0xD6234725 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 PUSH1 0x8 SLOAD DUP2 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0xE0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x2F31 PUSH2 0x3263 JUMP JUMPDEST POP PUSH2 0x2F3A PUSH2 0x3279 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2F66 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP2 PUSH2 0x2F74 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 PUSH1 0x24 PUSH1 0x20 DUP6 ADD SWAP4 PUSH1 0x7 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x24 ADD SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2FF0 JUMPI DUP5 PUSH1 0x80 CALLDATASIZE PUSH1 0x63 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x2 SWAP1 PUSH2 0x2FB2 PUSH2 0x3DEE JUMP JUMPDEST MLOAD EQ DUP1 PUSH2 0x2FDF JUMPI JUMPDEST DUP1 PUSH2 0x2FCD JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO SWAP1 DUP2 ISZERO EQ PUSH2 0x2FC0 JUMPI PUSH0 DUP1 REVERT JUMPDEST POP PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2FBA JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x80 DUP5 CALLDATASIZE SUB SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3007 DUP3 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x3010 DUP6 PUSH2 0x328F JUMP JUMPDEST DUP3 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP7 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 SWAP4 DUP6 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x1152 PUSH1 0x20 PUSH2 0x307F PUSH2 0x3263 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xE1F21C67 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x30D9 DUP4 PUSH2 0x3581 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1649 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x3106 JUMPI POP PUSH2 0x15DA SWAP3 POP SUB DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x3149 JUMPI POP POP PUSH2 0x15DA SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x15CD JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x3132 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH2 0x317A PUSH2 0x3B32 JUMP JUMPDEST PUSH2 0x3182 PUSH2 0x3BD6 JUMP JUMPDEST PUSH2 0x318A PUSH2 0x3C73 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x74EEF593 PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH2 0x31EE SWAP3 PUSH1 0x20 SWAP2 PUSH0 SWAP2 PUSH2 0xA2B JUMPI POP ADD MLOAD AND ADDRESS PUSH2 0x3C90 JUMP JUMPDEST PUSH2 0x31F6 PUSH2 0x4B05 JUMP JUMPDEST PUSH2 0x3201 PUSH1 0x4 CALLDATALOAD PUSH2 0x4612 JUMP JUMPDEST PUSH2 0x927 PUSH2 0x3C73 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP3 AND DUP1 SWAP3 SUB PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP2 PUSH4 0x1FFC9A7 PUSH1 0xE0 SHL EQ DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x946 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x337C DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x338A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33B3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33A5 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x946 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x33F7 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x3328 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x5CB JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x5CB JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x5CB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3486 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3478 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34B9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34AB JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x34EC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x34DE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3513 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3579 PUSH1 0x40 DUP1 MLOAD SWAP3 PUSH2 0x3557 DUP5 PUSH2 0x32DC JUMP JUMPDEST PUSH2 0x3560 DUP2 PUSH2 0x3527 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x356E PUSH1 0x20 DUP3 ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x3527 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x35AF JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x359B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3590 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x5CB JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x39370AA9 PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3643 JUMPI JUMPDEST DUP2 PUSH2 0x3637 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x362A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x365B JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x36AB DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x36B9 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x36E2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x36D4 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3747 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x376B DUP3 PUSH2 0x32A3 JUMP JUMPDEST DUP2 PUSH1 0x60 PUSH1 0x6 SLOAD PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 AND DUP5 MSTORE DUP2 DUP4 SHR AND PUSH1 0x20 DUP5 ADD MSTORE PUSH4 0xFFFFFFFF DUP2 PUSH1 0xC0 SHR AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xE0 SHR SWAP2 ADD MSTORE JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x5CB JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x37BF DUP5 PUSH2 0x32BF JUMP JUMPDEST SLT PUSH2 0x5CB JUMPI PUSH1 0x40 MLOAD PUSH2 0x37D0 DUP2 PUSH2 0x32A3 JUMP JUMPDEST PUSH2 0x37D9 DUP3 PUSH2 0x35B9 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x37E7 PUSH1 0x20 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x37F8 PUSH1 0x40 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3809 PUSH1 0x60 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI PUSH2 0x38A5 SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x3877 DUP6 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3889 PUSH2 0x140 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x389B PUSH2 0x160 DUP4 ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x35B9 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x3922 DUP2 PUSH2 0x334A JUMP JUMPDEST SWAP4 PUSH2 0x3930 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x5CB JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3959 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x394B JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x5CB JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x5CB JUMPI DUP4 PUSH2 0x39C9 SWAP2 DUP7 ADD PUSH2 0x3907 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP3 ADD DUP6 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x5CB JUMPI DUP1 MLOAD SWAP1 PUSH2 0x39F0 DUP3 PUSH2 0x334A JUMP JUMPDEST SWAP3 PUSH1 0x40 PUSH2 0x3A00 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3328 JUMP JUMPDEST DUP4 DUP6 MSTORE DUP2 DUP6 ADD SWAP1 DUP3 PUSH1 0x60 DUP1 SWAP7 MUL DUP6 ADD ADD SWAP4 DUP11 DUP6 GT PUSH2 0x5CB JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x3A59 JUMPI POP POP POP POP POP POP SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x5CB JUMPI DUP2 PUSH2 0x3A42 SWAP2 DUP5 ADD PUSH2 0x3690 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x5CB JUMPI PUSH2 0x3717 SWAP3 ADD PUSH2 0x3690 JUMP JUMPDEST DUP6 DUP4 DUP13 SUB SLT PUSH2 0x5CB JUMPI DUP2 MLOAD SWAP1 PUSH2 0x3A6E DUP3 PUSH2 0x32DC JUMP JUMPDEST DUP4 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x5CB JUMPI DUP3 MSTORE DUP5 DUP5 ADD MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x5CB JUMPI DUP3 DUP7 SWAP3 DUP4 DUP11 SWAP6 ADD MSTORE PUSH2 0x3AA3 DUP6 DUP8 ADD PUSH2 0x35B9 JUMP JUMPDEST DUP6 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x3A1C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x3AF8 DUP2 PUSH2 0x32DC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x5CB JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x4D DUP2 GT PUSH2 0x4F7 JUMPI PUSH1 0xA EXP SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3B9C JUMPI JUMPDEST POP ISZERO PUSH2 0x3B8D JUMPI JUMP JUMPDEST PUSH4 0x486AA307 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3BCE JUMPI JUMPDEST DUP2 PUSH2 0x3BB7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3BC8 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3B85 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3BAA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8380EDB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x3C39 JUMPI JUMPDEST POP PUSH2 0x3C2A JUMPI JUMP JUMPDEST PUSH4 0x3915D7F9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3C6B JUMPI JUMPDEST DUP2 PUSH2 0x3C54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3C65 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x3C23 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3C47 JUMP JUMPDEST PUSH2 0x3C7B PUSH2 0x4C48 JUMP JUMPDEST ISZERO PUSH2 0x3C82 JUMPI JUMP JUMPDEST PUSH3 0xF656AD PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND DUP1 PUSH2 0x3DE3 JUMPI POP PUSH2 0x3CCE PUSH0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x3AB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 SWAP4 SWAP1 SWAP2 DUP5 DUP4 PUSH1 0x4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x544 JUMPI DUP6 SWAP4 DUP6 SWAP2 PUSH0 SWAP2 PUSH2 0x3DA4 JUMPI JUMPDEST POP SWAP1 PUSH1 0x64 SWAP3 SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH4 0x26F8AA21 PUSH1 0xE2 SHL DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE CALLER PUSH1 0x24 DUP7 ADD MSTORE AND PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3D6E JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH4 0x23DADA53 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3D9D JUMPI JUMPDEST PUSH2 0x3D85 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x3D96 SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3D56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D7B JUMP JUMPDEST SWAP3 SWAP5 DUP1 SWAP3 POP DUP4 SWAP2 POP RETURNDATASIZE DUP4 GT PUSH2 0x3DDC JUMPI JUMPDEST PUSH2 0x3DBE DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x5CB JUMPI DUP5 SWAP3 SWAP1 DUP5 SWAP1 PUSH1 0x64 PUSH2 0x3D1C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3DB4 JUMP JUMPDEST SWAP2 POP POP CALLER SUB PUSH2 0x3D5F JUMPI JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x3E20 JUMPI JUMP JUMPDEST PUSH4 0x89676D5 PUSH1 0xE0 SHL PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x3E9F JUMPI JUMPDEST POP PUSH2 0x3717 PUSH2 0x3E99 PUSH2 0x14B9 PUSH2 0x3E99 DUP6 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4CEA JUMP JUMPDEST PUSH2 0x3EB4 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST POP POP SWAP1 POP SWAP1 PUSH0 PUSH2 0x3E86 JUMP JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3FA9 JUMPI SWAP1 JUMPDEST PUSH32 0x0 ISZERO PUSH2 0x3F99 JUMPI SWAP2 JUMPDEST PUSH2 0x3717 PUSH2 0x3F40 DUP5 PUSH2 0xE4B DUP6 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP4 PUSH2 0xE4B PUSH2 0x3F72 DUP3 PUSH2 0xE4B DUP8 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST SWAP5 PUSH32 0x0 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x3F0F JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 PUSH2 0x3EE7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP4 PUSH2 0xE4B PUSH2 0x3FC9 SWAP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x3FDA PUSH2 0x3FD5 DUP3 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x4EAB JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH18 0xB7ABC627050305ADF14A3D9E40000000000 DIV SWAP3 PUSH10 0xD3C21BCECCEDA1000000 SWAP5 DUP6 DUP6 ADD SWAP1 DUP2 DUP7 GT PUSH2 0x4F7 JUMPI PUSH2 0x4033 PUSH8 0xDE0B6B3A7640000 SWAP3 DUP4 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x4042 DUP4 PUSH2 0x32DC JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 SWAP8 PUSH2 0x405A DUP8 DUP5 PUSH2 0x4D48 JUMP JUMPDEST SWAP1 DUP9 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x406E SWAP2 PUSH2 0x4D48 JUMP JUMPDEST SWAP2 DUP2 DUP4 MUL SWAP3 DUP1 DUP5 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x40C0 PUSH2 0x40C5 SWAP3 PUSH2 0x4097 DUP10 PUSH2 0x2000 PUSH2 0x40CB SWAP8 PUSH2 0x4EAB JUMP JUMPDEST PUSH2 0x40A0 DUP8 PUSH2 0x364B JUMP JUMPDEST MSTORE PUSH2 0x40AE DUP10 PUSH2 0xD2C DUP9 PUSH2 0x364B JUMP JUMPDEST SWAP1 PUSH2 0x40B9 DUP5 DUP13 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 PUSH2 0x3AFE JUMP JUMPDEST PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH2 0x366F JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH2 0x4104 DUP4 PUSH2 0x4DFF JUMP JUMPDEST AND PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH2 0x4120 DUP4 PUSH2 0x4DFF JUMP JUMPDEST PUSH1 0x80 SHL AND OR PUSH1 0x8 SSTORE PUSH1 0x40 SWAP1 PUSH32 0xF36B0FD05D55CA91FB3EBD8493ADF78A3405A11C145C054A092D0994B665B637 DUP3 DUP1 MLOAD DUP6 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 DUP3 MLOAD SWAP4 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x419C DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5669727475616C42616C616E6365735570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH2 0x420F SWAP1 PUSH2 0x32F8 JUMP JUMPDEST JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 SWAP2 SWAP1 DUP2 DUP2 GT DUP1 ISZERO PUSH2 0x44A0 JUMPI JUMPDEST PUSH2 0x4491 JUMPI PUSH2 0x4233 PUSH2 0x375E JUMP JUMPDEST SWAP2 PUSH2 0x423D DUP6 PUSH2 0x48DF JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x40 SWAP4 DUP5 MLOAD SWAP3 PUSH4 0x14CB3B1F PUSH1 0xE2 SHL DUP5 MSTORE ADDRESS PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x4487 JUMPI PUSH0 SWAP2 PUSH2 0x4452 JUMPI JUMPDEST POP ISZERO PUSH2 0x443E JUMPI POP PUSH2 0x43E7 SWAP3 SWAP2 PUSH2 0x43D9 SWAP2 PUSH2 0x42B0 PUSH2 0x485B JUMP JUMPDEST SWAP10 PUSH2 0x42BA DUP12 PUSH2 0x48DF JUMP JUMPDEST SWAP9 JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x42D3 DUP13 PUSH2 0x4E2A JUMP JUMPDEST AND DUP3 MSTORE PUSH2 0x42DF DUP4 PUSH2 0x4E2A JUMP JUMPDEST DUP2 DUP9 DUP5 ADD SWAP2 AND DUP2 MSTORE PUSH28 0xFFFFFFFF000000000000000000000000000000000000000000000000 PUSH24 0xFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 PUSH2 0x4326 DUP8 PUSH2 0x4E5A JUMP JUMPDEST SWAP4 DUP14 DUP7 ADD SWAP6 PUSH4 0xFFFFFFFF DUP1 SWAP7 AND DUP8 MSTORE PUSH2 0x433E DUP11 PUSH2 0x4E5A JUMP JUMPDEST SWAP6 DUP7 AND PUSH1 0x60 DUP3 ADD MSTORE MLOAD AND SWAP3 MLOAD PUSH1 0x60 SHL AND SWAP4 MLOAD PUSH1 0xC0 SHL AND SWAP2 PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL SWAP1 PUSH1 0xE0 SHL AND SWAP3 OR OR OR PUSH1 0x6 SSTORE PUSH32 0xA18562EA402E57CC2B437F8D7A139C6C38958ADC1ECBB706EC37A7A64FF6E7A5 DUP2 DUP11 PUSH2 0x43B3 DUP7 DUP7 DUP14 MLOAD SWAP5 DUP6 SWAP5 DUP6 SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG1 DUP8 MLOAD SWAP9 DUP10 SWAP6 DUP7 ADD SWAP1 SWAP5 SWAP4 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x80 DUP4 ADD SWAP7 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP6 MSTORE DUP5 PUSH2 0x3328 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x41F3 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x5072696365526174696F53746174655570646174656400000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SWAP6 SWAP8 SWAP2 PUSH2 0x43D9 SWAP2 DUP4 PUSH2 0x43E7 SWAP6 SWAP5 SWAP9 SWAP11 PUSH2 0x42BC JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x4480 JUMPI JUMPDEST PUSH2 0x4469 DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x5CB JUMPI PUSH2 0x447A SWAP1 PUSH2 0x35B9 JUMP JUMPDEST PUSH0 PUSH2 0x4298 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x445F JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x2CA4094F PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP TIMESTAMP DUP2 LT PUSH2 0x4227 JUMP JUMPDEST PUSH8 0x29A2241AF62C0000 DUP2 GT PUSH2 0x4603 JUMPI PUSH3 0x1E6E9 PUSH8 0xDE0B6B3A7640000 SWAP2 DIV DUP2 SUB SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x44D9 DUP2 PUSH2 0x4831 JUMP JUMPDEST SWAP1 PUSH2 0x44E3 DUP2 PUSH2 0x4DFF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 PUSH1 0x7 SLOAD SWAP2 PUSH1 0x20 SHL AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000 NOT AND OR PUSH1 0x7 SSTORE PUSH1 0x40 PUSH32 0x7EE46B38BE05F748DE1C0FB2002AC48FE50A26A0017C654A92C0BF9228058847 DUP2 DUP1 MLOAD DUP6 DUP2 MSTORE DUP5 PUSH1 0x20 DUP3 ADD MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MLOAD SWAP3 DUP5 PUSH1 0x20 DUP6 ADD MSTORE DUP3 DUP5 ADD MSTORE DUP2 DUP4 MSTORE PUSH2 0x458F DUP4 PUSH2 0x32DC JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x45E6 PUSH0 SWAP4 SWAP2 DUP5 SWAP3 DUP5 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4461696C79507269636553686966744578706F6E656E74557064617465640000 PUSH1 0x4 DUP5 ADD MSTORE DUP9 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x4211 JUMPI POP PUSH2 0x45FA JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x3717 SWAP1 PUSH2 0x32F8 JUMP JUMPDEST PUSH4 0x2B5B4F35 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT PUSH2 0x4741 JUMPI PUSH1 0x7 SLOAD PUSH32 0xFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH28 0xFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 PUSH1 0xA0 SHL AND SWAP2 AND OR PUSH1 0x7 SSTORE PUSH32 0x74D468C8E414C37C502176A45CCE93C85EAA0ABF608E40641DC6664CA5EFCAB0 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x46D7 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x43656E74657265646E6573734D617267696E5570646174656400000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4206 JUMPI POP JUMP JUMPDEST PUSH4 0x7304FAC7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x475E TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST AND DUP1 PUSH4 0xFFFFFFFF NOT PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x32A9FD44BDF167703F584BD25098494D3D18A4653A2D97116D28DA05209444D4 PUSH1 0x20 PUSH1 0x40 MLOAD DUP4 DUP2 MSTORE LOG1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x47D8 DUP3 PUSH2 0x330C JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x5CB JUMPI PUSH2 0x4730 PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH4 0xC8088247 PUSH1 0xE0 SHL DUP4 MSTORE PUSH32 0x4C61737454696D657374616D7055706461746564000000000000000000000000 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x323F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 DUP2 DUP4 GT PUSH2 0x4F7 JUMPI PUSH3 0x1E6E9 DUP1 DUP5 MUL SWAP4 DUP5 DIV EQ SWAP2 EQ OR ISZERO PUSH2 0x4F7 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x3717 SWAP2 PUSH0 SWAP2 PUSH2 0x48C1 JUMPI JUMPDEST POP PUSH2 0x48BA DUP2 PUSH2 0x4A47 JUMP JUMPDEST POP SWAP2 PUSH2 0x4E82 JUMP JUMPDEST PUSH2 0x48D5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x48B0 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP4 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4903 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x4EAB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x4A1E JUMPI JUMPDEST ISZERO PUSH2 0x4977 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x946 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x494E JUMP JUMPDEST PUSH2 0x4A83 SWAP1 PUSH1 0x8 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB PUSH1 0x7 SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 PUSH1 0xA0 SHR AND SWAP4 DUP3 PUSH4 0xFFFFFFFF DUP6 AND SWAP5 PUSH1 0x20 SHR AND SWAP3 DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4FDE JUMP JUMPDEST SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP1 PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP3 PUSH2 0x4AE5 JUMPI JUMPDEST POP PUSH2 0x4A83 DUP3 PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4AFA SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP SWAP1 PUSH0 PUSH2 0x4ADB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL DUP1 ISZERO PUSH2 0x544 JUMPI PUSH2 0x4B60 SWAP2 PUSH0 SWAP2 PUSH2 0x4B7F JUMPI JUMPDEST POP PUSH2 0x4A47 JUMP JUMPDEST PUSH2 0x4B6F JUMPI JUMPDEST POP POP PUSH2 0x420F PUSH2 0x4750 JUMP JUMPDEST PUSH2 0x4B78 SWAP2 PUSH2 0x40F2 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x4B65 JUMP JUMPDEST PUSH2 0x4B93 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4B5A JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x4BA8 DUP4 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x4BB6 JUMPI POP POP POP PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0x4BBF DUP4 PUSH2 0x364B JUMP JUMPDEST MLOAD ISZERO PUSH2 0x4C3E JUMPI PUSH2 0x4BDE PUSH2 0x14B9 PUSH2 0x4BE5 SWAP4 PUSH2 0x4BD8 DUP7 PUSH2 0x366F JUMP JUMPDEST MLOAD PUSH2 0x38D6 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x4C14 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C0F SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x4C38 SWAP2 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x33F0703B PUSH1 0xE1 SHL DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x4CCC JUMPI JUMPDEST POP PUSH2 0x4CC6 PUSH1 0x8 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD PUSH1 0xA0 SHR AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 PUSH1 0x80 SHR SWAP3 AND SWAP1 PUSH2 0x4B9D JUMP JUMPDEST POP LT ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x4CE0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xB8A DUP2 DUP4 PUSH2 0x3328 JUMP JUMPDEST SWAP3 POP POP POP PUSH0 PUSH2 0x4C9A JUMP JUMPDEST PUSH1 0x1 DUP2 MLOAD PUSH2 0x4CF7 DUP2 PUSH2 0x3509 JUMP JUMPDEST PUSH2 0x4D00 DUP2 PUSH2 0x3509 JUMP JUMPDEST SUB PUSH2 0x4D3B JUMPI PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x4 SWAP4 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x33CD77E7 PUSH1 0xE1 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x544 JUMPI PUSH0 SWAP2 PUSH2 0x361C JUMPI JUMPDEST POP SWAP1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D52 SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH8 0xDE05BC096E9C000 DUP1 DUP4 MUL DUP4 ISZERO SWAP2 DUP5 DUP3 DIV EQ DUP3 OR ISZERO PUSH2 0x4F7 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH8 0xDE111A6B7DE4000 DUP1 DUP7 MUL SWAP6 DUP7 DIV EQ OR ISZERO PUSH2 0x4F7 JUMPI DUP2 SWAP1 DIV DUP3 LT SWAP3 DUP4 ISZERO PUSH2 0x4DC9 JUMPI JUMPDEST POP POP POP PUSH2 0x4DBA JUMPI JUMP JUMPDEST PUSH4 0x3D9F09DF PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DIV LT SWAP1 POP PUSH0 DUP1 DUP1 PUSH2 0x4DB1 JUMP JUMPDEST PUSH2 0x4DF5 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0xD2C PUSH2 0x14B9 PUSH2 0x4DFB SWAP6 PUSH2 0xD2C DUP7 PUSH2 0x366F JUMP JUMPDEST SWAP1 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x4E13 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x80 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E43 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x60 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x4E6B JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xE4B PUSH8 0xDE0B6B3A7640000 PUSH2 0x18A5 PUSH2 0x189E DUP7 PUSH2 0x1895 PUSH2 0x3717 SWAP9 DUP9 PUSH2 0x4EA6 SWAP9 PUSH2 0x4DD5 JUMP JUMPDEST PUSH2 0x531C JUMP JUMPDEST PUSH1 0x1 DUP1 DUP3 GT ISZERO PUSH2 0x4D37 JUMPI PUSH2 0x4F7A SWAP1 DUP1 DUP4 PUSH17 0x100000000000000000000000000000000 DUP2 LT ISZERO PUSH2 0x4FC7 JUMPI JUMPDEST DUP1 PUSH9 0x10000000000000000 PUSH1 0x4 SWAP3 LT ISZERO PUSH2 0x4FBA JUMPI JUMPDEST PUSH5 0x100000000 DUP2 LT ISZERO PUSH2 0x4FAD JUMPI JUMPDEST PUSH3 0x10000 DUP2 LT ISZERO PUSH2 0x4FA0 JUMPI JUMPDEST PUSH2 0x100 DUP2 LT ISZERO PUSH2 0x4F94 JUMPI JUMPDEST PUSH1 0x10 DUP2 LT ISZERO PUSH2 0x4F88 JUMPI JUMPDEST LT ISZERO PUSH2 0x4F81 JUMPI JUMPDEST PUSH1 0x3 MUL DUP2 SHR PUSH2 0x4F2F DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F3C DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F49 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F56 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F63 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD DUP2 SHR PUSH2 0x4F70 DUP2 DUP6 PUSH2 0x38E9 JUMP JUMPDEST ADD SWAP1 SHR DUP1 SWAP3 PUSH2 0x38E9 JUMP JUMPDEST DUP2 GT SWAP1 SUB SWAP1 JUMP JUMPDEST DUP2 SHL PUSH2 0x4F20 JUMP JUMPDEST DUP2 SHR SWAP2 PUSH1 0x2 SHL SWAP2 PUSH2 0x4F19 JUMP JUMPDEST PUSH1 0x8 SHR SWAP2 DUP2 SHL SWAP2 PUSH2 0x4F0F JUMP JUMPDEST PUSH1 0x10 SHR SWAP2 PUSH1 0x8 SHL SWAP2 PUSH2 0x4F04 JUMP JUMPDEST PUSH1 0x20 SHR SWAP2 PUSH1 0x10 SHL SWAP2 PUSH2 0x4EF8 JUMP JUMPDEST PUSH1 0x40 SHR SWAP2 PUSH1 0x20 SHL SWAP2 PUSH2 0x4EEA JUMP JUMPDEST POP PUSH9 0x10000000000000000 SWAP1 POP PUSH1 0x80 DUP5 SWAP1 SHR PUSH2 0x4ED5 JUMP JUMPDEST SWAP2 SWAP5 SWAP6 SWAP3 SWAP4 SWAP1 SWAP6 PUSH0 SWAP5 PUSH2 0x4FF0 TIMESTAMP PUSH2 0x4E5A JUMP JUMPDEST SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP5 AND SWAP9 DUP3 DUP7 AND DUP11 DUP2 EQ PUSH2 0x530E JUMPI DUP12 DUP3 SWAP12 PUSH2 0x5010 PUSH2 0x375E JUMP JUMPDEST SWAP3 DUP7 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP2 DUP5 DUP8 MLOAD AND SWAP5 PUSH2 0x504A DUP14 DUP3 PUSH1 0x20 DUP12 ADD MLOAD AND SWAP10 PUSH1 0x40 DUP2 ADD SWAP11 PUSH1 0x60 DUP7 DUP14 MLOAD AND SWAP3 ADD SWAP10 DUP7 DUP12 MLOAD AND SWAP4 PUSH2 0x55FD JUMP JUMPDEST AND SWAP7 MLOAD AND LT SWAP3 DUP4 PUSH2 0x5301 JUMPI JUMPDEST POP POP POP PUSH2 0x518C JUMPI JUMPDEST POP POP POP SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x507A DUP11 DUP13 DUP10 PUSH2 0x4B9D JUMP JUMPDEST SWAP7 SWAP1 SWAP2 AND GT PUSH2 0x508C JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP6 SWAP9 SWAP5 SWAP8 SWAP4 SWAP7 POP PUSH2 0x50A1 DUP5 DUP7 DUP11 PUSH2 0x4E82 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP7 DUP8 DUP3 MUL SWAP2 DUP1 DUP4 DIV DUP10 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x50C8 PUSH2 0x50F2 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP6 DUP10 ISZERO PUSH2 0x5172 JUMPI PUSH2 0x50E2 PUSH2 0x50DB DUP13 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP8 JUMPDEST DUP11 ISZERO PUSH2 0x516A JUMPI POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND DUP6 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP8 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x5122 SWAP3 PUSH2 0x4DF5 PUSH2 0x5116 SWAP3 DUP9 SWAP5 PUSH2 0x56B3 JUMP JUMPDEST DIV SWAP6 PUSH2 0x4DF5 DUP5 DUP9 PUSH2 0x38AC JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A763FFFF NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x4F7 JUMPI PUSH2 0x514D SWAP4 PUSH2 0x5147 DUP8 PUSH2 0x1F74 SWAP5 PUSH2 0x38D6 JUMP JUMPDEST DIV PUSH2 0x3AFE JUMP JUMPDEST SWAP1 ISZERO PUSH2 0x5165 JUMPI SWAP1 JUMPDEST SWAP1 SWAP2 PUSH1 0x1 SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x5084 JUMP JUMPDEST PUSH2 0x5155 JUMP JUMPDEST SWAP1 POP SWAP5 PUSH2 0x55E7 JUMP JUMPDEST PUSH2 0x5185 PUSH2 0x517E DUP13 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP12 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP8 PUSH2 0x50E5 JUMP JUMPDEST DUP3 SWAP12 POP PUSH2 0x51A1 SWAP3 SWAP2 SWAP5 SWAP13 POP DUP1 SWAP4 SWAP11 POP DUP9 PUSH2 0x4B9D JUMP JUMPDEST SWAP10 SWAP1 SWAP2 DUP11 ISZERO PUSH2 0x52EA JUMPI PUSH2 0x51CE SWAP1 PUSH2 0x51B7 DUP10 PUSH2 0x366F JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP3 DUP2 DUP5 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP4 DUP1 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP6 SUB PUSH2 0x4F7 JUMPI PUSH2 0x5210 DUP6 PUSH1 0x2 SHL DUP3 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0x1BC16D674EC7FFFF NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x522C SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH15 0xC097CE7BC90715B34B9F1000000000 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4F7 JUMPI PUSH2 0x525B SWAP3 PUSH2 0x5255 PUSH2 0x4DF5 SWAP3 PUSH2 0x4EAB JUMP JUMPDEST SWAP1 PUSH2 0x38AC JUMP JUMPDEST PUSH8 0xDE0B6B3A763FFFF NOT DUP4 ADD SWAP3 DUP4 GT PUSH2 0x4F7 JUMPI PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x4F7 JUMPI PUSH2 0x52AB PUSH2 0xE4B SWAP2 PUSH2 0x52B2 SWAP5 PUSH1 0x1 SHL SWAP1 PUSH2 0x38E9 JUMP JUMPDEST SWAP4 DUP5 PUSH2 0x38D6 JUMP JUMPDEST SWAP8 ISZERO PUSH2 0x52D8 JUMPI SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP8 JUMPDEST SWAP8 SWAP9 PUSH1 0x1 SWAP8 SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 PUSH0 DUP1 PUSH2 0x505E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x52C7 JUMP JUMPDEST SWAP1 PUSH2 0x51CE SWAP1 PUSH2 0x52F8 DUP10 PUSH2 0x364B JUMP JUMPDEST MLOAD SWAP1 SWAP3 SWAP5 PUSH2 0x51BC JUMP JUMPDEST MLOAD AND GT SWAP1 POP PUSH0 DUP7 DUP2 PUSH2 0x5056 JUMP JUMPDEST POP SWAP9 POP PUSH0 SWAP8 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x202A JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5388 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH4 0x2CD44AC3 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x539A DUP4 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x53C5 JUMPI JUMPDEST POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x540B JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x53F0 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP3 POP PUSH2 0x3717 SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x5469 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x5379 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x536F DUP4 PUSH2 0x330C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x547E DUP2 PUSH2 0x3581 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x5423 JUMPI POP PUSH1 0x1 EQ PUSH2 0x54A6 JUMPI POP POP PUSH2 0x3717 SWAP3 POP SUB DUP3 PUSH2 0x3328 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x54ED JUMPI POP PUSH2 0x3717 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x53B7 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x54D2 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x557C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x544 JUMPI PUSH0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO PUSH2 0x5572 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x3513 JUMPI DUP1 PUSH2 0x5599 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x55B0 JUMPI PUSH4 0xF645EEDF PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x55CB JUMPI POP PUSH4 0xFCE698F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x55D5 JUMPI POP JUMP JUMPDEST PUSH4 0x35E2F383 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF SWAP2 DUP3 AND SWAP1 DUP3 AND SUB SWAP2 SWAP1 DUP3 GT PUSH2 0x4F7 JUMPI JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP3 DUP5 AND DUP2 LT PUSH2 0x561F JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 DUP6 AND LT ISZERO PUSH2 0x56AB JUMPI DUP4 DUP3 PUSH2 0x563A PUSH2 0x5648 SWAP7 PUSH2 0x5641 SWAP5 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP4 PUSH2 0x55E7 JUMP JUMPDEST AND SWAP1 PUSH2 0x40CE JUMP JUMPDEST SWAP2 PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP2 AND PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 MUL SWAP4 DUP3 DUP6 DIV DUP3 EQ DUP4 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x568E PUSH2 0x5694 SWAP2 PUSH2 0x5689 DUP7 PUSH2 0x3717 SWAP9 PUSH2 0x38E9 JUMP JUMPDEST PUSH2 0x56B3 JUMP JUMPDEST DUP5 PUSH2 0x38D6 JUMP JUMPDEST DIV SWAP2 DUP2 DUP1 DUP3 LT SWAP2 XOR MUL XOR DUP2 DUP1 DUP3 GT SWAP2 XOR MUL XOR PUSH2 0x4E2A JUMP JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x56CA JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x56E7 JUMPI POP POP DUP1 PUSH2 0x4DFB SWAP2 PUSH2 0x38D6 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x570B JUMPI POP PUSH2 0x5704 DUP3 PUSH2 0x4DFB SWAP4 PUSH2 0x38D6 JUMP JUMPDEST DIV DUP1 PUSH2 0x38D6 JUMP JUMPDEST SWAP1 POP PUSH2 0x5716 SWAP2 PUSH2 0x577A JUMP JUMPDEST PUSH2 0x2710 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x4F7 JUMPI DUP2 LT ISZERO PUSH2 0x5751 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x38F3 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x38F3 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5F26 JUMPI DUP2 ISZERO PUSH2 0x5F20 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x5F12 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x5F03 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x5EF2 JUMPI JUMPDEST ISZERO PUSH2 0x5BA5 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x5803 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF NOT ADD DUP4 MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH9 0x238FD42C5CF03FFFF NOT DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x5B92 JUMPI JUMPDEST ISZERO PUSH2 0x5B83 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x5B70 JUMPI JUMPDEST ISZERO PUSH2 0x5B61 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x5B52 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x5B05 JUMPI PUSH9 0x6F05B59D3B1FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x5AE2 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x5ABE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x5A9C JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x5A7A JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x5A59 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x5A38 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x5A17 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x59F6 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x3717 JUMPI PUSH2 0x3717 SWAP1 PUSH2 0x5756 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5977 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5965 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5953 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 DUP4 SWAP2 PUSH9 0xAD78EBC5AC61FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x594A JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 DUP4 SWAP2 PUSH9 0x15AF1D78B58C3FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5938 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 DUP4 SWAP2 PUSH9 0x2B5E3AF16B187FFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5926 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP4 SWAP2 PUSH9 0x56BC75E2D630FFFFFF NOT ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x5914 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH9 0xAD78EBC5AC61FFFFFF NOT ADD PUSH2 0x5902 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x5B3F JUMPI PUSH9 0x3782DACE9D8FFFFFF NOT ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x58ED JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x58A7 JUMP JUMPDEST PUSH4 0xD4794EFD PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5898 JUMP JUMPDEST PUSH4 0xA2F9F7E3 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x5888 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x5EDC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x5EB1 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x5E90 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x5E6D JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x5E4D JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x5E2D JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x5E0D JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x5DED JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x5DD6 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x5DB6 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x5D96 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x5D77 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x5D58 JUMPI JUMPDEST POP PUSH2 0x5D05 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 DUP1 DUP3 ADD SWAP2 PUSH9 0x56BC75E2D630FFFFF NOT ADD MUL PUSH2 0x5770 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x5D53 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x5872 JUMP JUMPDEST PUSH2 0x5D4D JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CDF JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CCB JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CB7 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5CA3 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C8F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C7B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C67 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C52 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x5C3D JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x5C25 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x5C04 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x5BE7 JUMP JUMPDEST SWAP1 POP PUSH2 0x5EE8 SWAP2 POP PUSH2 0x5756 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x5BBA JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x57C0 JUMP JUMPDEST PUSH4 0xD8317311 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0x11380F PUSH1 0xE5 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 PUSH1 0x3 EQ PUSH2 0x5F7F JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x5F6B JUMPI PUSH1 0x2 EQ PUSH2 0x5F62 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x3717 SWAP2 PUSH2 0x4D48 JUMP JUMPDEST POP PUSH2 0x4DFB SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH2 0x38D6 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4F7 JUMPI PUSH2 0x3717 SWAP2 PUSH2 0x38E9 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MSIZE GT DUP10 ORIGIN 0x26 PUSH17 0x11C7CF97006BC40463D53AEA2D566EEECA 0xB5 0xCB GAS KECCAK256 0xCC CALL ADD SHL 0xCA PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER 0xC2 JUMPI GAS 0xE SWAP15 MSIZE EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"1032:3192:59:-:0;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;-1:-1:-1;;1032:3192:59;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;1156:21:30;-1:-1:-1;1032:3192:59;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;1032:3192:59;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;:::o;:::-;1434:26;-1:-1:-1;1032:3192:59;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;1032:3192:59;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;1434:26;1032:3192;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:26;1032:3192;:::o;:::-;;;;-1:-1:-1;1032:3192:59;;;;;1434:26;1032:3192;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:26;1032:3192;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:292;;;;1368:30;;;;;;:::i;:::-;;;;;;;;;;1032:3192;;;;;;1732:38:24;;;;1032:3192:59;;;;;;;;;1855:38:24;;;2492:115;;;3016:52;;;:::i;:::-;2991:77;;3420:332;;;;;;;;4291:52;;;:::i;:::-;4266:77;;4475:117;;922:4:36;1347:46:23;;-1:-1:-1;;;;;1032:3192:59;;943:28:35;939:79;;1028:14;;1032:3192:59;;1461:37:27;1032:3192:59;;;1461:15:27;:37;:::i;:::-;1513:35;;;;1509:106;;1032:3192:59;1625:42:27;789:8:30;1625:42:27;;;1032:3192:59;1735:53:27;;789:8:30;:::i;:::-;1032:3192:59;:::i;:::-;1175:292::o;1509:106:27:-;1571:33;;;-1:-1:-1;1571:33:27;;-1:-1:-1;1571:33:27;939:79:35;994:13;;;-1:-1:-1;994:13:35;;-1:-1:-1;994:13:35;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;1090:94:30:-;1032:3192:59;;1090:94:30;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;1156:21:30;1032:3192:59;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:30;1032:3192:59;1090:94:30:o;1032:3192:59:-;1156:21:30;1032:3192:59;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:30;1032:3192:59;1090:94:30:o;1032:3192:59:-;;;;;;;1156:21:30;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4140:1462:26;;4672:715;;1817:66;4672:715;;;;;;4278:78;4672:715;;;-1:-1:-1;;;;;1032:3192:59;;5515:25:26;5511:85;;4140:1462::o;5511:85::-;5563:22;;;4278:78;5563:22;;4278:78;5563:22;4140:1462;;4672:715;;3673:66;4672:715;;;;;;-1:-1:-1;4672:715:26;;;-1:-1:-1;;;;;1032:3192:59;;5515:25:26;5511:85;;4140:1462::o"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":344,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_array_struct_TokenConfig_dyn":{"entryPoint":2682,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":1194,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":5743,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":3943,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":2621,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PoolRoleAccounts":{"entryPoint":2872,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ReClammPriceParams":{"entryPoint":2965,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_array_address_dyn":{"entryPoint":1425,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":358,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes32_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_string":{"entryPoint":1012,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolRoleAccounts":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_ReClammPoolParams_contract_IVault":{"entryPoint":3975,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint64":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_struct_struct_LiquidityManagement":{"entryPoint":3374,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":1161,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":2648,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_string_storage":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_dataslot_string_storage_10615":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"array_storeLengthForEncoding_bytes":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":3710,"id":null,"parameterSlots":2,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_string":{"entryPoint":3469,"id":null,"parameterSlots":0,"returnSlots":1},"external_fun_create":{"entryPoint":3065,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_disable":{"entryPoint":669,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getActionId":{"entryPoint":2307,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAuthorizer":{"entryPoint":2483,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getCreationCode":{"entryPoint":394,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getCreationCodeContracts":{"entryPoint":484,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getDefaultLiquidityManagement":{"entryPoint":590,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getDefaultPoolHooksContract":{"entryPoint":3348,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getDeploymentAddress":{"entryPoint":1264,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getNewPoolPauseWindowEndTime":{"entryPoint":3244,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getOriginalPauseWindowEndTime":{"entryPoint":3284,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPauseWindowDuration":{"entryPoint":2243,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolCount":{"entryPoint":2454,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolVersion":{"entryPoint":1032,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPools":{"entryPoint":2067,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolsInRange":{"entryPoint":1493,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVault":{"entryPoint":2387,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isDisabled":{"entryPoint":2209,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolFromFactory":{"entryPoint":2003,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_version":{"entryPoint":1729,"id":null,"parameterSlots":0,"returnSlots":0},"extract_from_storage_value_dynamict_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1127,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6888":{"entryPoint":1079,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_6910":{"entryPoint":1107,"id":null,"parameterSlots":1,"returnSlots":0},"fun_computeFinalSalt":{"entryPoint":4788,"id":2911,"parameterSlots":1,"returnSlots":1},"fun_create":{"entryPoint":5068,"id":2938,"parameterSlots":2,"returnSlots":1},"fun_create_16269":{"entryPoint":4180,"id":16269,"parameterSlots":9,"returnSlots":1},"fun_disable_inner":{"entryPoint":3410,"id":null,"parameterSlots":0,"returnSlots":0},"fun_ensureEnabled":{"entryPoint":4761,"id":2866,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":3850,"id":3389,"parameterSlots":1,"returnSlots":1},"fun_getCreationCodeWithArgs":{"entryPoint":4563,"id":3557,"parameterSlots":1,"returnSlots":1},"fun_getNewPoolPauseWindowEndTime":{"entryPoint":4508,"id":3763,"parameterSlots":0,"returnSlots":1},"fun_registerPoolWithVault":{"entryPoint":5280,"id":2974,"parameterSlots":6,"returnSlots":0},"fun_toUint64":{"entryPoint":5024,"id":12237,"parameterSlots":1,"returnSlots":1},"fun_validateTokenConfig":{"entryPoint":4872,"id":17776,"parameterSlots":2,"returnSlots":0},"memory_array_index_access_address_dyn":{"entryPoint":3830,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_address_dyn_6905":{"entryPoint":3801,"id":null,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_address_dyn_6907":{"entryPoint":3814,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":3690,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3723,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1059,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_enum_TokenType":{"entryPoint":4859,"id":null,"parameterSlots":1,"returnSlots":1},"revert_forward":{"entryPoint":3964,"id":null,"parameterSlots":0,"returnSlots":0},"storage_array_index_access_address_dyn":{"entryPoint":3743,"id":null,"parameterSlots":1,"returnSlots":2},"validator_assert_enum_TokenType":{"entryPoint":4829,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_address":{"entryPoint":1986,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":2672,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_bool_6901":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_uint64":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"3329":[{"length":32,"start":3860}],"3408":[{"length":32,"start":515},{"length":32,"start":4684}],"3410":[{"length":32,"start":4566}],"3412":[{"length":32,"start":551},{"length":32,"start":4721}],"3414":[{"length":32,"start":4599}],"3692":[{"length":32,"start":2271}],"3694":[{"length":32,"start":3312},{"length":32,"start":4510}],"6845":[{"length":32,"start":761},{"length":32,"start":2418},{"length":32,"start":2528},{"length":32,"start":4424},{"length":32,"start":5298}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8062c194db14610153578063174481fa1461014e578063193ad50f146101495780632f2770db146101445780633f819b6f1461013f57806344f6fec71461013a57806353a72f7e1461013557806354fd4d50146101305780636634b7531461012b578063673a2a1f146101265780636c57f5a91461012157806378da80cb1461011c578063851c1bb3146101175780638d928af8146101125780638eec5d701461010d578063aaabadc514610108578063b3595be014610103578063db035ebc146100fe578063e9d56e19146100f95763ec888061146100f4575f80fd5b610d14565b610cd4565b610cac565b610bf9565b6109b3565b610996565b610953565b610903565b6108c3565b6108a1565b610813565b6107d3565b6106c1565b6105d5565b6104f0565b610408565b61029d565b61024e565b6101e4565b61018a565b5f91031261016257565b5f80fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b34610162575f366003190112610162576040516020810181811067ffffffffffffffff8211176101df576101db916101c7916040525f81526111d3565b604051918291602083526020830190610166565b0390f35b610423565b34610162575f36600319011261016257604080516001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001682527f0000000000000000000000000000000000000000000000000000000000000000166020820152f35b34610162575f366003190112610162576080610268610d2e565b61029b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b34610162575f366003190112610162576102d95f357fffffffff0000000000000000000000000000000000000000000000000000000016610f0a565b60405163aaabadc560e01b81526020916001600160a01b039183816004817f000000000000000000000000000000000000000000000000000000000000000087165afa80156103c0578492610360925f926103c5575b506040516326f8aa2160e21b8152600481019190915233602482015230604482015293849283919082906064820190565b0392165afa9182156103c0575f92610393575b50501561038457610382610d52565b005b6323dada5360e01b5f5260045ffd5b6103b29250803d106103b9575b6103aa8183610467565b81019061166f565b5f80610373565b503d6103a0565b610f7c565b6103e6919250843d86116103ed575b6103de8183610467565b810190610f67565b905f61032f565b503d6103d4565b906020610405928181520190610166565b90565b34610162575f366003190112610162576101db6101c7610d8d565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176101df57604052565b67ffffffffffffffff81116101df57604052565b90601f8019910116810190811067ffffffffffffffff8211176101df57604052565b60405190610140820182811067ffffffffffffffff8211176101df57604052565b92919267ffffffffffffffff82116101df57604051916104d4601f8201601f191660200184610467565b829481845281830111610162578281602093845f960137010152565b346101625760403660031901126101625760043567ffffffffffffffff81116101625736602382011215610162576001600160a01b036055600b6105416101db9436906024816004013591016104aa565b61055561054f6024356112b4565b916111d3565b602081519101209060405191604083015260208201523081520160ff81532016604051918291829190916001600160a01b036020820193169052565b60209060206040818301928281528551809452019301915f5b8281106105b8575050505090565b83516001600160a01b0316855293810193928101926001016105aa565b346101625760403660031901126101625760043560243590600191600154808310156106b2578183018084116106ad57811061069c575b5061061681610a58565b916106246040519384610467565b818352601f1961063383610a58565b013660208501375f5b82811061065157604051806101db8682610591565b8061069661067e61066b610666899587610e7e565b610e9f565b90546001600160a01b039160031b1c1690565b6106888388610ef6565b906001600160a01b03169052565b0161063c565b828103915081116106ad575f61060c565b610e6a565b634e23d03560e01b5f5260045ffd5b34610162575f366003190112610162576040515f60035460018160011c91600181169182156107b8575b6020916020851084146107a4578487526020870193908115610785575060011461072c575b6101db8661072081880382610467565b604051918291826103f4565b60035f90815294509192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8386106107745750505091019050610720826101db5f610710565b805485870152948201948101610759565b60ff1916845250505090151560051b019050610720826101db5f610710565b634e487b7160e01b5f52602260045260245ffd5b92607f16926106eb565b6001600160a01b0381160361016257565b34610162576020366003190112610162576001600160a01b036004356107f8816107c2565b165f525f602052602060ff60405f2054166040519015158152f35b34610162575f36600319011261016257604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610883576101db86610877818a0382610467565b60405191829182610591565b84546001600160a01b03168752958601959383019390830190610860565b34610162575f36600319011261016257602060ff600254166040519015158152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162576020366003190112610162576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036101625761094b602091610f0a565b604051908152f35b34610162575f3660031901126101625760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f366003190112610162576020600154604051908152f35b34610162575f3660031901126101625760405163aaabadc560e01b81526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9081156103c0576020925f92610a1e575b5060405191168152f35b610a36919250833d85116103ed576103de8183610467565b905f610a14565b9080601f8301121561016257816020610405933591016104aa565b67ffffffffffffffff81116101df5760051b60200190565b8015150361016257565b9080601f83011215610162578135916020610a9484610a58565b93604093610aa56040519687610467565b818652828087019260071b85010193818511610162578301915b848310610acf5750505050505090565b60808383031261016257855190610ae582610437565b8335610af0816107c2565b8252848401359060028210156101625782869283608095015288860135610b16816107c2565b8982015260608087013590610b2a82610a70565b820152815201920191610abf565b606090606319011261016257604051906060820182811067ffffffffffffffff8211176101df5760405281606435610b6f816107c2565b8152608435610b7d816107c2565b6020820152604060a43591610b91836107c2565b0152565b60a09060e3190112610162576040519060a0820182811067ffffffffffffffff8211176101df576040528160e435815261010435602082015261012435604082015261014435610be481610a70565b606082015260806101643591610b9183610a70565b34610162576101e03660031901126101625767ffffffffffffffff60043581811161016257610c2c903690600401610a3d565b9060243581811161016257610c45903690600401610a3d565b91604435918211610162576101db92610c65610c92933690600401610a7a565b90610c6f36610b38565b92610c7936610b95565b906101c435946101a43594610184359460c43593611054565b6040516001600160a01b0390911681529081906020820190565b34610162575f366003190112610162576020610cc661119c565b63ffffffff60405191168152f35b34610162575f36600319011261016257602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610162575f3660031901126101625760206040515f8152f35b60405190610d3b82610437565b5f6060838281528260208201528260408201520152565b610d5a611299565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1565b604051905f6004546001918160011c9260018316908115610e60575b6020906020861083146107a45785885287946020860193908115610e415750600114610de1575b505050610ddf92500383610467565b565b925093610e0f60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90565b945f935b828510610e2b57505050610ddf9350015f8080610dd0565b8654858501529586019588955093810193610e13565b92505050610ddf9491925060ff19168252151560051b015f8080610dd0565b93607f1693610da9565b634e487b7160e01b5f52601160045260245ffd5b919082018092116106ad57565b634e487b7160e01b5f52603260045260245ffd5b600154811015610ed45760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b610e8b565b805115610ed45760200190565b805160011015610ed45760400190565b8051821015610ed45760209160051b010190565b60405160208101917f0000000000000000000000000000000000000000000000000000000000000000835263ffffffff60e01b166040820152602481526060810181811067ffffffffffffffff8211176101df5760405251902090565b908160209103126101625751610405816107c2565b6040513d5f823e3d90fd5b92916020610ddf92604086526110448151610fe3610fb3610140928360408c01526101808b0190610166565b85850151603f198b8303810160608d015291610fce91610166565b906040860151908b83030160808c0152610166565b606084015160a08a0152608084015167ffffffffffffffff1660c08a01529260a081015160e08a015261103860c08201519261010093848c015260e08301519361012094858d0152830151908b019015159052565b01511515610160880152565b9401906001600160a01b03169052565b969293989791946001600160a01b0361107760408701516001600160a01b031690565b1661118d57610ddf9761114061118495611136846110b59b611171976110a061117f988e611308565b6110a8610d2e565b5f6060820152600181529d565b825161111d6020850151926040860151946110e96110e360806110db60608b0151151590565b990151151590565b996113a0565b916110f2610489565b9b8c5260208c0152611102610d8d565b60408c015260608b015267ffffffffffffffff1660808a0152565b60a088015260c087015260e08601521515610100850152565b1515610120830152565b6040519283917f00000000000000000000000000000000000000000000000000000000000000009060208401610f87565b03601f198101835282610467565b6113cc565b958692836114a0565b63187b85d960e21b5f5260045ffd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156111ce5790565b505f90565b907f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000808201908183116106ad57845192838301958684116106ad5760209260018480946040519a82818d01016040528b52805f838d017f00000000000000000000000000000000000000000000000000000000000000003c8a01017f00000000000000000000000000000000000000000000000000000000000000003c01918501015e565b60ff600254166112a557565b633ac4266d60e11b5f5260045ffd5b60405160208101913383524660408301526060820152606081526112d781610437565b51902090565b600211156112e757565b634e487b7160e01b5f52602160045260245ffd5b5160028110156112e75790565b906002825111611391576060810151151580611370575b611337576080015115159081611346575b5061133757565b63a1e9dd9d60e01b5f5260045ffd5b60019150602061135861135f92610ee6565b51016112fb565b611368816112dd565b14155f611330565b506001611381602061135885610ed9565b61138a816112dd565b141561131f565b630e0f7beb60e31b5f5260045ffd5b67ffffffffffffffff908181116113b5571690565b6306dfcc6560e41b5f52604060045260245260445ffd5b9061054f6113d9916112b4565b805115611491576020815191015ff5903d1519821516610f7c576001600160a01b0391828116908115611482579261140f611299565b815f525f60205260405f20600160ff19825416179055600154680100000000000000008110156101df578060016114499201600155610e9f565b819291549060031b9184831b921b19161790557f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2565b63b06ebf3d60e01b5f5260045ffd5b631328927760e21b5f5260045ffd5b9294919390946001600160a01b0393847f000000000000000000000000000000000000000000000000000000000000000016956114db61119c565b91873b156101625797959493929190604095604051998a9863eeec802f60e01b8a526004836101a48c01931660048c015260246101a060248d015282518094526101c48c019a6020809401955f935b8685106115fe57505050505050505086946115a85f9997939561159788966115658d996115da9760448b015260648a019063ffffffff169052565b88608489015260a4880190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b6001600160a01b0316610104860152565b805115156101248501526020810151151561014485015260408101511515610164850152606001511515610184840152565b03925af180156103c0576115eb5750565b806115f8610ddf92610453565b80610158565b9193959798999a9b9c90929496809e505183815116825287810151600281101561165d5782899260809284600196015286888201511688830152606080910151151590820152019e0195019290918f9d9c9b9a9998979596949261152a565b86602185634e487b7160e01b5f52525ffd5b90816020910312610162575161040581610a7056fea2646970667358221220bcc086bfa8cf229b6f976634e41162488be79708c6a3a98d6b9628ae8ce31ee764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xC194DB EQ PUSH2 0x153 JUMPI DUP1 PUSH4 0x174481FA EQ PUSH2 0x14E JUMPI DUP1 PUSH4 0x193AD50F EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x2F2770DB EQ PUSH2 0x144 JUMPI DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x13F JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x130 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0x12B JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x121 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x11C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x117 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x112 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x108 JUMPI DUP1 PUSH4 0xB3595BE0 EQ PUSH2 0x103 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0xFE JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0xF9 JUMPI PUSH4 0xEC888061 EQ PUSH2 0xF4 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH2 0xD14 JUMP JUMPDEST PUSH2 0xCD4 JUMP JUMPDEST PUSH2 0xCAC JUMP JUMPDEST PUSH2 0xBF9 JUMP JUMPDEST PUSH2 0x9B3 JUMP JUMPDEST PUSH2 0x996 JUMP JUMPDEST PUSH2 0x953 JUMP JUMPDEST PUSH2 0x903 JUMP JUMPDEST PUSH2 0x8C3 JUMP JUMPDEST PUSH2 0x8A1 JUMP JUMPDEST PUSH2 0x813 JUMP JUMPDEST PUSH2 0x7D3 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x5D5 JUMP JUMPDEST PUSH2 0x4F0 JUMP JUMPDEST PUSH2 0x408 JUMP JUMPDEST PUSH2 0x29D JUMP JUMPDEST PUSH2 0x24E JUMP JUMPDEST PUSH2 0x1E4 JUMP JUMPDEST PUSH2 0x18A JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x162 JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP1 MLOAD DUP1 DUP4 MSTORE PUSH1 0x20 SWAP3 SWAP2 DUP2 SWAP1 DUP5 ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH2 0x1DB SWAP2 PUSH2 0x1C7 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH2 0x11D3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH2 0x423 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND DUP3 MSTORE PUSH32 0x0 AND PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x80 PUSH2 0x268 PUSH2 0xD2E JUMP JUMPDEST PUSH2 0x29B PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH2 0x2D9 PUSH0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xF0A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP4 DUP2 PUSH1 0x4 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x3C0 JUMPI DUP5 SWAP3 PUSH2 0x360 SWAP3 PUSH0 SWAP3 PUSH2 0x3C5 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x26F8AA21 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLER PUSH1 0x24 DUP3 ADD MSTORE ADDRESS PUSH1 0x44 DUP3 ADD MSTORE SWAP4 DUP5 SWAP3 DUP4 SWAP2 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x393 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x384 JUMPI PUSH2 0x382 PUSH2 0xD52 JUMP JUMPDEST STOP JUMPDEST PUSH4 0x23DADA53 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3B2 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x3B9 JUMPI JUMPDEST PUSH2 0x3AA DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x166F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x373 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3A0 JUMP JUMPDEST PUSH2 0xF7C JUMP JUMPDEST PUSH2 0x3E6 SWAP2 SWAP3 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x3ED JUMPI JUMPDEST PUSH2 0x3DE DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xF67 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x32F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D4 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x405 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH2 0x1DB PUSH2 0x1C7 PUSH2 0xD8D JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F DUP1 NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1DF JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x4D4 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP5 PUSH2 0x467 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x162 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x162 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x162 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x55 PUSH1 0xB PUSH2 0x541 PUSH2 0x1DB SWAP5 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x4AA JUMP JUMPDEST PUSH2 0x555 PUSH2 0x54F PUSH1 0x24 CALLDATALOAD PUSH2 0x12B4 JUMP JUMPDEST SWAP2 PUSH2 0x11D3 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 AND PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 SWAP2 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD SWAP4 AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5B8 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x5AA JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x40 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD DUP1 DUP4 LT ISZERO PUSH2 0x6B2 JUMPI DUP2 DUP4 ADD DUP1 DUP5 GT PUSH2 0x6AD JUMPI DUP2 LT PUSH2 0x69C JUMPI JUMPDEST POP PUSH2 0x616 DUP2 PUSH2 0xA58 JUMP JUMPDEST SWAP2 PUSH2 0x624 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x467 JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x1F NOT PUSH2 0x633 DUP4 PUSH2 0xA58 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x651 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1DB DUP7 DUP3 PUSH2 0x591 JUMP JUMPDEST DUP1 PUSH2 0x696 PUSH2 0x67E PUSH2 0x66B PUSH2 0x666 DUP10 SWAP6 DUP8 PUSH2 0xE7E JUMP JUMPDEST PUSH2 0xE9F JUMP JUMPDEST SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x3 SHL SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x688 DUP4 DUP9 PUSH2 0xEF6 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x63C JUMP JUMPDEST DUP3 DUP2 SUB SWAP2 POP DUP2 GT PUSH2 0x6AD JUMPI PUSH0 PUSH2 0x60C JUMP JUMPDEST PUSH2 0xE6A JUMP JUMPDEST PUSH4 0x4E23D035 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH1 0x3 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP2 AND SWAP2 DUP3 ISZERO PUSH2 0x7B8 JUMPI JUMPDEST PUSH1 0x20 SWAP2 PUSH1 0x20 DUP6 LT DUP5 EQ PUSH2 0x7A4 JUMPI DUP5 DUP8 MSTORE PUSH1 0x20 DUP8 ADD SWAP4 SWAP1 DUP2 ISZERO PUSH2 0x785 JUMPI POP PUSH1 0x1 EQ PUSH2 0x72C JUMPI JUMPDEST PUSH2 0x1DB DUP7 PUSH2 0x720 DUP2 DUP9 SUB DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x3F4 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP5 POP SWAP2 SWAP3 SWAP2 PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B JUMPDEST DUP4 DUP7 LT PUSH2 0x774 JUMPI POP POP POP SWAP2 ADD SWAP1 POP PUSH2 0x720 DUP3 PUSH2 0x1DB PUSH0 PUSH2 0x710 JUMP JUMPDEST DUP1 SLOAD DUP6 DUP8 ADD MSTORE SWAP5 DUP3 ADD SWAP5 DUP2 ADD PUSH2 0x759 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP5 MSTORE POP POP POP SWAP1 ISZERO ISZERO PUSH1 0x5 SHL ADD SWAP1 POP PUSH2 0x720 DUP3 PUSH2 0x1DB PUSH0 PUSH2 0x710 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x6EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x162 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x7F8 DUP2 PUSH2 0x7C2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x883 JUMPI PUSH2 0x1DB DUP7 PUSH2 0x877 DUP2 DUP11 SUB DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x591 JUMP JUMPDEST DUP5 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x860 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH1 0x20 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x162 JUMPI PUSH2 0x94B PUSH1 0x20 SWAP2 PUSH2 0xF0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xA1E JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA36 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3ED JUMPI PUSH2 0x3DE DUP2 DUP4 PUSH2 0x467 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xA14 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x162 JUMPI DUP2 PUSH1 0x20 PUSH2 0x405 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4AA JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1DF JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x162 JUMPI JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x162 JUMPI DUP2 CALLDATALOAD SWAP2 PUSH1 0x20 PUSH2 0xA94 DUP5 PUSH2 0xA58 JUMP JUMPDEST SWAP4 PUSH1 0x40 SWAP4 PUSH2 0xAA5 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x467 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x162 JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0xACF JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x162 JUMPI DUP6 MLOAD SWAP1 PUSH2 0xAE5 DUP3 PUSH2 0x437 JUMP JUMPDEST DUP4 CALLDATALOAD PUSH2 0xAF0 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP3 MSTORE DUP5 DUP5 ADD CALLDATALOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x162 JUMPI DUP3 DUP7 SWAP3 DUP4 PUSH1 0x80 SWAP6 ADD MSTORE DUP9 DUP7 ADD CALLDATALOAD PUSH2 0xB16 DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP10 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP8 ADD CALLDATALOAD SWAP1 PUSH2 0xB2A DUP3 PUSH2 0xA70 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0xABF JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH1 0x63 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE DUP2 PUSH1 0x64 CALLDATALOAD PUSH2 0xB6F DUP2 PUSH2 0x7C2 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x84 CALLDATALOAD PUSH2 0xB7D DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH2 0xB91 DUP4 PUSH2 0x7C2 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH1 0xA0 SWAP1 PUSH1 0xE3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0xA0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE DUP2 PUSH1 0xE4 CALLDATALOAD DUP2 MSTORE PUSH2 0x104 CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x124 CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH2 0xBE4 DUP2 PUSH2 0xA70 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 PUSH2 0x164 CALLDATALOAD SWAP2 PUSH2 0xB91 DUP4 PUSH2 0xA70 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH2 0x1E0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x162 JUMPI PUSH2 0xC2C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA3D JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x162 JUMPI PUSH2 0xC45 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA3D JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x162 JUMPI PUSH2 0x1DB SWAP3 PUSH2 0xC65 PUSH2 0xC92 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA7A JUMP JUMPDEST SWAP1 PUSH2 0xC6F CALLDATASIZE PUSH2 0xB38 JUMP JUMPDEST SWAP3 PUSH2 0xC79 CALLDATASIZE PUSH2 0xB95 JUMP JUMPDEST SWAP1 PUSH2 0x1C4 CALLDATALOAD SWAP5 PUSH2 0x1A4 CALLDATALOAD SWAP5 PUSH2 0x184 CALLDATALOAD SWAP5 PUSH1 0xC4 CALLDATALOAD SWAP4 PUSH2 0x1054 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH2 0xCC6 PUSH2 0x119C JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x162 JUMPI PUSH0 CALLDATASIZE PUSH1 0x3 NOT ADD SLT PUSH2 0x162 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xD3B DUP3 PUSH2 0x437 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0xD5A PUSH2 0x1299 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 PUSH1 0x4 SLOAD PUSH1 0x1 SWAP2 DUP2 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP4 AND SWAP1 DUP2 ISZERO PUSH2 0xE60 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 DUP7 LT DUP4 EQ PUSH2 0x7A4 JUMPI DUP6 DUP9 MSTORE DUP8 SWAP5 PUSH1 0x20 DUP7 ADD SWAP4 SWAP1 DUP2 ISZERO PUSH2 0xE41 JUMPI POP PUSH1 0x1 EQ PUSH2 0xDE1 JUMPI JUMPDEST POP POP POP PUSH2 0xDDF SWAP3 POP SUB DUP4 PUSH2 0x467 JUMP JUMPDEST JUMP JUMPDEST SWAP3 POP SWAP4 PUSH2 0xE0F PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 JUMP JUMPDEST SWAP5 PUSH0 SWAP4 JUMPDEST DUP3 DUP6 LT PUSH2 0xE2B JUMPI POP POP POP PUSH2 0xDDF SWAP4 POP ADD PUSH0 DUP1 DUP1 PUSH2 0xDD0 JUMP JUMPDEST DUP7 SLOAD DUP6 DUP6 ADD MSTORE SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 PUSH2 0xE13 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xDDF SWAP5 SWAP2 SWAP3 POP PUSH1 0xFF NOT AND DUP3 MSTORE ISZERO ISZERO PUSH1 0x5 SHL ADD PUSH0 DUP1 DUP1 PUSH2 0xDD0 JUMP JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0xDA9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6AD JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH2 0xE8B JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xED4 JUMPI PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xED4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1DF JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x162 JUMPI MLOAD PUSH2 0x405 DUP2 PUSH2 0x7C2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 SWAP2 PUSH1 0x20 PUSH2 0xDDF SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH2 0x1044 DUP2 MLOAD PUSH2 0xFE3 PUSH2 0xFB3 PUSH2 0x140 SWAP3 DUP4 PUSH1 0x40 DUP13 ADD MSTORE PUSH2 0x180 DUP12 ADD SWAP1 PUSH2 0x166 JUMP JUMPDEST DUP6 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP12 DUP4 SUB DUP2 ADD PUSH1 0x60 DUP14 ADD MSTORE SWAP2 PUSH2 0xFCE SWAP2 PUSH2 0x166 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP7 ADD MLOAD SWAP1 DUP12 DUP4 SUB ADD PUSH1 0x80 DUP13 ADD MSTORE PUSH2 0x166 JUMP JUMPDEST PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xA0 DUP11 ADD MSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0xC0 DUP11 ADD MSTORE SWAP3 PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xE0 DUP11 ADD MSTORE PUSH2 0x1038 PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x100 SWAP4 DUP5 DUP13 ADD MSTORE PUSH1 0xE0 DUP4 ADD MLOAD SWAP4 PUSH2 0x120 SWAP5 DUP6 DUP14 ADD MSTORE DUP4 ADD MLOAD SWAP1 DUP12 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP9 ADD MSTORE JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST SWAP7 SWAP3 SWAP4 SWAP9 SWAP8 SWAP2 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1077 PUSH1 0x40 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND PUSH2 0x118D JUMPI PUSH2 0xDDF SWAP8 PUSH2 0x1140 PUSH2 0x1184 SWAP6 PUSH2 0x1136 DUP5 PUSH2 0x10B5 SWAP12 PUSH2 0x1171 SWAP8 PUSH2 0x10A0 PUSH2 0x117F SWAP9 DUP15 PUSH2 0x1308 JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0xD2E JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x1 DUP2 MSTORE SWAP14 JUMP JUMPDEST DUP3 MLOAD PUSH2 0x111D PUSH1 0x20 DUP6 ADD MLOAD SWAP3 PUSH1 0x40 DUP7 ADD MLOAD SWAP5 PUSH2 0x10E9 PUSH2 0x10E3 PUSH1 0x80 PUSH2 0x10DB PUSH1 0x60 DUP12 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP10 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP10 PUSH2 0x13A0 JUMP JUMPDEST SWAP2 PUSH2 0x10F2 PUSH2 0x489 JUMP JUMPDEST SWAP12 DUP13 MSTORE PUSH1 0x20 DUP13 ADD MSTORE PUSH2 0x1102 PUSH2 0xD8D JUMP JUMPDEST PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x60 DUP12 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH1 0x80 DUP11 ADD MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE JUMP JUMPDEST ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x0 SWAP1 PUSH1 0x20 DUP5 ADD PUSH2 0xF87 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x467 JUMP JUMPDEST PUSH2 0x13CC JUMP JUMPDEST SWAP6 DUP7 SWAP3 DUP4 PUSH2 0x14A0 JUMP JUMPDEST PUSH4 0x187B85D9 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x11CE JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH32 0x0 DUP1 DUP3 ADD SWAP1 DUP2 DUP4 GT PUSH2 0x6AD JUMPI DUP5 MLOAD SWAP3 DUP4 DUP4 ADD SWAP6 DUP7 DUP5 GT PUSH2 0x6AD JUMPI PUSH1 0x20 SWAP3 PUSH1 0x1 DUP5 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP11 DUP3 DUP2 DUP14 ADD ADD PUSH1 0x40 MSTORE DUP12 MSTORE DUP1 PUSH0 DUP4 DUP14 ADD PUSH32 0x0 EXTCODECOPY DUP11 ADD ADD PUSH32 0x0 EXTCODECOPY ADD SWAP2 DUP6 ADD ADD MCOPY JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x12A5 JUMPI JUMP JUMPDEST PUSH4 0x3AC4266D PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x12D7 DUP2 PUSH2 0x437 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x12E7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x12E7 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 MLOAD GT PUSH2 0x1391 JUMPI PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x1370 JUMPI JUMPDEST PUSH2 0x1337 JUMPI PUSH1 0x80 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x1346 JUMPI JUMPDEST POP PUSH2 0x1337 JUMPI JUMP JUMPDEST PUSH4 0xA1E9DD9D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 POP PUSH1 0x20 PUSH2 0x1358 PUSH2 0x135F SWAP3 PUSH2 0xEE6 JUMP JUMPDEST MLOAD ADD PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x1368 DUP2 PUSH2 0x12DD JUMP JUMPDEST EQ ISZERO PUSH0 PUSH2 0x1330 JUMP JUMPDEST POP PUSH1 0x1 PUSH2 0x1381 PUSH1 0x20 PUSH2 0x1358 DUP6 PUSH2 0xED9 JUMP JUMPDEST PUSH2 0x138A DUP2 PUSH2 0x12DD JUMP JUMPDEST EQ ISZERO PUSH2 0x131F JUMP JUMPDEST PUSH4 0xE0F7BEB PUSH1 0xE3 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x13B5 JUMPI AND SWAP1 JUMP JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x54F PUSH2 0x13D9 SWAP2 PUSH2 0x12B4 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1491 JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD PUSH0 CREATE2 SWAP1 RETURNDATASIZE ISZERO NOT DUP3 ISZERO AND PUSH2 0xF7C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1482 JUMPI SWAP3 PUSH2 0x140F PUSH2 0x1299 JUMP JUMPDEST DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x1DF JUMPI DUP1 PUSH1 0x1 PUSH2 0x1449 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0xE9F JUMP JUMPDEST DUP2 SWAP3 SWAP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP2 DUP5 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH4 0xB06EBF3D PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x13289277 PUSH1 0xE2 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP5 SWAP2 SWAP4 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP6 PUSH2 0x14DB PUSH2 0x119C JUMP JUMPDEST SWAP2 DUP8 EXTCODESIZE ISZERO PUSH2 0x162 JUMPI SWAP8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x40 SWAP6 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP9 PUSH4 0xEEEC802F PUSH1 0xE0 SHL DUP11 MSTORE PUSH1 0x4 DUP4 PUSH2 0x1A4 DUP13 ADD SWAP4 AND PUSH1 0x4 DUP13 ADD MSTORE PUSH1 0x24 PUSH2 0x1A0 PUSH1 0x24 DUP14 ADD MSTORE DUP3 MLOAD DUP1 SWAP5 MSTORE PUSH2 0x1C4 DUP13 ADD SWAP11 PUSH1 0x20 DUP1 SWAP5 ADD SWAP6 PUSH0 SWAP4 JUMPDEST DUP7 DUP6 LT PUSH2 0x15FE JUMPI POP POP POP POP POP POP POP POP DUP7 SWAP5 PUSH2 0x15A8 PUSH0 SWAP10 SWAP8 SWAP4 SWAP6 PUSH2 0x1597 DUP9 SWAP7 PUSH2 0x1565 DUP14 SWAP10 PUSH2 0x15DA SWAP8 PUSH1 0x44 DUP12 ADD MSTORE PUSH1 0x64 DUP11 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST DUP9 PUSH1 0x84 DUP10 ADD MSTORE PUSH1 0xA4 DUP9 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x104 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP6 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP5 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x3C0 JUMPI PUSH2 0x15EB JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x15F8 PUSH2 0xDDF SWAP3 PUSH2 0x453 JUMP JUMPDEST DUP1 PUSH2 0x158 JUMP JUMPDEST SWAP2 SWAP4 SWAP6 SWAP8 SWAP9 SWAP10 SWAP11 SWAP12 SWAP13 SWAP1 SWAP3 SWAP5 SWAP7 DUP1 SWAP15 POP MLOAD DUP4 DUP2 MLOAD AND DUP3 MSTORE DUP8 DUP2 ADD MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x165D JUMPI DUP3 DUP10 SWAP3 PUSH1 0x80 SWAP3 DUP5 PUSH1 0x1 SWAP7 ADD MSTORE DUP7 DUP9 DUP3 ADD MLOAD AND DUP9 DUP4 ADD MSTORE PUSH1 0x60 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP15 ADD SWAP6 ADD SWAP3 SWAP1 SWAP2 DUP16 SWAP14 SWAP13 SWAP12 SWAP11 SWAP10 SWAP9 SWAP8 SWAP6 SWAP7 SWAP5 SWAP3 PUSH2 0x152A JUMP JUMPDEST DUP7 PUSH1 0x21 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x162 JUMPI MLOAD PUSH2 0x405 DUP2 PUSH2 0xA70 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBC 0xC0 DUP7 0xBF 0xA8 0xCF 0x22 SWAP12 PUSH16 0x976634E41162488BE79708C6A3A98D6B SWAP7 0x28 0xAE DUP13 0xE3 0x1E 0xE7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1032:3192:59:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;-1:-1:-1;;1032:3192:59;;;;:::o;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;;;5047:28:24;1032:3192:59;;;;;;5047:28:24;:::i;:::-;1032:3192:59;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;-1:-1:-1;;;;;4831:22:24;;1032:3192:59;;;4855:22:24;1032:3192:59;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;1762:20:23;1032:3192:59;1774:7:23;;;1762:20;:::i;:::-;1032:3192:59;;-1:-1:-1;;;1336:22:35;;;;-1:-1:-1;;;;;1032:3192:59;1336:22:35;1032:3192:59;;;1336:6:35;1032:3192:59;;1336:22:35;;;;;;;;:64;:22;1032:3192:59;1336:22:35;;;1032:3192:59;-1:-1:-1;1032:3192:59;;-1:-1:-1;;;1336:64:35;;1032:3192:59;1336:64:35;;1032:3192:59;;;;1820:10:23;1032:3192:59;;;;1394:4:35;1032:3192:59;;;;;;;;;;;;;;;;;1336:64:35;;1032:3192:59;;1336:64:35;;;;;;;1032:3192:59;1336:64:35;;;1032:3192:59;1797:34:23;;;1793:90;;1590:1;;:::i;:::-;1032:3192:59;1793:90:23;1854:18;;;1032:3192:59;1854:18:23;1032:3192:59;;1854:18:23;1336:64:35;;;;;;-1:-1:-1;1336:64:35;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;:::i;:22::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1032:3192:59;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;:::o;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2794:1663:43;;1032:3192:59;;;;;;;;;;;;;:::i;:::-;8721:41:24;4950:23:20;1032:3192:59;;4950:23:20;:::i;:::-;8721:41:24;;:::i;:::-;1032:3192:59;;;;;8809:23:24;2794:1663:43;1032:3192:59;2794:1663:43;;1032:3192:59;2794:1663:43;;;1032:3192:59;2794:1663:43;;;2413:4;2794:1663;;;;;;;;1032:3192:59;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;4203:6:20;;1032:3192:59;4203:6:20;1032:3192:59;4230:15:20;;;;4226:71;;1032:3192:59;;;;;;;;4444:12:20;-1:-1:-1;4440:65:20;;1032:3192:59;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1032:3192:59;;;:::i;:::-;;;;;;;-1:-1:-1;4573:9:20;;;;;;1032:3192:59;;;;;;;:::i;4584:3:20:-;4621:9;4603:28;1032:3192:59;4614:17:20;4621:9;;;;;:::i;:::-;4614:17;:::i;:::-;1032:3192:59;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;4603:28:20;;;;:::i;:::-;1032:3192:59;-1:-1:-1;;;;;1032:3192:59;;;;4603:28:20;1032:3192:59;4558:13:20;;4440:65;1032:3192:59;;;;-1:-1:-1;1032:3192:59;;;;4440:65:20;;;1032:3192:59;;:::i;4226:71:20:-;4268:18;;;-1:-1:-1;4268:18:20;1032:3192:59;-1:-1:-1;4268:18:20;1032:3192:59;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;991:8:30;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;991:8:30;1032:3192:59;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;-1:-1:-1;;;1032:3192:59;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;-1:-1:-1;;;1032:3192:59;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;:::o;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;-1:-1:-1;;;;;1032:3192:59;;;;;:::i;:::-;;-1:-1:-1;1032:3192:59;-1:-1:-1;1032:3192:59;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;4018:6:20;1032:3192:59;4018:6:20;1032:3192:59;;;;;;;;;;4018:6:20;1032:3192:59;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;4757:9:20;1032:3192:59;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;2073:20:27;1032:3192:59;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;1774:7:23;1032:3192:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;-1:-1:-1;;;;;1124:6:35;1032:3192:59;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;3877:6:20;1032:3192:59;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;-1:-1:-1;;;1424:26:36;;-1:-1:-1;;;;;1424:26:36;1032:3192:59;;;1124:6:35;1032:3192:59;;1424:26:36;;;;;;;;;1032:3192:59;1424:26:36;;;1032:3192:59;;;;;;;;;1424:26:36;;;;;;;;;;;;;;;:::i;:::-;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;2369:24:27;1032:3192:59;;;;;;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;:::o;5090:134:20:-;;;:::i;:::-;5180:4;1032:3192:59;;5168:16:20;1032:3192:59;;;5168:16:20;1032:3192:59;5200:17:20;1032:3192:59;5200:17:20;;5090:134::o;1032:3192:59:-;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;4203:6:20;1032:3192:59;;;;;;4203:6:20;-1:-1:-1;1032:3192:59;;;;-1:-1:-1;1032:3192:59;:::o;:::-;;:::i;:::-;;;;;;;;;:::o;:::-;;;2058:1:62;1032:3192:59;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;1931:430:23:-;1032:3192:59;;2303:50:23;;;2320:22;;1032:3192:59;;1774:7:23;;;1032:3192:59;;;;;2303:50:23;;;1032:3192:59;;;;;;;;;;;;;;;2293:61:23;;1931:430;:::o;1032:3192:59:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1032:3192:59;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;2391:1831;;;;;;;;-1:-1:-1;;;;;1032:3192:59;2781:24;;;1032:3192;-1:-1:-1;;;;;1032:3192:59;;;;;2777:101;;4186:19;2938:11;3223:657;3174:776;2938:11;3223:657;2938:11;3103:53;2938:11;3195:727;2938:11;;3195:727;2938:11;;;:::i;:::-;1032:3192;;:::i;:::-;2817:1;3051:34;;;1032:3192;3152:4;1032:3192;;3051:34;1032:3192;3103:53;1032:3192;;3223:657;3457:27;;;1032:3192;3526:30;2781:24;3526:30;;1032:3192;3603:35;3832:29;1032:3192;3685:35;1032:3192;3051:34;3603:35;;1032:3192;;;;;;3685:35;;1032:3192;;;;;;3832:29;;:::i;:::-;1032:3192;;;:::i;:::-;;;;3457:27;3223:657;;1032:3192;;;:::i;:::-;2781:24;3223:657;;1032:3192;3051:34;3223:657;;1032:3192;;;3685:35;3223:657;;1032:3192;;3223:657;;;;1032:3192;3223:657;;;1032:3192;3223:657;;;1032:3192;;;3223:657;;;1032:3192;;3223:657;1032:3192;;3223:657;;;1032:3192;;3223:657;2781:24;1032:3192;1124:6:35;;;;3195:727:59;3457:27;3195:727;;;:::i;:::-;;1032:3192;;3195:727;;;;;;:::i;:::-;3174:776;:::i;:::-;4186:19;;;;;:::i;2777:101::-;2842:25;;;2817:1;2842:25;;2817:1;2842:25;2922:332:27;3191:24;1032:3192:59;;;3173:15:27;:42;1032:3192:59;;;2922:332:27;:::o;3172:75::-;;-1:-1:-1;2922:332:27;:::o;5212:2879:24:-;;6220:18;6340;1032:3192:59;;;;;;;;;;;;;;;;;;;;;6574:844:24;;;;;;;;;;;;;;;;;;;-1:-1:-1;6574:844:24;;;6160:22;6574:844;;;;6280:22;6574:844;7730:162;;;;;7958:127;5212:2879::o;5230:116:20:-;1032:3192:59;4757:9:20;1032:3192:59;;5280:60:20;;5230:116::o;5280:60::-;5319:10;;;-1:-1:-1;5319:10:20;;-1:-1:-1;5319:10:20;5884:159;1032:3192:59;;5992:43:20;;;6003:10;;1032:3192:59;;6015:13:20;1032:3192:59;;;;;;;;;5992:43:20;;;;;:::i;:::-;1032:3192:59;5982:54:20;;5884:159;:::o;1032:3192:59:-;;-1:-1:-1;1032:3192:59;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;1588:576:62:-;;1780:1;1032:3192:59;;1764:17:62;1760:79;;1853:35;;;1032:3192:59;;;1853:81:62;;;1588:576;1849:150;;2012:35;;1032:3192:59;;;2012:81:62;;;;1588:576;2008:150;;;1588:576::o;2008:150::-;1957:31;;;2116;;;;;2012:81;2058:1;2051:9;;:19;:9;:19;:9;;:::i;:::-;;:19;;:::i;:::-;1032:3192:59;;;:::i;:::-;2051:42:62;;2012:81;;;1853;1892:9;1915:19;1892;;:9;;;:::i;:19::-;1032:3192:59;;;:::i;:::-;1892:42:62;;1853:81;;1760:79;1804:24;;;;;;;;13296:213:56;1032:3192:59;13374:24:56;;;;13370:103;;1032:3192:59;13296:213:56;:::o;13370:103::-;13421:41;;;;;13452:2;13421:41;1032:3192:59;;;;13421:41:56;;6049:247:20;;6172:23;8467:41:24;6049:247:20;6172:23;:::i;8467:41:24:-;1032:3192:59;;1459:20:43;1455:80;;1544:417;;;;;-1:-1:-1;1544:417:43;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;1974:18:43;;;1970:81;;5352:200:20;;;:::i;:::-;1032:3192:59;-1:-1:-1;1032:3192:59;-1:-1:-1;1544:417:43;1032:3192:59;;-1:-1:-1;1032:3192:59;5481:4:20;1032:3192:59;;;;;;;;5481:4:20;1032:3192:59;;;;;;;;5481:4:20;1032:3192:59;;;5481:4:20;1032:3192:59;;:::i;:::-;;;;;;;;;;;;;;;;;;;5528:17:20;-1:-1:-1;5528:17:20;;6049:247::o;1970:81:43:-;2015:25;;;-1:-1:-1;2015:25:43;;-1:-1:-1;2015:25:43;1455:80;1502:22;;;-1:-1:-1;1502:22:43;;-1:-1:-1;1502:22:43;6302:594:20;;;;;;;-1:-1:-1;;;;;1124:6:35;;;1032:3192:59;6728:30:20;;;:::i;:::-;6622:267;;;;;;1032:3192:59;;;;;;;;;;;;;;;;;6622:267:20;;;1032:3192:59;;;;;;6622:267:20;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;2817:1;1032:3192;;;;;;;;;;;;;;;;;;2817:1;1032:3192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1032:3192:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6622:267:20;;;;;;;;;;6302:594;:::o;6622:267::-;;;;;;:::i;:::-;;;:::i;1032:3192:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2817:1;1032:3192;;2817:1;1032:3192;;;;;;;;;;;;;;:::i"},"methodIdentifiers":{"create(string,string,(address,uint8,address,bool)[],(address,address,address),uint256,(uint256,uint256,uint256,bool,bool),uint256,uint256,bytes32)":"b3595be0","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getCreationCode()":"00c194db","getCreationCodeContracts()":"174481fa","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPoolVersion()":"3f819b6f","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CodeDeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokens\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"initialMinPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMaxPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTargetPrice\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"tokenAPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"tokenBPriceIncludesRate\",\"type\":\"bool\"}],\"internalType\":\"struct ReClammPriceParams\",\"name\":\"priceParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"VaultNotSet()\":[{\"details\":\"Vault cannot be address(0).\"}]},\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"create(string,string,(address,uint8,address,bool)[],(address,address,address),uint256,(uint256,uint256,uint256,bool,bool),uint256,uint256,bytes32)\":{\"params\":{\"centerednessMargin\":\"How far the price can be from the center before the price range starts to move\",\"dailyPriceShiftExponent\":\"Virtual balances will change by 2^(dailyPriceShiftExponent) per day\",\"name\":\"The name of the pool\",\"priceParams\":\"Initial min, max and target prices; flags indicating whether token prices incorporate rates\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"salt\":\"The salt value that will be passed to deployment\",\"swapFeePercentage\":\"Initial swap fee percentage\",\"symbol\":\"The symbol of the pool\",\"tokens\":\"An array of descriptors for the tokens the pool will manage\"}},\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract created by this factory is stored.\"},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"_0\":\"A string representation of the pool version\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"create(string,string,(address,uint8,address,bool)[],(address,address,address),uint256,(uint256,uint256,uint256,bool,bool),uint256,uint256,bytes32)\":{\"notice\":\"Deploys a new `ReClammPool`.\"},\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"ReClammPool factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ReClammPoolFactory.sol\":\"ReClammPoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0xf8557bcfefe95c0164faf3e840552d7e07899116e18ee58894acef85eb90d0ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://effbe33d58fcf3128cf1d861789f7032913a2054946391e8b2766bf02688ab76\",\"dweb:/ipfs/QmYrejbXfKNbN1bUWQPoneRgfnkn3r574i7jJ7rTb8XewE\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0xd92ad66da6036962f4b4ddd054a389ba65f1d64ed540c0c210bc42de3e44e435\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://755bc7bbf7e16f272bcbfd5212dcd8e6371431973b17b96370839ca230a761db\",\"dweb:/ipfs/QmaiYCXVqZriea8tbJFjJQbx1kSA5arRQhqyv1F9CMzCQo\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-pool-weighted/contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xd0a69d3c1a5711de402c56714381b9c2382e2b8c9036365107c33fdb612a1f9c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3cbe86c3e7d8a45a114528c4eae13a26d660e31bbf1483e2f687364b07859924\",\"dweb:/ipfs/QmWTqLX6azYtUaD4PRobczB8Khig1tc51JmgGtdMckVUhm\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0x2520a18de2423ccd618a6ac00cbb4d97637856c5dd9fc68af5e95e2b42013adc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e1d762d46a94a7028c19ebe688a152ed8ff9f55d76a5d347c080b7ddf5fe891e\",\"dweb:/ipfs/QmPaR4HYhHkUGiL5SV4QyjvfmauEUwDVAAHa7wFAW2uviB\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x58297dc76e77a5427fe2a527d616e4bee048770fde8205ab8928b119925b1449\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5b24fd7b82652d7e53b5d06d834dedcc2ce0d972568c8bdf299c43defa7c9145\",\"dweb:/ipfs/QmRfSzPyVNajcjjcLyvw2hSCMhUMu1SCCEsYCf8G4xPGM9\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@balancer-labs/v3-vault/contracts/CommonAuthentication.sol\":{\"keccak256\":\"0xd984e8b7ed65caa625fbbfd7f46c80f253e698b3b5ce42e95269eb291f868f1b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a17f25be1c4fa7b9331a25eda35ae5478e2deccd93c77bd201666cfbc92a7f2d\",\"dweb:/ipfs/QmUhzffpTrQQWAgEADuukaM8PC48kKvSae93dBhCV1EH3i\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x3a1f98316c5f245ff0fc29f496fdaa36c44baa3d72fd300bb506b9758245ee2c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13b7c348e2dc88ef28dcfbe48c8bae0c938cac1f094f3ddca63aea062a457146\",\"dweb:/ipfs/QmPpFJUrsYaehBecfdHLNPcYeWZrcdbd8dBwLQWRtr3HUf\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x27dbc90e5136ffe46c04f7596fc2dbcc3acebd8d504da3d93fdb8496e6de04f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea8b92e4245d75a5579c10f22f118f7b4ba07c57341f181f0b2a85ff8663de3\",\"dweb:/ipfs/Qme3Ss5ByjmkxxkMdLpyu7fQ1PCtjNFH1wEFszt2BZePiG\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0xbb7e8401583d26268ea9103013bcdcd90866a7718bd91105ebd21c9bf11f4f06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://866a11ad89c93ee918078f7a46ae31e17d89216ce64603f0d34be7ed0a5c520e\",\"dweb:/ipfs/QmW3ckLEJg2v2NzuVLNJFmRuerGSipw6Dzg6ntbmqbAGoC\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x7d94fa0af099a2172eb01f9c8a8a443cbe7e0e43654841563e4e09968efdb549\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65e38fb76b6add407d4557753ae83dd1268e8261195dbe5c19a580d5ba6e4e9a\",\"dweb:/ipfs/QmTkGSJtaQrqjcyWM4AgemeEmKgtDydKPPVRajsUJRQSrK\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x10eb97d047f8d84fe263a02bb4a656ac6674f6679d74532cc37546289e073a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e41287d40b0c46982f1083d40d32de2761f009c5c51627fe79a7feb0ab1cf5c\",\"dweb:/ipfs/Qme7dbh6HX3ZvUJdbQAcVqXkmyXyfcLiUZRhhon3cU6K8p\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x4515543bc4c78561f6bea83ecfdfc3dead55bd59858287d682045b11de1ae575\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://60601f91440125727244fffd2ba84da7caafecaae0fd887c7ccfec678e02b61e\",\"dweb:/ipfs/QmZnKPBtVDiQS9Dp8gZ4sa3ZeTrWVfqF7yuUd6Y8hwm1Rs\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/ReClammPool.sol\":{\"keccak256\":\"0x9cb2ab272d7127917364cf925809738248bcb7b71eddf69f4983f4d8d783ff95\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b31c5e41f657a2fe6a8b579bb3660f21bf672687dc29b2a4ff290d50f61abd9c\",\"dweb:/ipfs/Qmbe98CdD9esU8Td1oKtv4XZ8GszVxHd7NVqJS2aZjrgBN\"]},\"contracts/ReClammPoolFactory.sol\":{\"keccak256\":\"0xba74853c27691d5a81f40fadceeb8251a2bdfb1cad827002d5cdf50ac224f8df\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61404f51cddabd22b3a57714f4dacd65eda4f6fbe9d8beaa7ff630c2c358cd4d\",\"dweb:/ipfs/QmUx9VjpHcHtZhFRWLNinXoEeWq7hk1yfTFMCERcVSBLKt\"]},\"contracts/interfaces/IReClammPool.sol\":{\"keccak256\":\"0x54a0dbf40078c94f40f3c0385790edfa8d25ef70125c856da1ff57261f59a10a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ecdebb566e4f59671b1275cbc9669582dc7a797832ccc0b038f4b3de54f0799\",\"dweb:/ipfs/QmbphvcdRmqbqQRnpuEokSQ3GJKX3XZ1Pp2R6yQUBd6aMS\"]},\"contracts/lib/ReClammMath.sol\":{\"keccak256\":\"0x57f520fcdaa5baab20bb9e9e8220e5a22ba1d5580ea35134ab2db6eb4cbb195c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8306a99b53f4d3b78b45b79ec240b1774499afd75be388cb44c8184216ac7d66\",\"dweb:/ipfs/QmedHs4j4hBU6hrRa7RkRsRxqXP7Dt55gNPDzMKWZydoHm\"]},\"contracts/lib/ReClammPoolFactoryLib.sol\":{\"keccak256\":\"0x457a839eabdcec23b0db69f66001b9cfb8ef85150d38cf52125096b8998e2e4f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://19059fb659260146b22cd3c13e71832a0fd7a8c073aac76f057adfe1bfb1d50b\",\"dweb:/ipfs/QmbxHi6Z2GZu7rYnErj5dxEeViKmS4zP6JEcefbTwZwWCj\"]}},\"version\":1}"}},"contracts/interfaces/IReClammPool.sol":{"IReClammPool":{"abi":[{"inputs":[],"name":"BalanceRatioExceedsTolerance","type":"error"},{"inputs":[],"name":"DailyPriceShiftExponentTooHigh","type":"error"},{"inputs":[],"name":"InvalidCenterednessMargin","type":"error"},{"inputs":[],"name":"InvalidInitialPrice","type":"error"},{"inputs":[],"name":"InvalidStartTime","type":"error"},{"inputs":[],"name":"NotImplemented","type":"error"},{"inputs":[],"name":"PoolNotInitialized","type":"error"},{"inputs":[],"name":"PoolOutsideTargetRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"fourthRootPriceRatioDelta","type":"uint256"}],"name":"PriceRatioDeltaBelowMin","type":"error"},{"inputs":[],"name":"PriceRatioNotUpdating","type":"error"},{"inputs":[],"name":"PriceRatioUpdateDurationTooShort","type":"error"},{"inputs":[],"name":"PriceRatioUpdateTooFast","type":"error"},{"inputs":[],"name":"ReClammPoolBptRateUnsupported","type":"error"},{"inputs":[],"name":"VaultIsNotLocked","type":"error"},{"inputs":[],"name":"WrongInitializationPrices","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"centerednessMargin","type":"uint256"}],"name":"CenterednessMarginUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dailyPriceShiftBase","type":"uint256"}],"name":"DailyPriceShiftExponentUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"lastTimestamp","type":"uint32"}],"name":"LastTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startFourthRootPriceRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endFourthRootPriceRatio","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceRatioUpdateStartTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceRatioUpdateEndTime","type":"uint256"}],"name":"PriceRatioStateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"virtualBalanceA","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"virtualBalanceB","type":"uint256"}],"name":"VirtualBalancesUpdated","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentFourthRootPriceRatio","outputs":[{"internalType":"uint256","name":"currentFourthRootPriceRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPoolCenteredness","outputs":[{"internalType":"uint256","name":"poolCenteredness","type":"uint256"},{"internalType":"bool","name":"isPoolAboveCenter","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPriceRange","outputs":[{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentPriceRatio","outputs":[{"internalType":"uint256","name":"currentPriceRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentSpotPrice","outputs":[{"internalType":"uint256","name":"currentTargetPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"computeCurrentVirtualBalances","outputs":[{"internalType":"uint256","name":"currentVirtualBalanceA","type":"uint256"},{"internalType":"uint256","name":"currentVirtualBalanceB","type":"uint256"},{"internalType":"bool","name":"changed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"referenceToken","type":"address"},{"internalType":"uint256","name":"referenceAmountInRaw","type":"uint256"}],"name":"computeInitialBalancesRaw","outputs":[{"internalType":"uint256[]","name":"initialBalancesRaw","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCenterednessMargin","outputs":[{"internalType":"uint256","name":"centerednessMargin","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDailyPriceShiftBase","outputs":[{"internalType":"uint256","name":"dailyPriceShiftBase","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDailyPriceShiftExponent","outputs":[{"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastTimestamp","outputs":[{"internalType":"uint32","name":"lastTimestamp","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastVirtualBalances","outputs":[{"internalType":"uint256","name":"lastVirtualBalanceA","type":"uint256"},{"internalType":"uint256","name":"lastVirtualBalanceB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceRatioState","outputs":[{"components":[{"internalType":"uint96","name":"startFourthRootPriceRatio","type":"uint96"},{"internalType":"uint96","name":"endFourthRootPriceRatio","type":"uint96"},{"internalType":"uint32","name":"priceRatioUpdateStartTime","type":"uint32"},{"internalType":"uint32","name":"priceRatioUpdateEndTime","type":"uint32"}],"internalType":"struct PriceRatioState","name":"priceRatioState","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReClammPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"lastTimestamp","type":"uint256"},{"internalType":"uint256[]","name":"lastVirtualBalances","type":"uint256[]"},{"internalType":"uint256","name":"dailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"dailyPriceShiftBase","type":"uint256"},{"internalType":"uint256","name":"centerednessMargin","type":"uint256"},{"internalType":"uint256","name":"currentPriceRatio","type":"uint256"},{"internalType":"uint256","name":"currentFourthRootPriceRatio","type":"uint256"},{"internalType":"uint256","name":"startFourthRootPriceRatio","type":"uint256"},{"internalType":"uint256","name":"endFourthRootPriceRatio","type":"uint256"},{"internalType":"uint32","name":"priceRatioUpdateStartTime","type":"uint32"},{"internalType":"uint32","name":"priceRatioUpdateEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct ReClammPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReClammPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"bool","name":"tokenAPriceIncludesRate","type":"bool"},{"internalType":"bool","name":"tokenBPriceIncludesRate","type":"bool"},{"internalType":"uint256","name":"minSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"maxSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"initialMinPrice","type":"uint256"},{"internalType":"uint256","name":"initialMaxPrice","type":"uint256"},{"internalType":"uint256","name":"initialTargetPrice","type":"uint256"},{"internalType":"uint256","name":"initialDailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"initialCenterednessMargin","type":"uint256"},{"internalType":"uint256","name":"maxDailyPriceShiftExponent","type":"uint256"},{"internalType":"uint256","name":"maxDailyPriceRatioUpdateRate","type":"uint256"},{"internalType":"uint256","name":"minPriceRatioUpdateDuration","type":"uint256"},{"internalType":"uint256","name":"minPriceRatioDelta","type":"uint256"},{"internalType":"uint256","name":"balanceRatioAndPriceTolerance","type":"uint256"}],"internalType":"struct ReClammPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolWithinTargetRange","outputs":[{"internalType":"bool","name":"isWithinTargetRange","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPoolWithinTargetRangeUsingCurrentVirtualBalances","outputs":[{"internalType":"bool","name":"isWithinTargetRange","type":"bool"},{"internalType":"bool","name":"virtualBalancesChanged","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCenterednessMargin","type":"uint256"}],"name":"setCenterednessMargin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDailyPriceShiftExponent","type":"uint256"}],"name":"setDailyPriceShiftExponent","outputs":[{"internalType":"uint256","name":"actualNewDailyPriceShiftExponent","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"endPriceRatio","type":"uint256"},{"internalType":"uint256","name":"priceRatioUpdateStartTime","type":"uint256"},{"internalType":"uint256","name":"priceRatioUpdateEndTime","type":"uint256"}],"name":"startPriceRatioUpdate","outputs":[{"internalType":"uint256","name":"actualPriceRatioUpdateStartTime","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPriceRatioUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeCurrentFourthRootPriceRatio()":"569ee350","computeCurrentPoolCenteredness()":"cd80a1af","computeCurrentPriceRange()":"84254cf9","computeCurrentPriceRatio()":"a103b044","computeCurrentSpotPrice()":"c0209f1d","computeCurrentVirtualBalances()":"4f149b3f","computeInitialBalancesRaw(address,uint256)":"e45801da","computeInvariant(uint256[],uint8)":"984de9e8","getCenterednessMargin()":"1d8a5e7e","getDailyPriceShiftBase()":"215666a8","getDailyPriceShiftExponent()":"4efd88c9","getLastTimestamp()":"37899770","getLastVirtualBalances()":"105ae7ad","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getPriceRatioState()":"6bd838c7","getReClammPoolDynamicData()":"2c357688","getReClammPoolImmutableData()":"7f118b90","isPoolWithinTargetRange()":"dfba3818","isPoolWithinTargetRangeUsingCurrentVirtualBalances()":"c480b9e6","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","setCenterednessMargin(uint256)":"0673d09a","setDailyPriceShiftExponent(uint256)":"c66dbc4b","startPriceRatioUpdate(uint256,uint256,uint256)":"a6d2e718","stopPriceRatioUpdate()":"d4a5b63a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceRatioExceedsTolerance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DailyPriceShiftExponentTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCenterednessMargin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialPrice\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStartTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolOutsideTargetRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fourthRootPriceRatioDelta\",\"type\":\"uint256\"}],\"name\":\"PriceRatioDeltaBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioNotUpdating\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioUpdateDurationTooShort\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PriceRatioUpdateTooFast\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReClammPoolBptRateUnsupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongInitializationPrices\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"}],\"name\":\"CenterednessMarginUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftBase\",\"type\":\"uint256\"}],\"name\":\"DailyPriceShiftExponentUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"lastTimestamp\",\"type\":\"uint32\"}],\"name\":\"LastTimestampUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint256\"}],\"name\":\"PriceRatioStateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"virtualBalanceA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"virtualBalanceB\",\"type\":\"uint256\"}],\"name\":\"VirtualBalancesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentFourthRootPriceRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentFourthRootPriceRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPoolCenteredness\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCenteredness\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolAboveCenter\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPriceRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentPriceRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentPriceRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentSpotPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentTargetPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeCurrentVirtualBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentVirtualBalanceA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentVirtualBalanceB\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"changed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"referenceToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"referenceAmountInRaw\",\"type\":\"uint256\"}],\"name\":\"computeInitialBalancesRaw\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"initialBalancesRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCenterednessMargin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDailyPriceShiftBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftBase\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDailyPriceShiftExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastTimestamp\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"lastTimestamp\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastVirtualBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastVirtualBalanceA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastVirtualBalanceB\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceRatioState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint32\"}],\"internalType\":\"struct PriceRatioState\",\"name\":\"priceRatioState\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReClammPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"lastVirtualBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dailyPriceShiftBase\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"centerednessMargin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endFourthRootPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct ReClammPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReClammPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"tokenAPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"tokenBPriceIncludesRate\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"minSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMinPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialMaxPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialTargetPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialDailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialCenterednessMargin\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDailyPriceShiftExponent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDailyPriceRatioUpdateRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minPriceRatioUpdateDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minPriceRatioDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceRatioAndPriceTolerance\",\"type\":\"uint256\"}],\"internalType\":\"struct ReClammPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPoolWithinTargetRange\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isWithinTargetRange\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPoolWithinTargetRangeUsingCurrentVirtualBalances\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isWithinTargetRange\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"virtualBalancesChanged\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newCenterednessMargin\",\"type\":\"uint256\"}],\"name\":\"setCenterednessMargin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDailyPriceShiftExponent\",\"type\":\"uint256\"}],\"name\":\"setDailyPriceShiftExponent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"actualNewDailyPriceShiftExponent\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"endPriceRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"priceRatioUpdateEndTime\",\"type\":\"uint256\"}],\"name\":\"startPriceRatioUpdate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"actualPriceRatioUpdateStartTime\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopPriceRatioUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"BalanceRatioExceedsTolerance()\":[{\"details\":\"On pool creation, a theoretical balance ratio is computed from the min, max, and target prices. During initialization, the actual balance ratio is compared to this theoretical value, and must fall within a fixed, symmetrical tolerance range, or initialization reverts. If it were outside this range, the initial price would diverge too far from the target price, and the pool would be vulnerable to arbitrage.\"}],\"PoolNotInitialized()\":[{\"details\":\"Function called before initializing the pool.\"}],\"PriceRatioDeltaBelowMin(uint256)\":[{\"details\":\"The price ratio being set is too close to the current one.\"}],\"PriceRatioNotUpdating()\":[{\"details\":\"An attempt was made to stop the price ratio update while no update was in progress.\"}],\"ReClammPoolBptRateUnsupported()\":[{\"details\":\"ReClamm Pools should never be nested. This is because the invariant of the pool is only used to calculate swaps. When tracking the market price or shrinking or expanding the liquidity concentration, the invariant can can decrease or increase independent of the balances, which makes the BPT rate meaningless.\"}]},\"events\":{\"CenterednessMarginUpdated(uint256)\":{\"details\":\"This will be emitted on deployment, and when changed by governance or the swap manager.\",\"params\":{\"centerednessMargin\":\"The new centeredness margin\"}},\"DailyPriceShiftExponentUpdated(uint256,uint256)\":{\"details\":\"This will be emitted on deployment, and when changed by governance or the swap manager.\",\"params\":{\"dailyPriceShiftBase\":\"Internal time constant used to update virtual balances (1 - tau)\",\"dailyPriceShiftExponent\":\"The new daily price shift exponent\"}},\"LastTimestampUpdated(uint32)\":{\"details\":\"This is emitted on every swap or liquidity operation.\",\"params\":{\"lastTimestamp\":\"The timestamp of the operation\"}},\"PriceRatioStateUpdated(uint256,uint256,uint256,uint256)\":{\"details\":\"This event will be emitted on initialization, and when governance initiates a price ratio update.\",\"params\":{\"endFourthRootPriceRatio\":\"The fourth root price ratio at the end of an update\",\"priceRatioUpdateEndTime\":\"The timestamp when the update ends\",\"priceRatioUpdateStartTime\":\"The timestamp when the update begins\",\"startFourthRootPriceRatio\":\"The fourth root price ratio at the start of an update\"}},\"VirtualBalancesUpdated(uint256,uint256)\":{\"details\":\"Unless the price range is changing, the virtual balances remain in proportion to the real balances. These balances will also be updated when the centeredness margin or daily price shift exponent is changed.\",\"params\":{\"virtualBalanceA\":\"Offset to the real balance reserves\",\"virtualBalanceB\":\"Offset to the real balance reserves\"}}},\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeCurrentFourthRootPriceRatio()\":{\"details\":\"The price ratio is the ratio of the max price to the min price, according to current real and virtual balances. This function returns its fourth root.\",\"returns\":{\"currentFourthRootPriceRatio\":\"The current fourth root of price ratio\"}},\"computeCurrentPoolCenteredness()\":{\"details\":\"A value of 0 means the pool is at the edge of the price range (i.e., one of the real balances is zero). A value of FixedPoint.ONE means the balances (and market price) are exactly in the middle of the range. The centeredness margin is affected by the current live balances, so manipulating the result of this function is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"isPoolAboveCenter\":\"True if the pool is above the center, false otherwise\",\"poolCenteredness\":\"The current centeredness margin (as a 18-decimal FP value)\"}},\"computeCurrentPriceRange()\":{\"details\":\"Prices represent the value of token A denominated in token B (i.e., how many B tokens equal the value of one A token). The \\\"target\\\" range is then defined as a subset of this total price range, with the margin trimmed symmetrically from each side. The pool endeavors to adjust this range as necessary to keep the current market price within it. The computation involves the current live balances (though it should not be sensitive to them), so manipulating the result of this function is theoretically possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"maxPrice\":\"The upper limit of the current total price range\",\"minPrice\":\"The lower limit of the current total price range\"}},\"computeCurrentPriceRatio()\":{\"details\":\"The price ratio is the ratio of the max price to the min price, according to current real and virtual balances.\",\"returns\":{\"currentPriceRatio\":\"The current price ratio\"}},\"computeCurrentSpotPrice()\":{\"details\":\"Given the nature of the internal pool maths (particularly when virtual balances are shifting), it is not recommended to use this pool as a price oracle.\",\"returns\":{\"currentTargetPrice\":\"Target price at the current pool state (real and virtual balances)\"}},\"computeCurrentVirtualBalances()\":{\"details\":\"The current virtual balances are calculated based on the last virtual balances. If the pool is within the target range and the price ratio is not updating, the virtual balances will not change. If the pool is outside the target range, or the price ratio is updating, this function will calculate the new virtual balances based on the timestamp of the last user interaction. Note that virtual balances are always scaled18 values. Current virtual balances might change as a result of an operation, manipulating the value to some degree. Ensure that the vault is locked before calling this function if this side effect is undesired.\",\"returns\":{\"changed\":\"Whether the current virtual balances are different from `lastVirtualBalances`\",\"currentVirtualBalanceA\":\"The current virtual balance of token A\",\"currentVirtualBalanceB\":\"The current virtual balance of token B\"}},\"computeInitialBalancesRaw(address,uint256)\":{\"details\":\"Convenience function to compute the initial funding amount for the second token, given the first. It returns the amount of tokens in raw amounts, which can be used as-is to initialize the pool using a standard router.\",\"params\":{\"referenceAmountInRaw\":\"The amount of the reference token to be used for initialization, in raw amounts\",\"referenceToken\":\"The token whose amount is known\"},\"returns\":{\"initialBalancesRaw\":\"Initialization raw balances sorted in token registration order, including the given amount and a calculated raw amount for the other token\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getCenterednessMargin()\":{\"details\":\"The centeredness margin defines how closely an unbalanced pool can approach the limits of the total price range and still be considered within the target range. The margin is symmetrical. If it's 20%, the target range is defined as >= 20% above the lower bound and <= 20% below the upper bound.\",\"returns\":{\"centerednessMargin\":\"The current centeredness margin\"}},\"getDailyPriceShiftBase()\":{\"details\":\"Equals dailyPriceShiftExponent / _PRICE_SHIFT_EXPONENT_INTERNAL_ADJUSTMENT.\",\"returns\":{\"dailyPriceShiftBase\":\"The internal representation for the daily price shift exponent\"}},\"getDailyPriceShiftExponent()\":{\"details\":\"At 100% (FixedPoint.ONE), the price range doubles (or halves) within a day.\",\"returns\":{\"dailyPriceShiftExponent\":\"The daily price shift exponent\"}},\"getLastTimestamp()\":{\"returns\":{\"lastTimestamp\":\"The timestamp of the operation\"}},\"getLastVirtualBalances()\":{\"returns\":{\"lastVirtualBalanceA\":\" The last virtual balance of token A\",\"lastVirtualBalanceB\":\" The last virtual balance of token B\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"getPriceRatioState()\":{\"details\":\"This includes start and end values for the fourth root price ratio, and start and end times for the update.\",\"returns\":{\"priceRatioState\":\"The current price ratio state\"}},\"getReClammPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic ReClamm pool parameters\"}},\"getReClammPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable ReClamm pool parameters\"}},\"isPoolWithinTargetRange()\":{\"details\":\"The pool is considered to be in the target range when the centeredness is greater than or equal to the centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness margin). Note that this function reports the state *after* the last operation. It is not very meaningful during or outside an operation, as the current or next operation could change it. If this is unlikely (e.g., for high- liquidity pools with high centeredness and small swaps), it may nonetheless be useful for some applications, such as off-chain indicators. The state depends on the current balances and centeredness margin, and it uses the *last* virtual balances in the calculation. This is fine because the real balances can only change during an operation, and the margin can only change through the permissioned setter - both of which update the virtual balances. So it is not possible for the current and last virtual balances to get out-of-sync. The range calculation is affected by the current live balances, so manipulating the result of this function is possible while the Vault is unlocked. Ensure that the Vault is locked before calling this function if this side effect is undesired (does not apply to off-chain calls).\",\"returns\":{\"isWithinTargetRange\":\"True if pool centeredness is greater than or equal to the centeredness margin\"}},\"isPoolWithinTargetRangeUsingCurrentVirtualBalances()\":{\"details\":\"The pool is considered to be in the target range when the centeredness is greater than the centeredness margin (i.e., the price is within the subset of the total price range defined by the centeredness margin.) This function is identical to `isPoolWithinTargetRange` above, except that it recomputes and uses the current instead of the last virtual balances. As noted above, these should normally give the same result.\",\"returns\":{\"isWithinTargetRange\":\"True if pool centeredness is greater than the centeredness margin\",\"virtualBalancesChanged\":\"True if the current virtual balances would not match the last virtual balances\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}},\"setCenterednessMargin(uint256)\":{\"details\":\"This function is considered a user action, so it will update the last timestamp and virtual balances. This is a permissioned function.\",\"params\":{\"newCenterednessMargin\":\"The new centeredness margin\"}},\"setDailyPriceShiftExponent(uint256)\":{\"details\":\"This function is considered a user interaction, and therefore recalculates the virtual balances and sets the last timestamp. This is a permissioned function. A percentage of 100% will make the price range double (or halve) within a day. A percentage of 200% will make the price range quadruple (or quartered) within a day. More generically, the new price range will be either Range_old * 2^(newDailyPriceShiftExponent / 100), or Range_old / 2^(newDailyPriceShiftExponent / 100)\",\"params\":{\"newDailyPriceShiftExponent\":\"The new daily price shift exponent\"},\"returns\":{\"actualNewDailyPriceShiftExponent\":\"The actual new daily price shift exponent, after accounting for precision loss incurred when dealing with the internal representation of the exponent\"}},\"startPriceRatioUpdate(uint256,uint256,uint256)\":{\"details\":\"The price ratio is calculated by interpolating between the start and end times. The start price ratio will be set to the current fourth root price ratio of the pool. This is a permissioned function.\",\"params\":{\"endPriceRatio\":\"The new ending value of the price ratio, as a floating point value (e.g., 8 = 8e18)\",\"priceRatioUpdateEndTime\":\"The timestamp when the price ratio update will end\",\"priceRatioUpdateStartTime\":\"The timestamp when the price ratio update will start\"},\"returns\":{\"actualPriceRatioUpdateStartTime\":\"The actual start time for the price ratio update (min: block.timestamp).\"}},\"stopPriceRatioUpdate()\":{\"details\":\"The price ratio is calculated by interpolating between the start and end times. The new end price ratio will be set to the current one at the current timestamp, effectively pausing the update. This is a permissioned function.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceRatioExceedsTolerance()\":[{\"notice\":\"The initial balances of the ReClamm Pool must respect the initialization ratio bounds.\"}],\"DailyPriceShiftExponentTooHigh()\":[{\"notice\":\"The daily price shift exponent is too high.\"}],\"InvalidCenterednessMargin()\":[{\"notice\":\"The centeredness margin is above 100% (Fixed point 1).\"}],\"InvalidStartTime()\":[{\"notice\":\"The start time for the price ratio update is invalid (either in the past or after the given end time).\"}],\"NotImplemented()\":[{\"notice\":\"The function is not implemented.\"}],\"PoolOutsideTargetRange()\":[{\"notice\":\"The pool is outside the target price range before or after the operation.\"}],\"PriceRatioUpdateDurationTooShort()\":[{\"notice\":\"The difference between end time and start time is too short for the price ratio update.\"}],\"PriceRatioUpdateTooFast()\":[{\"notice\":\"The rate of change exceeds the maximum daily price ratio rate.\"}],\"ReClammPoolBptRateUnsupported()\":[{\"notice\":\"`getRate` from `IRateProvider` was called on a ReClamm Pool.\"}],\"VaultIsNotLocked()\":[{\"notice\":\"The vault is not locked, so the pool balances are manipulable.\"}],\"WrongInitializationPrices()\":[{\"notice\":\"The current price interval or spot price is outside the initialization price range.\"}]},\"events\":{\"CenterednessMarginUpdated(uint256)\":{\"notice\":\"The centeredness margin was updated.\"},\"DailyPriceShiftExponentUpdated(uint256,uint256)\":{\"notice\":\"The daily price shift exponent was updated.\"},\"LastTimestampUpdated(uint32)\":{\"notice\":\"The timestamp of the last user interaction.\"},\"PriceRatioStateUpdated(uint256,uint256,uint256,uint256)\":{\"notice\":\"The Price Ratio State was updated.\"},\"VirtualBalancesUpdated(uint256,uint256)\":{\"notice\":\"The virtual balances were updated after a user interaction (swap or liquidity operation).\"}},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeCurrentFourthRootPriceRatio()\":{\"notice\":\"Computes the current fourth root of price ratio.\"},\"computeCurrentPoolCenteredness()\":{\"notice\":\"Compute the current pool centeredness (a measure of how unbalanced the pool is).\"},\"computeCurrentPriceRange()\":{\"notice\":\"Computes the current total price range.\"},\"computeCurrentPriceRatio()\":{\"notice\":\"Computes the current price ratio.\"},\"computeCurrentSpotPrice()\":{\"notice\":\"Computes the current target price. This is the ratio of the total (i.e., real + virtual) balances (B/A).\"},\"computeCurrentVirtualBalances()\":{\"notice\":\"Computes the current virtual balances and a flag indicating whether they have changed.\"},\"computeInitialBalancesRaw(address,uint256)\":{\"notice\":\"Compute the initialization amounts, given a reference token and amount.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getCenterednessMargin()\":{\"notice\":\"Returns the centeredness margin.\"},\"getDailyPriceShiftBase()\":{\"notice\":\"Returns the internal time constant representation for the daily price shift exponent (tau).\"},\"getDailyPriceShiftExponent()\":{\"notice\":\"Returns the daily price shift exponent as an 18-decimal FP.\"},\"getLastTimestamp()\":{\"notice\":\"Getter for the timestamp of the last user interaction.\"},\"getLastVirtualBalances()\":{\"notice\":\"Getter for the last virtual balances.\"},\"getPriceRatioState()\":{\"notice\":\"Returns the current price ratio state.\"},\"getReClammPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getReClammPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"isPoolWithinTargetRange()\":{\"notice\":\"Compute whether the pool is within the target price range.\"},\"isPoolWithinTargetRangeUsingCurrentVirtualBalances()\":{\"notice\":\"Compute whether the pool is within the target price range, recomputing the virtual balances.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"},\"setCenterednessMargin(uint256)\":{\"notice\":\"Set the centeredness margin.\"},\"setDailyPriceShiftExponent(uint256)\":{\"notice\":\"Updates the daily price shift exponent, as a 18-decimal FP percentage.\"},\"startPriceRatioUpdate(uint256,uint256,uint256)\":{\"notice\":\"Initiates a price ratio update by setting a new ending price ratio and time interval.\"},\"stopPriceRatioUpdate()\":{\"notice\":\"Stops an ongoing price ratio update.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IReClammPool.sol\":\"IReClammPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/interfaces/IReClammPool.sol\":{\"keccak256\":\"0x54a0dbf40078c94f40f3c0385790edfa8d25ef70125c856da1ff57261f59a10a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ecdebb566e4f59671b1275cbc9669582dc7a797832ccc0b038f4b3de54f0799\",\"dweb:/ipfs/QmbphvcdRmqbqQRnpuEokSQ3GJKX3XZ1Pp2R6yQUBd6aMS\"]},\"contracts/lib/ReClammMath.sol\":{\"keccak256\":\"0x57f520fcdaa5baab20bb9e9e8220e5a22ba1d5580ea35134ab2db6eb4cbb195c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8306a99b53f4d3b78b45b79ec240b1774499afd75be388cb44c8184216ac7d66\",\"dweb:/ipfs/QmedHs4j4hBU6hrRa7RkRsRxqXP7Dt55gNPDzMKWZydoHm\"]}},\"version\":1}"}},"contracts/lib/ReClammMath.sol":{"ReClammMath":{"abi":[{"inputs":[],"name":"AmountOutGreaterThanBalance","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220663e27c4f9836673770aa2ef6f343cb36b2184dea5ce66533f3dbeb0ff68c3bf64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x3E27C4F9836673 PUSH24 0xAA2EF6F343CB36B2184DEA5CE66533F3DBEB0FF68C3BF64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"887:38434:61:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220663e27c4f9836673770aa2ef6f343cb36b2184dea5ce66533f3dbeb0ff68c3bf64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH7 0x3E27C4F9836673 PUSH24 0xAA2EF6F343CB36B2184DEA5CE66533F3DBEB0FF68C3BF64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"887:38434:61:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AmountOutGreaterThanBalance\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AmountOutGreaterThanBalance()\":[{\"notice\":\"The swap result is greater than the real balance of the token (i.e., the balance would drop below zero).\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/ReClammMath.sol\":\"ReClammMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xa00be322d7db5786750ce0ac7e2f5b633ac30a5ed5fa1ced1e74acfc19acecea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c84e822f87cbdc4082533b626667b6928715bb2b1e8e7eb96954cebb9e38c8d\",\"dweb:/ipfs/QmZmy9dgxLTerBAQDuuHqbL6EpgRxddqgv5KmwpXYVbKz1\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"contracts/lib/ReClammMath.sol\":{\"keccak256\":\"0x57f520fcdaa5baab20bb9e9e8220e5a22ba1d5580ea35134ab2db6eb4cbb195c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8306a99b53f4d3b78b45b79ec240b1774499afd75be388cb44c8184216ac7d66\",\"dweb:/ipfs/QmedHs4j4hBU6hrRa7RkRsRxqXP7Dt55gNPDzMKWZydoHm\"]}},\"version\":1}"}},"contracts/lib/ReClammPoolFactoryLib.sol":{"ReClammPoolFactoryLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208ebaf038e88f943e194140ea2c9e5d6b35bc4d4eeb752835e07367af5eef726b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0xBA CREATE CODESIZE 0xE8 DUP16 SWAP5 RETURNDATACOPY NOT COINBASE BLOCKHASH 0xEA 0x2C SWAP15 TSTORE PUSH12 0x35BC4D4EEB752835E07367AF MCOPY 0xEF PUSH19 0x6B64736F6C634300081B003300000000000000 ","sourceMap":"1552:614:62:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208ebaf038e88f943e194140ea2c9e5d6b35bc4d4eeb752835e07367af5eef726b64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP15 0xBA CREATE CODESIZE 0xE8 DUP16 SWAP5 RETURNDATACOPY NOT COINBASE BLOCKHASH 0xEA 0x2C SWAP15 TSTORE PUSH12 0x35BC4D4EEB752835E07367AF MCOPY 0xEF PUSH19 0x6B64736F6C634300081B003300000000000000 ","sourceMap":"1552:614:62:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/ReClammPoolFactoryLib.sol\":\"ReClammPoolFactoryLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":700},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x666c704c58d4cf404eecd6e4a898a87e25b00b45416678de914e160582c3ff17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6def3cc823ae3f155da28a241a8ff91538222053ed9d78f415758a9133e211a1\",\"dweb:/ipfs/QmSriniszojh4UP4WQqxCJhq2XsbCAULcB4qRij4EYw9Gi\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"contracts/lib/ReClammPoolFactoryLib.sol\":{\"keccak256\":\"0x457a839eabdcec23b0db69f66001b9cfb8ef85150d38cf52125096b8998e2e4f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://19059fb659260146b22cd3c13e71832a0fd7a8c073aac76f057adfe1bfb1d50b\",\"dweb:/ipfs/QmbxHi6Z2GZu7rYnErj5dxEeViKmS4zP6JEcefbTwZwWCj\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/tasks/20250409-v3-reclamm-pool/index.ts b/v3/tasks/20250409-v3-reclamm-pool/index.ts new file mode 100644 index 000000000..56b5586b4 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/index.ts @@ -0,0 +1,104 @@ +import { ZERO_ADDRESS, ZERO_BYTES32 } from '@helpers/constants'; +import { fp } from '@helpers/numbers'; +import * as expectEvent from '@helpers/expectEvent'; + +import { saveContractDeploymentTransactionHash } from '@src'; +import { Task, TaskMode, TaskRunOptions } from '@src'; +import { ReClammPoolDeployment } from './input'; + +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as ReClammPoolDeployment; + + const args = [input.Vault, input.PauseWindowDuration, input.FactoryVersion, input.PoolVersion]; + const factory = await task.deployAndVerify('ReClammPoolFactory', args, from, force); + + // ReClamm parameters. + const DAILY_PRICE_SHIFT_EXPONENT = fp(1); // 100% + const CENTEREDNESS_MARGIN = fp(0.2); // 20% + const INITIAL_MIN_PRICE = fp(1000); + const INITIAL_MAX_PRICE = fp(4000); + const INITIAL_TARGET_PRICE = fp(2500); + + if (task.mode === TaskMode.LIVE) { + const tokenConfig = [ + { + token: input.WETH, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + { + token: input.BAL, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + ].sort(function (a, b) { + return a.token.toLowerCase().localeCompare(b.token.toLowerCase()); + }); + + const newReClammPoolParams = { + name: 'DO NOT USE - Mock ReClamm Pool', + symbol: 'TEST', + tokens: tokenConfig, + roleAccounts: { + pauseManager: ZERO_ADDRESS, + swapFeeManager: ZERO_ADDRESS, + poolCreator: ZERO_ADDRESS, + }, + swapFeePercentage: fp(0.01), + dailyPriceShiftExponent: DAILY_PRICE_SHIFT_EXPONENT, + initialMinPrice: INITIAL_MIN_PRICE, + initialMaxPrice: INITIAL_MAX_PRICE, + initialTargetPrice: INITIAL_TARGET_PRICE, + centerednessMargin: CENTEREDNESS_MARGIN, + salt: ZERO_BYTES32, + }; + + // This mimics the logic inside task.deploy + if (force || !task.output({ ensure: false })['MockReClammPool']) { + const priceParams = { + initialMinPrice: newReClammPoolParams.initialMinPrice, + initialMaxPrice: newReClammPoolParams.initialMaxPrice, + initialTargetPrice: newReClammPoolParams.initialTargetPrice, + tokenAPriceIncludesRate: false, + tokenBPriceIncludesRate: false, + }; + + const poolCreationReceipt = await ( + await factory.create( + newReClammPoolParams.name, + newReClammPoolParams.symbol, + newReClammPoolParams.tokens, + newReClammPoolParams.roleAccounts, + newReClammPoolParams.swapFeePercentage, + priceParams, + newReClammPoolParams.dailyPriceShiftExponent, + newReClammPoolParams.centerednessMargin, + newReClammPoolParams.salt + ) + ).wait(); + const event = expectEvent.inReceipt(poolCreationReceipt, 'PoolCreated'); + const mockPoolAddress = event.args.pool; + + await saveContractDeploymentTransactionHash(mockPoolAddress, poolCreationReceipt.transactionHash, task.network); + await task.save({ MockReClammPool: mockPoolAddress }); + } + + const mockPool = await task.instanceAt('ReClammPool', task.output()['MockReClammPool']); + + const poolParams = { + name: newReClammPoolParams.name, + symbol: newReClammPoolParams.symbol, + version: await factory.getPoolVersion(), + dailyPriceShiftExponent: newReClammPoolParams.dailyPriceShiftExponent, + centerednessMargin: newReClammPoolParams.centerednessMargin, + initialMinPrice: newReClammPoolParams.initialMinPrice, + initialMaxPrice: newReClammPoolParams.initialMaxPrice, + initialTargetPrice: newReClammPoolParams.initialTargetPrice, + }; + + // We are now ready to verify the Pool + await task.verify('ReClammPool', mockPool.address, [poolParams, input.Vault]); + } +}; diff --git a/v3/tasks/20250409-v3-reclamm-pool/input.ts b/v3/tasks/20250409-v3-reclamm-pool/input.ts new file mode 100644 index 000000000..544b1c99d --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/input.ts @@ -0,0 +1,26 @@ +import { MONTH } from '@helpers/time'; +import { Task, TaskMode } from '@src'; + +export type ReClammPoolDeployment = { + Vault: string; + PauseWindowDuration: number; + BAL: string; + WETH: string; + FactoryVersion: string; + PoolVersion: string; +}; + +const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); +const BAL = new Task('00000000-tokens', TaskMode.READ_ONLY); +const WETH = new Task('00000000-tokens', TaskMode.READ_ONLY); + +const BaseVersion = { version: 1, deployment: '20250409-v3-reclamm-pool' }; + +export default { + Vault, + PauseWindowDuration: 4 * 12 * MONTH, + BAL, + WETH, + FactoryVersion: JSON.stringify({ name: 'ReClammPoolFactory', ...BaseVersion }), + PoolVersion: JSON.stringify({ name: 'ReClammPool', ...BaseVersion }), +}; diff --git a/v3/tasks/20250409-v3-reclamm-pool/readme.md b/v3/tasks/20250409-v3-reclamm-pool/readme.md new file mode 100644 index 000000000..1b5283602 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/readme.md @@ -0,0 +1,9 @@ +# 2025-04-09 - V3 Readjusting Concentrated Liquidity AMM (ReClAMM) + +Deployment of `ReClammPoolFactory`, a new pool type that implements concentrated liquidity by imposing price bounds on the constant product "weighted" math curve (using virtual balances). Current approaches to CL require active management of the position by the user: either by adjusting "ticks" in a Uniswap-style non-fungible position, or by adding/removing liquidity with fungible approaches. The ReClamm uses algorithmic virtual balance modifications to internally and automatically adjust the price interval as needed, + +## Useful Files + +- [Code](https://github.com/balancer/reclamm/commit/61512d4737a69ca5b703842d058252585cfca381) +- [`ReClammPoolFactory` artifact](./artifact/ReClammPoolFactory.json) +- [`ReClammPool` artifact](./artifact/ReClammPool.json) diff --git a/v3/tasks/20250409-v3-reclamm-pool/test/task.fork.ts b/v3/tasks/20250409-v3-reclamm-pool/test/task.fork.ts new file mode 100644 index 000000000..b6d08d373 --- /dev/null +++ b/v3/tasks/20250409-v3-reclamm-pool/test/task.fork.ts @@ -0,0 +1,105 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { Contract } from 'ethers'; +import { describeForkTest, getForkedNetwork, Task, TaskMode } from '@src'; +import * as expectEvent from '@helpers/expectEvent'; +import { ONES_BYTES32, ZERO_ADDRESS } from '@helpers/constants'; +import { ReClammPoolDeployment } from '../input'; +import { bn, fp } from '@helpers/numbers'; + +describeForkTest('V3-ReClammPool', 'mainnet', 22590000, function () { + const TASK_NAME = '20250409-v3-reclamm-pool'; + const POOL_CONTRACT_NAME = 'ReClammPool'; + const FACTORY_CONTRACT_NAME = POOL_CONTRACT_NAME + 'Factory'; + + const DAILY_PRICE_SHIFT_EXPONENT = bn(100e16); // 100% + const CENTEREDNESS_MARGIN = bn(20e16); // 20% + const INITIAL_MIN_PRICE = fp(1000); + const INITIAL_MAX_PRICE = fp(4000); + const INITIAL_TARGET_PRICE = fp(2500); + + const SWAP_FEE_PERCENTAGE = bn(1e16); // 1% + + let task: Task; + let factory: Contract, pool: Contract; + let input: ReClammPoolDeployment; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let tokenConfig: any[]; + + before('run task', async () => { + task = new Task(TASK_NAME, TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + factory = await task.deployedInstance(FACTORY_CONTRACT_NAME); + }); + + before('setup contracts and parameters', async () => { + input = task.input() as ReClammPoolDeployment; + tokenConfig = [ + { + token: input.WETH, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + { + token: input.BAL, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + ].sort(function (a, b) { + return a.token.toLowerCase().localeCompare(b.token.toLowerCase()); + }); + }); + + it('deploys pool', async () => { + const priceParams = { + initialMinPrice: INITIAL_MIN_PRICE, + initialMaxPrice: INITIAL_MAX_PRICE, + initialTargetPrice: INITIAL_TARGET_PRICE, + tokenAPriceIncludesRate: false, + tokenBPriceIncludesRate: false, + }; + + const poolCreationReceipt = await ( + await factory.create( + 'Mock ReClamm Pool', + 'TEST', + tokenConfig, + { + pauseManager: ZERO_ADDRESS, + swapFeeManager: ZERO_ADDRESS, + poolCreator: ZERO_ADDRESS, + }, + SWAP_FEE_PERCENTAGE, + priceParams, + DAILY_PRICE_SHIFT_EXPONENT, + CENTEREDNESS_MARGIN, + ONES_BYTES32 + ) + ).wait(); + + const event = expectEvent.inReceipt(poolCreationReceipt, 'PoolCreated'); + pool = await task.instanceAt(POOL_CONTRACT_NAME, event.args.pool); + }); + + it('checks pool tokens', async () => { + const poolTokens = (await pool.getTokens()).map((token: string) => token.toLowerCase()); + expect(poolTokens).to.be.deep.eq(tokenConfig.map((config) => config.token.toLowerCase())); + }); + + it('checks pool version', async () => { + const version = JSON.parse(await pool.version()); + expect(version.deployment).to.be.eq(TASK_NAME); + expect(version.version).to.be.eq(1); + expect(version.name).to.be.eq(POOL_CONTRACT_NAME); + }); + + it('checks factory version', async () => { + const version = JSON.parse(await factory.version()); + expect(version.deployment).to.be.eq(TASK_NAME); + expect(version.version).to.be.eq(1); + expect(version.name).to.be.eq(FACTORY_CONTRACT_NAME); + }); +});