@zentity/fhevm-contracts 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abi/ComplianceRules.json +25 -16
- package/abi/CompliantERC20.json +30 -16
- package/abi/IdentityRegistry.json +496 -119
- package/contracts/compliance/ComplianceRules.sol +40 -189
- package/contracts/core/IdentityRegistry.sol +280 -232
- package/contracts/interfaces/IComplianceRules.sol +30 -0
- package/contracts/interfaces/IIdentityRegistry.sol +133 -159
- package/contracts/proxy/ERC1967Proxy.sol +6 -0
- package/contracts/test/MockFacilitator.sol +40 -0
- package/contracts/tokens/CompliantERC20.sol +28 -242
- package/deployments/hardhat/addresses.json +3 -8
- package/deployments/sepolia/ComplianceRules.json +91 -207
- package/deployments/sepolia/CompliantERC20.json +114 -293
- package/deployments/sepolia/IdentityRegistry.json +498 -742
- package/deployments/sepolia/IdentityRegistry_Implementation.json +1698 -0
- package/deployments/sepolia/IdentityRegistry_Proxy.json +192 -0
- package/deployments/sepolia/addresses.json +5 -6
- package/dist/index.d.ts +175 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -1
- package/package.json +1 -1
- package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
- package/typechain-types/@openzeppelin/contracts/access/Ownable2Step.ts +217 -0
- package/typechain-types/@openzeppelin/contracts/access/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +11 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.ts +168 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
- package/typechain-types/{contracts/tokens/CompliantERC20.sol/IComplianceChecker.ts → @openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts} +12 -17
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +7 -0
- package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.ts +105 -0
- package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/proxy/Proxy.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.ts +90 -0
- package/typechain-types/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/proxy/index.ts +8 -0
- package/typechain-types/@openzeppelin/contracts/utils/Address.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/utils/index.ts +10 -0
- package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.ts +251 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.ts +186 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/access/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/index.ts +9 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.ts +105 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.ts +196 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.ts +105 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.ts +184 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/utils/cryptography/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.ts +6 -0
- package/typechain-types/@openzeppelin/index.ts +7 -0
- package/typechain-types/contracts/compliance/ComplianceRules.ts +18 -7
- package/typechain-types/contracts/core/IdentityRegistry.ts +493 -233
- package/typechain-types/contracts/index.ts +2 -0
- package/typechain-types/contracts/interfaces/IComplianceRules.ts +290 -0
- package/typechain-types/contracts/interfaces/IIdentityRegistry.ts +269 -341
- package/typechain-types/contracts/interfaces/index.ts +1 -0
- package/typechain-types/contracts/test/MockFacilitator.ts +187 -0
- package/typechain-types/contracts/test/index.ts +4 -0
- package/typechain-types/contracts/tokens/{CompliantERC20.sol/CompliantERC20.ts → CompliantERC20.ts} +19 -8
- package/typechain-types/contracts/tokens/index.ts +1 -2
- package/typechain-types/factories/@openzeppelin/contracts/access/Ownable2Step__factory.ts +138 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +96 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +7 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.ts +67 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts +38 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy__factory.ts +144 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.ts +105 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/Proxy__factory.ts +26 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts +35 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/proxy/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.ts +75 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.ts +101 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +8 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable__factory.ts +165 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.ts +122 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.ts +48 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.ts +153 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.ts +48 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable__factory.ts +97 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/cryptography/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/index.ts +5 -0
- package/typechain-types/factories/contracts/compliance/ComplianceRules__factory.ts +26 -17
- package/typechain-types/factories/contracts/core/IdentityRegistry__factory.ts +493 -116
- package/typechain-types/factories/contracts/index.ts +1 -0
- package/typechain-types/factories/contracts/interfaces/IComplianceRules__factory.ts +193 -0
- package/typechain-types/factories/contracts/interfaces/IIdentityRegistry__factory.ts +236 -186
- package/typechain-types/factories/contracts/interfaces/index.ts +1 -0
- package/typechain-types/factories/contracts/test/MockFacilitator__factory.ts +194 -0
- package/typechain-types/factories/contracts/test/index.ts +4 -0
- package/typechain-types/factories/contracts/tokens/CompliantERC20__factory.ts +595 -0
- package/typechain-types/factories/contracts/tokens/index.ts +1 -1
- package/typechain-types/factories/index.ts +1 -0
- package/typechain-types/hardhat.d.ts +394 -16
- package/typechain-types/index.ts +48 -4
- package/deployments/hardhat/.chainId +0 -1
- package/typechain-types/contracts/tokens/CompliantERC20.sol/index.ts +0 -5
- package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/CompliantERC20__factory.ts +0 -581
- package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/IComplianceChecker__factory.ts +0 -44
- package/typechain-types/factories/contracts/tokens/CompliantERC20.sol/index.ts +0 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"address": "
|
|
2
|
+
"address": "0xDea37357418134e1A3ee21FAc2Fe28FD9b9908aa",
|
|
3
3
|
"abi": [
|
|
4
4
|
{
|
|
5
5
|
"inputs": [
|
|
@@ -28,23 +28,25 @@
|
|
|
28
28
|
"type": "error"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
|
-
"inputs": [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
"inputs": [],
|
|
42
|
-
"name": "OnlyPendingOwner",
|
|
31
|
+
"inputs": [
|
|
32
|
+
{
|
|
33
|
+
"internalType": "address",
|
|
34
|
+
"name": "owner",
|
|
35
|
+
"type": "address"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"name": "OwnableInvalidOwner",
|
|
43
39
|
"type": "error"
|
|
44
40
|
},
|
|
45
41
|
{
|
|
46
|
-
"inputs": [
|
|
47
|
-
|
|
42
|
+
"inputs": [
|
|
43
|
+
{
|
|
44
|
+
"internalType": "address",
|
|
45
|
+
"name": "account",
|
|
46
|
+
"type": "address"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"name": "OwnableUnauthorizedAccount",
|
|
48
50
|
"type": "error"
|
|
49
51
|
},
|
|
50
52
|
{
|
|
@@ -103,13 +105,13 @@
|
|
|
103
105
|
{
|
|
104
106
|
"indexed": true,
|
|
105
107
|
"internalType": "address",
|
|
106
|
-
"name": "
|
|
108
|
+
"name": "previousOwner",
|
|
107
109
|
"type": "address"
|
|
108
110
|
},
|
|
109
111
|
{
|
|
110
112
|
"indexed": true,
|
|
111
113
|
"internalType": "address",
|
|
112
|
-
"name": "
|
|
114
|
+
"name": "newOwner",
|
|
113
115
|
"type": "address"
|
|
114
116
|
}
|
|
115
117
|
],
|
|
@@ -307,6 +309,13 @@
|
|
|
307
309
|
"stateMutability": "view",
|
|
308
310
|
"type": "function"
|
|
309
311
|
},
|
|
312
|
+
{
|
|
313
|
+
"inputs": [],
|
|
314
|
+
"name": "renounceOwnership",
|
|
315
|
+
"outputs": [],
|
|
316
|
+
"stateMutability": "nonpayable",
|
|
317
|
+
"type": "function"
|
|
318
|
+
},
|
|
310
319
|
{
|
|
311
320
|
"inputs": [
|
|
312
321
|
{
|
|
@@ -352,122 +361,74 @@
|
|
|
352
361
|
"type": "function"
|
|
353
362
|
}
|
|
354
363
|
],
|
|
355
|
-
"transactionHash": "
|
|
364
|
+
"transactionHash": "0xcc52086f64084b176c30acc60e8eb829d6cbe057cb612ae58ecd65ec5cef3382",
|
|
356
365
|
"receipt": {
|
|
357
366
|
"to": null,
|
|
358
367
|
"from": "0x15CedFBe8aC7A1BC24e5a4AE8a9263EDBBdCa7e4",
|
|
359
|
-
"contractAddress": "
|
|
360
|
-
"transactionIndex":
|
|
361
|
-
"gasUsed": "
|
|
362
|
-
"logsBloom": "
|
|
363
|
-
"blockHash": "
|
|
364
|
-
"transactionHash": "
|
|
365
|
-
"logs": [
|
|
366
|
-
|
|
367
|
-
|
|
368
|
+
"contractAddress": "0xDea37357418134e1A3ee21FAc2Fe28FD9b9908aa",
|
|
369
|
+
"transactionIndex": 52,
|
|
370
|
+
"gasUsed": "936595",
|
|
371
|
+
"logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000001000000000000000080000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000040000000000000000000000000000001000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000008000000000000000000000000000000000000000000000000000000000",
|
|
372
|
+
"blockHash": "0x114342d8a60cf9390738007b54606b8fd3e382e121c688a2dc4e1259f4f79534",
|
|
373
|
+
"transactionHash": "0xcc52086f64084b176c30acc60e8eb829d6cbe057cb612ae58ecd65ec5cef3382",
|
|
374
|
+
"logs": [
|
|
375
|
+
{
|
|
376
|
+
"transactionIndex": 52,
|
|
377
|
+
"blockNumber": 10521896,
|
|
378
|
+
"transactionHash": "0xcc52086f64084b176c30acc60e8eb829d6cbe057cb612ae58ecd65ec5cef3382",
|
|
379
|
+
"address": "0xDea37357418134e1A3ee21FAc2Fe28FD9b9908aa",
|
|
380
|
+
"topics": [
|
|
381
|
+
"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
|
|
382
|
+
"0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
383
|
+
"0x00000000000000000000000015cedfbe8ac7a1bc24e5a4ae8a9263edbbdca7e4"
|
|
384
|
+
],
|
|
385
|
+
"data": "0x",
|
|
386
|
+
"logIndex": 211,
|
|
387
|
+
"blockHash": "0x114342d8a60cf9390738007b54606b8fd3e382e121c688a2dc4e1259f4f79534"
|
|
388
|
+
}
|
|
389
|
+
],
|
|
390
|
+
"blockNumber": 10521896,
|
|
391
|
+
"cumulativeGasUsed": "11265843",
|
|
368
392
|
"status": 1,
|
|
369
393
|
"byzantium": true
|
|
370
394
|
},
|
|
371
|
-
"args": ["
|
|
372
|
-
"numDeployments":
|
|
373
|
-
"solcInputHash": "
|
|
374
|
-
"metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"initialMinComplianceLevel\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessProhibited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPendingOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZamaProtocolUnsupported\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AuthorizedCallerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ComplianceChecked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"MinComplianceLevelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"currentOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pendingOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"authorizedCallers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"authorized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"checkCompliance\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"allowedCountry\",\"type\":\"uint16\"}],\"name\":\"checkComplianceWithCountry\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confidentialProtocolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getComplianceResult\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"hasComplianceResult\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityRegistry\",\"outputs\":[{\"internalType\":\"contract IIdentityRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minComplianceLevel\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAuthorizedCaller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"setMinComplianceLevel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Gustavo Valverde\",\"custom:category\":\"compliance\",\"custom:concept\":\"Combining encrypted compliance checks with FHE.and()\",\"custom:difficulty\":\"intermediate This contract aggregates compliance checks from IdentityRegistry and returns encrypted boolean results. Consumer contracts (like CompliantERC20) can use these results with FHE.select() for branch-free logic. Key patterns demonstrated: 1. FHE.and() for combining multiple encrypted conditions 2. Integration with IdentityRegistry 3. Configurable compliance parameters 4. Encrypted result caching\",\"details\":\"Part of zentity-fhevm-contracts - Builder Track\",\"events\":{\"AuthorizedCallerUpdated(address,bool)\":{\"params\":{\"allowed\":\"Whether the caller is allowed\",\"caller\":\"Address being authorized or revoked\"}},\"ComplianceChecked(address)\":{\"params\":{\"user\":\"Address of the user whose compliance was checked\"}},\"MinComplianceLevelUpdated(uint8)\":{\"params\":{\"newLevel\":\"The new minimum compliance level required for compliance\"}},\"OwnershipTransferStarted(address,address)\":{\"params\":{\"currentOwner\":\"Current owner address\",\"pendingOwner\":\"Address that can accept ownership\"}},\"OwnershipTransferred(address,address)\":{\"params\":{\"newOwner\":\"New owner address\",\"previousOwner\":\"Previous owner address\"}}},\"kind\":\"dev\",\"methods\":{\"checkCompliance(address)\":{\"details\":\"Combines: hasMinComplianceLevel AND isNotBlacklisted\",\"params\":{\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Encrypted boolean indicating compliance status Note: This function makes external calls to IdentityRegistry which computes and stores verification results. The combined result is stored locally for later retrieval.\"}},\"checkComplianceWithCountry(address,uint16)\":{\"params\":{\"allowedCountry\":\"Country code that is allowed\",\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Encrypted boolean indicating compliance status\"}},\"constructor\":{\"params\":{\"initialMinComplianceLevel\":\"Initial minimum compliance level (default: 1)\",\"registry\":\"Address of the IdentityRegistry contract\"}},\"getComplianceResult(address)\":{\"details\":\"Call checkCompliance first to compute and store the result\",\"params\":{\"user\":\"Address to get result for\"},\"returns\":{\"_0\":\"Encrypted boolean result\"}},\"hasComplianceResult(address)\":{\"params\":{\"user\":\"Address to check\"},\"returns\":{\"_0\":\"Whether a cached result exists\"}},\"setAuthorizedCaller(address,bool)\":{\"params\":{\"allowed\":\"Whether the caller is allowed\",\"caller\":\"Address to update\"}},\"setMinComplianceLevel(uint8)\":{\"params\":{\"newLevel\":\"New minimum level\"}},\"transferOwnership(address)\":{\"params\":{\"newOwner\":\"Address that can accept ownership\"}}},\"title\":\"ComplianceRules\",\"version\":1},\"userdoc\":{\"errors\":{\"AccessProhibited()\":[{\"notice\":\"Thrown when caller lacks permission for encrypted result\"}],\"CallerNotAuthorized()\":[{\"notice\":\"Thrown when caller is not authorized to check another user\"}],\"InvalidOwner()\":[{\"notice\":\"Thrown when new owner is the zero address\"}],\"OnlyOwner()\":[{\"notice\":\"Thrown when caller is not the contract owner\"}],\"OnlyPendingOwner()\":[{\"notice\":\"Thrown when caller is not the pending owner\"}],\"RegistryNotSet()\":[{\"notice\":\"Thrown when registry address is zero\"}],\"ZamaProtocolUnsupported()\":[{\"notice\":\"Returned if the Zama protocol is not supported on the current chain\"}]},\"events\":{\"AuthorizedCallerUpdated(address,bool)\":{\"notice\":\"Emitted when a caller's authorization is updated\"},\"ComplianceChecked(address)\":{\"notice\":\"Emitted when a compliance check is performed for a user\"},\"MinComplianceLevelUpdated(uint8)\":{\"notice\":\"Emitted when the minimum compliance level requirement is updated\"},\"OwnershipTransferStarted(address,address)\":{\"notice\":\"Emitted when ownership transfer is initiated\"},\"OwnershipTransferred(address,address)\":{\"notice\":\"Emitted when ownership transfer is completed\"}},\"kind\":\"user\",\"methods\":{\"acceptOwnership()\":{\"notice\":\"Accept ownership transfer\"},\"authorizedCallers(address)\":{\"notice\":\"Authorized callers that can request compliance checks for others\"},\"checkCompliance(address)\":{\"notice\":\"Check if user passes all compliance requirements\"},\"checkComplianceWithCountry(address,uint16)\":{\"notice\":\"Check compliance with additional country restriction\"},\"constructor\":{\"notice\":\"Initialize with identity registry reference\"},\"getComplianceResult(address)\":{\"notice\":\"Get the last compliance check result for a user\"},\"hasComplianceResult(address)\":{\"notice\":\"Check if compliance result exists for user\"},\"identityRegistry()\":{\"notice\":\"Reference to the identity registry\"},\"minComplianceLevel()\":{\"notice\":\"Minimum compliance level required for compliance\"},\"owner()\":{\"notice\":\"Owner/admin\"},\"pendingOwner()\":{\"notice\":\"Pending owner for two-step ownership transfer\"},\"setAuthorizedCaller(address,bool)\":{\"notice\":\"Allow or revoke a caller to check compliance for other users\"},\"setMinComplianceLevel(uint8)\":{\"notice\":\"Update minimum compliance level\"},\"transferOwnership(address)\":{\"notice\":\"Initiate transfer of contract ownership\"}},\"notice\":\"Combines multiple compliance checks using FHE operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/compliance/ComplianceRules.sol\":\"ComplianceRules\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@fhevm/solidity/config/ZamaConfig.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FHE} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {CoprocessorConfig} from \\\"@fhevm/solidity/lib/Impl.sol\\\";\\n\\n/**\\n * @title ZamaConfig.\\n * @notice This library returns the FHEVM config for different networks\\n * with the contract addresses for (1) ACL, (2) CoprocessorAddress, (3) KMSVerifier,\\n * which are deployed & maintained by Zama.\\n */\\nlibrary ZamaConfig {\\n /// @notice Returned if the Zama protocol is not supported on the current chain\\n error ZamaProtocolUnsupported();\\n\\n function getEthereumCoprocessorConfig() internal view returns (CoprocessorConfig memory config) {\\n if (block.chainid == 1) {\\n config = _getEthereumConfig();\\n } else if (block.chainid == 11155111) {\\n config = _getSepoliaConfig();\\n } else if (block.chainid == 31337) {\\n config = _getLocalConfig();\\n } else {\\n revert ZamaProtocolUnsupported();\\n }\\n }\\n\\n function getConfidentialProtocolId() internal view returns (uint256) {\\n if (block.chainid == 1) {\\n return _getEthereumProtocolId();\\n } else if (block.chainid == 11155111) {\\n return _getSepoliaProtocolId();\\n } else if (block.chainid == 31337) {\\n return _getLocalProtocolId();\\n }\\n return 0;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumProtocolId() private pure returns (uint256) {\\n // Zama Ethereum protocol id is '1'\\n return 1;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumConfig() private pure returns (CoprocessorConfig memory) {\\n // The addresses below are placeholders and should be replaced with actual addresses\\n // once deployed on the Ethereum mainnet.\\n return\\n CoprocessorConfig({ACLAddress: address(0), CoprocessorAddress: address(0), KMSVerifierAddress: address(0)});\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaProtocolId() private pure returns (uint256) {\\n // Zama Ethereum Sepolia protocol id is '10000 + Zama Ethereum protocol id'\\n return 10001;\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n\\n /// @dev chainid == 31337\\n function _getLocalProtocolId() private pure returns (uint256) {\\n return type(uint256).max;\\n }\\n\\n function _getLocalConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n}\\n\\n/**\\n * @title ZamaEthereumConfig.\\n * @dev This contract can be inherited by a contract wishing to use the FHEVM contracts provided by Zama\\n * on the Ethereum (mainnet) network (chainId = 1) or Sepolia (testnet) network (chainId = 11155111).\\n * Other providers may offer similar contracts deployed at different addresses.\\n * If you wish to use them, you should rely on the instructions from these providers.\\n */\\nabstract contract ZamaEthereumConfig {\\n constructor() {\\n FHE.setCoprocessor(ZamaConfig.getEthereumCoprocessorConfig());\\n }\\n\\n function confidentialProtocolId() public view returns (uint256) {\\n return ZamaConfig.getConfidentialProtocolId();\\n }\\n}\\n\",\"keccak256\":\"0xa6e5421fb2a631825a980896055598620b5959bd1f5222031d95515fc1eb2a99\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FHE.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport \\\"./Impl.sol\\\";\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\nimport \\\"encrypted-types/EncryptedTypes.sol\\\";\\n\\n/**\\n * @title IKMSVerifier\\n * @notice This interface contains the only function required from KMSVerifier.\\n */\\ninterface IKMSVerifier {\\n function verifyDecryptionEIP712KMSSignatures(\\n bytes32[] memory handlesList,\\n bytes memory decryptedResult,\\n bytes memory decryptionProof\\n ) external returns (bool);\\n}\\n\\n/**\\n * @title FHE\\n * @notice This library is the interaction point for all smart contract developers\\n * that interact with the FHEVM protocol.\\n */\\nlibrary FHE {\\n /// @notice Returned if the returned KMS signatures are not valid.\\n error InvalidKMSSignatures();\\n\\n /// @notice This event is emitted when public decryption has been successfully verified.\\n event PublicDecryptionVerified(bytes32[] handlesList, bytes abiEncodedCleartexts);\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n Impl.setCoprocessor(coprocessorConfig);\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(ebool v) internal pure returns (bool) {\\n return ebool.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint8 v) internal pure returns (bool) {\\n return euint8.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint16 v) internal pure returns (bool) {\\n return euint16.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint32 v) internal pure returns (bool) {\\n return euint32.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint64 v) internal pure returns (bool) {\\n return euint64.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint128 v) internal pure returns (bool) {\\n return euint128.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(eaddress v) internal pure returns (bool) {\\n return eaddress.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint256 v) internal pure returns (bool) {\\n return euint256.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, ebool b) and returns the result.\\n */\\n function and(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, ebool b) and returns the result.\\n */\\n function or(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, ebool b) and returns the result.\\n */\\n function xor(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, ebool b) and returns the result.\\n */\\n function eq(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, ebool b) and returns the result.\\n */\\n function ne(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint8 b) and returns the result.\\n */\\n function add(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint8 b) and returns the result.\\n */\\n function sub(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint8 b) and returns the result.\\n */\\n function mul(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint8 b) and returns the result.\\n */\\n function and(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint8 b) and returns the result.\\n */\\n function or(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint8 b) and returns the result.\\n */\\n function xor(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint8 b) and returns the result.\\n */\\n function eq(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint8 b) and returns the result.\\n */\\n function ne(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint8 b) and returns the result.\\n */\\n function ge(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint8 b) and returns the result.\\n */\\n function gt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint8 b) and returns the result.\\n */\\n function le(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint8 b) and returns the result.\\n */\\n function lt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint8 b) and returns the result.\\n */\\n function min(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint8 b) and returns the result.\\n */\\n function max(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint16 b) and returns the result.\\n */\\n function add(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint16 b) and returns the result.\\n */\\n function sub(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint16 b) and returns the result.\\n */\\n function mul(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint16 b) and returns the result.\\n */\\n function and(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint16 b) and returns the result.\\n */\\n function or(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint16 b) and returns the result.\\n */\\n function xor(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint16 b) and returns the result.\\n */\\n function eq(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint16 b) and returns the result.\\n */\\n function ne(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint16 b) and returns the result.\\n */\\n function ge(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint16 b) and returns the result.\\n */\\n function gt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint16 b) and returns the result.\\n */\\n function le(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint16 b) and returns the result.\\n */\\n function lt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint16 b) and returns the result.\\n */\\n function min(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint16 b) and returns the result.\\n */\\n function max(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint32 b) and returns the result.\\n */\\n function add(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint32 b) and returns the result.\\n */\\n function sub(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint32 b) and returns the result.\\n */\\n function mul(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint32 b) and returns the result.\\n */\\n function and(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint32 b) and returns the result.\\n */\\n function or(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint32 b) and returns the result.\\n */\\n function xor(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint32 b) and returns the result.\\n */\\n function eq(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint32 b) and returns the result.\\n */\\n function ne(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint32 b) and returns the result.\\n */\\n function ge(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint32 b) and returns the result.\\n */\\n function gt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint32 b) and returns the result.\\n */\\n function le(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint32 b) and returns the result.\\n */\\n function lt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint32 b) and returns the result.\\n */\\n function min(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint32 b) and returns the result.\\n */\\n function max(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint64 b) and returns the result.\\n */\\n function add(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint64 b) and returns the result.\\n */\\n function sub(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint64 b) and returns the result.\\n */\\n function mul(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint64 b) and returns the result.\\n */\\n function and(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint64 b) and returns the result.\\n */\\n function or(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint64 b) and returns the result.\\n */\\n function xor(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint64 b) and returns the result.\\n */\\n function eq(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint64 b) and returns the result.\\n */\\n function ne(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint64 b) and returns the result.\\n */\\n function ge(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint64 b) and returns the result.\\n */\\n function gt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint64 b) and returns the result.\\n */\\n function le(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint64 b) and returns the result.\\n */\\n function lt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint64 b) and returns the result.\\n */\\n function min(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint64 b) and returns the result.\\n */\\n function max(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint128 b) and returns the result.\\n */\\n function add(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint128 b) and returns the result.\\n */\\n function sub(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint128 b) and returns the result.\\n */\\n function mul(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint128 b) and returns the result.\\n */\\n function and(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint128 b) and returns the result.\\n */\\n function or(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint128 b) and returns the result.\\n */\\n function xor(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint128 b) and returns the result.\\n */\\n function eq(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint128 b) and returns the result.\\n */\\n function ne(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint128 b) and returns the result.\\n */\\n function ge(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint128 b) and returns the result.\\n */\\n function gt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint128 b) and returns the result.\\n */\\n function le(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint128 b) and returns the result.\\n */\\n function lt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint128 b) and returns the result.\\n */\\n function min(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint128 b) and returns the result.\\n */\\n function max(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint256 b) and returns the result.\\n */\\n function and(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint256 b) and returns the result.\\n */\\n function or(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint256 b) and returns the result.\\n */\\n function xor(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint256 b) and returns the result.\\n */\\n function eq(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint256 b) and returns the result.\\n */\\n function ne(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint8 b) and returns the result.\\n */\\n function add(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint8 b) and returns the result.\\n */\\n function sub(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint8 b) and returns the result.\\n */\\n function mul(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint8 b) and returns the result.\\n */\\n function and(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint8 b) and returns the result.\\n */\\n function or(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint8 b) and returns the result.\\n */\\n function xor(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint8 b) and returns the result.\\n */\\n function eq(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint8 b) and returns the result.\\n */\\n function ne(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint8 b) and returns the result.\\n */\\n function ge(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint8 b) and returns the result.\\n */\\n function gt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint8 b) and returns the result.\\n */\\n function le(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint8 b) and returns the result.\\n */\\n function lt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint8 b) and returns the result.\\n */\\n function min(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint8 b) and returns the result.\\n */\\n function max(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint16 b) and returns the result.\\n */\\n function add(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint16 b) and returns the result.\\n */\\n function sub(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint16 b) and returns the result.\\n */\\n function mul(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint16 b) and returns the result.\\n */\\n function and(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint16 b) and returns the result.\\n */\\n function or(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint16 b) and returns the result.\\n */\\n function xor(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint16 b) and returns the result.\\n */\\n function eq(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint16 b) and returns the result.\\n */\\n function ne(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint16 b) and returns the result.\\n */\\n function ge(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint16 b) and returns the result.\\n */\\n function gt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint16 b) and returns the result.\\n */\\n function le(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint16 b) and returns the result.\\n */\\n function lt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint16 b) and returns the result.\\n */\\n function min(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint16 b) and returns the result.\\n */\\n function max(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint32 b) and returns the result.\\n */\\n function add(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint32 b) and returns the result.\\n */\\n function sub(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint32 b) and returns the result.\\n */\\n function mul(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint32 b) and returns the result.\\n */\\n function and(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint32 b) and returns the result.\\n */\\n function or(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint32 b) and returns the result.\\n */\\n function xor(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint32 b) and returns the result.\\n */\\n function eq(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint32 b) and returns the result.\\n */\\n function ne(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint32 b) and returns the result.\\n */\\n function ge(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint32 b) and returns the result.\\n */\\n function gt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint32 b) and returns the result.\\n */\\n function le(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint32 b) and returns the result.\\n */\\n function lt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint32 b) and returns the result.\\n */\\n function min(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint32 b) and returns the result.\\n */\\n function max(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint64 b) and returns the result.\\n */\\n function add(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint64 b) and returns the result.\\n */\\n function sub(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint64 b) and returns the result.\\n */\\n function mul(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint64 b) and returns the result.\\n */\\n function and(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint64 b) and returns the result.\\n */\\n function or(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint64 b) and returns the result.\\n */\\n function xor(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint64 b) and returns the result.\\n */\\n function eq(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint64 b) and returns the result.\\n */\\n function ne(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint64 b) and returns the result.\\n */\\n function ge(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint64 b) and returns the result.\\n */\\n function gt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint64 b) and returns the result.\\n */\\n function le(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint64 b) and returns the result.\\n */\\n function lt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint64 b) and returns the result.\\n */\\n function min(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint64 b) and returns the result.\\n */\\n function max(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint128 b) and returns the result.\\n */\\n function add(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint128 b) and returns the result.\\n */\\n function sub(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint128 b) and returns the result.\\n */\\n function mul(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint128 b) and returns the result.\\n */\\n function and(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint128 b) and returns the result.\\n */\\n function or(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint128 b) and returns the result.\\n */\\n function xor(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint128 b) and returns the result.\\n */\\n function eq(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint128 b) and returns the result.\\n */\\n function ne(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint128 b) and returns the result.\\n */\\n function ge(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint128 b) and returns the result.\\n */\\n function gt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint128 b) and returns the result.\\n */\\n function le(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint128 b) and returns the result.\\n */\\n function lt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint128 b) and returns the result.\\n */\\n function min(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint128 b) and returns the result.\\n */\\n function max(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint256 b) and returns the result.\\n */\\n function and(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint256 b) and returns the result.\\n */\\n function or(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint256 b) and returns the result.\\n */\\n function xor(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint256 b) and returns the result.\\n */\\n function eq(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint256 b) and returns the result.\\n */\\n function ne(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint8 b) and returns the result.\\n */\\n function add(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint8 b) and returns the result.\\n */\\n function sub(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint8 b) and returns the result.\\n */\\n function mul(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint8 b) and returns the result.\\n */\\n function and(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint8 b) and returns the result.\\n */\\n function or(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint8 b) and returns the result.\\n */\\n function xor(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint8 b) and returns the result.\\n */\\n function eq(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint8 b) and returns the result.\\n */\\n function ne(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint8 b) and returns the result.\\n */\\n function ge(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint8 b) and returns the result.\\n */\\n function gt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint8 b) and returns the result.\\n */\\n function le(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint8 b) and returns the result.\\n */\\n function lt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint8 b) and returns the result.\\n */\\n function min(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint8 b) and returns the result.\\n */\\n function max(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint16 b) and returns the result.\\n */\\n function add(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint16 b) and returns the result.\\n */\\n function sub(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint16 b) and returns the result.\\n */\\n function mul(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint16 b) and returns the result.\\n */\\n function and(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint16 b) and returns the result.\\n */\\n function or(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint16 b) and returns the result.\\n */\\n function xor(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint16 b) and returns the result.\\n */\\n function eq(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint16 b) and returns the result.\\n */\\n function ne(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint16 b) and returns the result.\\n */\\n function ge(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint16 b) and returns the result.\\n */\\n function gt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint16 b) and returns the result.\\n */\\n function le(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint16 b) and returns the result.\\n */\\n function lt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint16 b) and returns the result.\\n */\\n function min(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint16 b) and returns the result.\\n */\\n function max(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint32 b) and returns the result.\\n */\\n function add(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint32 b) and returns the result.\\n */\\n function sub(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint32 b) and returns the result.\\n */\\n function mul(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint32 b) and returns the result.\\n */\\n function and(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint32 b) and returns the result.\\n */\\n function or(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint32 b) and returns the result.\\n */\\n function xor(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint32 b) and returns the result.\\n */\\n function eq(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint32 b) and returns the result.\\n */\\n function ne(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint32 b) and returns the result.\\n */\\n function ge(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint32 b) and returns the result.\\n */\\n function gt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint32 b) and returns the result.\\n */\\n function le(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint32 b) and returns the result.\\n */\\n function lt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint32 b) and returns the result.\\n */\\n function min(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint32 b) and returns the result.\\n */\\n function max(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint64 b) and returns the result.\\n */\\n function add(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint64 b) and returns the result.\\n */\\n function sub(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint64 b) and returns the result.\\n */\\n function mul(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint64 b) and returns the result.\\n */\\n function and(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint64 b) and returns the result.\\n */\\n function or(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint64 b) and returns the result.\\n */\\n function xor(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint64 b) and returns the result.\\n */\\n function eq(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint64 b) and returns the result.\\n */\\n function ne(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint64 b) and returns the result.\\n */\\n function ge(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint64 b) and returns the result.\\n */\\n function gt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint64 b) and returns the result.\\n */\\n function le(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint64 b) and returns the result.\\n */\\n function lt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint64 b) and returns the result.\\n */\\n function min(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint64 b) and returns the result.\\n */\\n function max(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint128 b) and returns the result.\\n */\\n function add(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint128 b) and returns the result.\\n */\\n function sub(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint128 b) and returns the result.\\n */\\n function mul(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint128 b) and returns the result.\\n */\\n function and(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint128 b) and returns the result.\\n */\\n function or(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint128 b) and returns the result.\\n */\\n function xor(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint128 b) and returns the result.\\n */\\n function eq(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint128 b) and returns the result.\\n */\\n function ne(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint128 b) and returns the result.\\n */\\n function ge(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint128 b) and returns the result.\\n */\\n function gt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint128 b) and returns the result.\\n */\\n function le(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint128 b) and returns the result.\\n */\\n function lt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint128 b) and returns the result.\\n */\\n function min(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint128 b) and returns the result.\\n */\\n function max(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint256 b) and returns the result.\\n */\\n function and(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint256 b) and returns the result.\\n */\\n function or(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint256 b) and returns the result.\\n */\\n function xor(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint256 b) and returns the result.\\n */\\n function eq(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint256 b) and returns the result.\\n */\\n function ne(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint8 b) and returns the result.\\n */\\n function add(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint8 b) and returns the result.\\n */\\n function sub(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint8 b) and returns the result.\\n */\\n function mul(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint8 b) and returns the result.\\n */\\n function and(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint8 b) and returns the result.\\n */\\n function or(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint8 b) and returns the result.\\n */\\n function xor(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint8 b) and returns the result.\\n */\\n function eq(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint8 b) and returns the result.\\n */\\n function ne(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint8 b) and returns the result.\\n */\\n function ge(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint8 b) and returns the result.\\n */\\n function gt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint8 b) and returns the result.\\n */\\n function le(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint8 b) and returns the result.\\n */\\n function lt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint8 b) and returns the result.\\n */\\n function min(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint8 b) and returns the result.\\n */\\n function max(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint16 b) and returns the result.\\n */\\n function add(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint16 b) and returns the result.\\n */\\n function sub(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint16 b) and returns the result.\\n */\\n function mul(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint16 b) and returns the result.\\n */\\n function and(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint16 b) and returns the result.\\n */\\n function or(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint16 b) and returns the result.\\n */\\n function xor(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint16 b) and returns the result.\\n */\\n function eq(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint16 b) and returns the result.\\n */\\n function ne(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint16 b) and returns the result.\\n */\\n function ge(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint16 b) and returns the result.\\n */\\n function gt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint16 b) and returns the result.\\n */\\n function le(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint16 b) and returns the result.\\n */\\n function lt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint16 b) and returns the result.\\n */\\n function min(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint16 b) and returns the result.\\n */\\n function max(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint32 b) and returns the result.\\n */\\n function add(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint32 b) and returns the result.\\n */\\n function sub(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint32 b) and returns the result.\\n */\\n function mul(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint32 b) and returns the result.\\n */\\n function and(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint32 b) and returns the result.\\n */\\n function or(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint32 b) and returns the result.\\n */\\n function xor(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint32 b) and returns the result.\\n */\\n function eq(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint32 b) and returns the result.\\n */\\n function ne(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint32 b) and returns the result.\\n */\\n function ge(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint32 b) and returns the result.\\n */\\n function gt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint32 b) and returns the result.\\n */\\n function le(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint32 b) and returns the result.\\n */\\n function lt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint32 b) and returns the result.\\n */\\n function min(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint32 b) and returns the result.\\n */\\n function max(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint64 b) and returns the result.\\n */\\n function add(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint64 b) and returns the result.\\n */\\n function sub(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint64 b) and returns the result.\\n */\\n function mul(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint64 b) and returns the result.\\n */\\n function and(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint64 b) and returns the result.\\n */\\n function or(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint64 b) and returns the result.\\n */\\n function xor(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint64 b) and returns the result.\\n */\\n function eq(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint64 b) and returns the result.\\n */\\n function ne(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint64 b) and returns the result.\\n */\\n function ge(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint64 b) and returns the result.\\n */\\n function gt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint64 b) and returns the result.\\n */\\n function le(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint64 b) and returns the result.\\n */\\n function lt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint64 b) and returns the result.\\n */\\n function min(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint64 b) and returns the result.\\n */\\n function max(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint128 b) and returns the result.\\n */\\n function add(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint128 b) and returns the result.\\n */\\n function sub(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint128 b) and returns the result.\\n */\\n function mul(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint128 b) and returns the result.\\n */\\n function and(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint128 b) and returns the result.\\n */\\n function or(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint128 b) and returns the result.\\n */\\n function xor(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint128 b) and returns the result.\\n */\\n function eq(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint128 b) and returns the result.\\n */\\n function ne(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint128 b) and returns the result.\\n */\\n function ge(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint128 b) and returns the result.\\n */\\n function gt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint128 b) and returns the result.\\n */\\n function le(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint128 b) and returns the result.\\n */\\n function lt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint128 b) and returns the result.\\n */\\n function min(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint128 b) and returns the result.\\n */\\n function max(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint256 b) and returns the result.\\n */\\n function and(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint256 b) and returns the result.\\n */\\n function or(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint256 b) and returns the result.\\n */\\n function xor(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint256 b) and returns the result.\\n */\\n function eq(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint256 b) and returns the result.\\n */\\n function ne(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint8 b) and returns the result.\\n */\\n function add(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint8 b) and returns the result.\\n */\\n function sub(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint8 b) and returns the result.\\n */\\n function mul(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint8 b) and returns the result.\\n */\\n function and(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint8 b) and returns the result.\\n */\\n function or(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint8 b) and returns the result.\\n */\\n function xor(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint8 b) and returns the result.\\n */\\n function eq(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint8 b) and returns the result.\\n */\\n function ne(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint8 b) and returns the result.\\n */\\n function ge(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint8 b) and returns the result.\\n */\\n function gt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint8 b) and returns the result.\\n */\\n function le(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint8 b) and returns the result.\\n */\\n function lt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint8 b) and returns the result.\\n */\\n function min(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint8 b) and returns the result.\\n */\\n function max(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint16 b) and returns the result.\\n */\\n function add(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint16 b) and returns the result.\\n */\\n function sub(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint16 b) and returns the result.\\n */\\n function mul(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint16 b) and returns the result.\\n */\\n function and(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint16 b) and returns the result.\\n */\\n function or(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint16 b) and returns the result.\\n */\\n function xor(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint16 b) and returns the result.\\n */\\n function eq(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint16 b) and returns the result.\\n */\\n function ne(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint16 b) and returns the result.\\n */\\n function ge(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint16 b) and returns the result.\\n */\\n function gt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint16 b) and returns the result.\\n */\\n function le(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint16 b) and returns the result.\\n */\\n function lt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint16 b) and returns the result.\\n */\\n function min(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint16 b) and returns the result.\\n */\\n function max(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint32 b) and returns the result.\\n */\\n function add(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint32 b) and returns the result.\\n */\\n function sub(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint32 b) and returns the result.\\n */\\n function mul(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint32 b) and returns the result.\\n */\\n function and(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint32 b) and returns the result.\\n */\\n function or(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint32 b) and returns the result.\\n */\\n function xor(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint32 b) and returns the result.\\n */\\n function eq(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint32 b) and returns the result.\\n */\\n function ne(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint32 b) and returns the result.\\n */\\n function ge(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint32 b) and returns the result.\\n */\\n function gt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint32 b) and returns the result.\\n */\\n function le(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint32 b) and returns the result.\\n */\\n function lt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint32 b) and returns the result.\\n */\\n function min(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint32 b) and returns the result.\\n */\\n function max(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint64 b) and returns the result.\\n */\\n function add(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint64 b) and returns the result.\\n */\\n function sub(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint64 b) and returns the result.\\n */\\n function mul(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint64 b) and returns the result.\\n */\\n function and(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint64 b) and returns the result.\\n */\\n function or(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint64 b) and returns the result.\\n */\\n function xor(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint64 b) and returns the result.\\n */\\n function eq(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint64 b) and returns the result.\\n */\\n function ne(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint64 b) and returns the result.\\n */\\n function ge(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint64 b) and returns the result.\\n */\\n function gt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint64 b) and returns the result.\\n */\\n function le(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint64 b) and returns the result.\\n */\\n function lt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint64 b) and returns the result.\\n */\\n function min(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint64 b) and returns the result.\\n */\\n function max(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint128 b) and returns the result.\\n */\\n function add(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint128 b) and returns the result.\\n */\\n function sub(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint128 b) and returns the result.\\n */\\n function mul(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint128 b) and returns the result.\\n */\\n function and(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint128 b) and returns the result.\\n */\\n function or(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint128 b) and returns the result.\\n */\\n function xor(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint128 b) and returns the result.\\n */\\n function eq(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint128 b) and returns the result.\\n */\\n function ne(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint128 b) and returns the result.\\n */\\n function ge(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint128 b) and returns the result.\\n */\\n function gt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint128 b) and returns the result.\\n */\\n function le(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint128 b) and returns the result.\\n */\\n function lt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint128 b) and returns the result.\\n */\\n function min(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint128 b) and returns the result.\\n */\\n function max(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint256 b) and returns the result.\\n */\\n function and(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint256 b) and returns the result.\\n */\\n function or(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint256 b) and returns the result.\\n */\\n function xor(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint256 b) and returns the result.\\n */\\n function eq(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint256 b) and returns the result.\\n */\\n function ne(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, eaddress b) and returns the result.\\n */\\n function eq(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, eaddress b) and returns the result.\\n */\\n function ne(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint8 b) and returns the result.\\n */\\n function and(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint8 b) and returns the result.\\n */\\n function or(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint8 b) and returns the result.\\n */\\n function xor(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint8 b) and returns the result.\\n */\\n function eq(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint8 b) and returns the result.\\n */\\n function ne(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint16 b) and returns the result.\\n */\\n function and(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint16 b) and returns the result.\\n */\\n function or(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint16 b) and returns the result.\\n */\\n function xor(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint16 b) and returns the result.\\n */\\n function eq(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint16 b) and returns the result.\\n */\\n function ne(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint32 b) and returns the result.\\n */\\n function and(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint32 b) and returns the result.\\n */\\n function or(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint32 b) and returns the result.\\n */\\n function xor(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint32 b) and returns the result.\\n */\\n function eq(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint32 b) and returns the result.\\n */\\n function ne(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint64 b) and returns the result.\\n */\\n function and(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint64 b) and returns the result.\\n */\\n function or(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint64 b) and returns the result.\\n */\\n function xor(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint64 b) and returns the result.\\n */\\n function eq(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint64 b) and returns the result.\\n */\\n function ne(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint128 b) and returns the result.\\n */\\n function and(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint128 b) and returns the result.\\n */\\n function or(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint128 b) and returns the result.\\n */\\n function xor(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint128 b) and returns the result.\\n */\\n function eq(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint128 b) and returns the result.\\n */\\n function ne(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint256 b) and returns the result.\\n */\\n function and(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint256 b) and returns the result.\\n */\\n function or(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint256 b) and returns the result.\\n */\\n function xor(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint256 b) and returns the result.\\n */\\n function eq(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint256 b) and returns the result.\\n */\\n function ne(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, bool b) and returns the result.\\n */\\n function and(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(bool a, ebool b) and returns the result.\\n */\\n function and(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, bool b) and returns the result.\\n */\\n function or(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(bool a, ebool b) and returns the result.\\n */\\n function or(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, bool b) and returns the result.\\n */\\n function xor(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(bool a, ebool b) and returns the result.\\n */\\n function xor(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, bool b) and returns the result.\\n */\\n function eq(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(bool a, ebool b) and returns the result.\\n */\\n function eq(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, bool b) and returns the result.\\n */\\n function ne(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(bool a, ebool b) and returns the result.\\n */\\n function ne(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, uint8 b) and returns the result.\\n */\\n function add(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint8 a, euint8 b) and returns the result.\\n */\\n function add(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, uint8 b) and returns the result.\\n */\\n function sub(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint8 a, euint8 b) and returns the result.\\n */\\n function sub(uint8 a, euint8 b) internal returns (euint8) {\\n euint8 aEnc = asEuint8(a);\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(aEnc), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, uint8 b) and returns the result.\\n */\\n function mul(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint8 a, euint8 b) and returns the result.\\n */\\n function mul(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint8 a, uint8 b) and returns the result.\\n */\\n function div(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.div(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint8 a, uint8 b) and returns the result.\\n */\\n function rem(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rem(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, uint8 b) and returns the result.\\n */\\n function and(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint8 a, euint8 b) and returns the result.\\n */\\n function and(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, uint8 b) and returns the result.\\n */\\n function or(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint8 a, euint8 b) and returns the result.\\n */\\n function or(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, uint8 b) and returns the result.\\n */\\n function xor(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint8 a, euint8 b) and returns the result.\\n */\\n function xor(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, uint8 b) and returns the result.\\n */\\n function eq(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint8 a, euint8 b) and returns the result.\\n */\\n function eq(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, uint8 b) and returns the result.\\n */\\n function ne(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint8 a, euint8 b) and returns the result.\\n */\\n function ne(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, uint8 b) and returns the result.\\n */\\n function ge(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint8 a, euint8 b) and returns the result.\\n */\\n function ge(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, uint8 b) and returns the result.\\n */\\n function gt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint8 a, euint8 b) and returns the result.\\n */\\n function gt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, uint8 b) and returns the result.\\n */\\n function le(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint8 a, euint8 b) and returns the result.\\n */\\n function le(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, uint8 b) and returns the result.\\n */\\n function lt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint8 a, euint8 b) and returns the result.\\n */\\n function lt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, uint8 b) and returns the result.\\n */\\n function min(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint8 a, euint8 b) and returns the result.\\n */\\n function min(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, uint8 b) and returns the result.\\n */\\n function max(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint8 a, euint8 b) and returns the result.\\n */\\n function max(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, uint16 b) and returns the result.\\n */\\n function add(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint16 a, euint16 b) and returns the result.\\n */\\n function add(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, uint16 b) and returns the result.\\n */\\n function sub(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint16 a, euint16 b) and returns the result.\\n */\\n function sub(uint16 a, euint16 b) internal returns (euint16) {\\n euint16 aEnc = asEuint16(a);\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(aEnc), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, uint16 b) and returns the result.\\n */\\n function mul(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint16 a, euint16 b) and returns the result.\\n */\\n function mul(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint16 a, uint16 b) and returns the result.\\n */\\n function div(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.div(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint16 a, uint16 b) and returns the result.\\n */\\n function rem(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rem(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, uint16 b) and returns the result.\\n */\\n function and(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint16 a, euint16 b) and returns the result.\\n */\\n function and(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, uint16 b) and returns the result.\\n */\\n function or(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint16 a, euint16 b) and returns the result.\\n */\\n function or(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, uint16 b) and returns the result.\\n */\\n function xor(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint16 a, euint16 b) and returns the result.\\n */\\n function xor(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, uint16 b) and returns the result.\\n */\\n function eq(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint16 a, euint16 b) and returns the result.\\n */\\n function eq(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, uint16 b) and returns the result.\\n */\\n function ne(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint16 a, euint16 b) and returns the result.\\n */\\n function ne(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, uint16 b) and returns the result.\\n */\\n function ge(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint16 a, euint16 b) and returns the result.\\n */\\n function ge(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, uint16 b) and returns the result.\\n */\\n function gt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint16 a, euint16 b) and returns the result.\\n */\\n function gt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, uint16 b) and returns the result.\\n */\\n function le(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint16 a, euint16 b) and returns the result.\\n */\\n function le(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, uint16 b) and returns the result.\\n */\\n function lt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint16 a, euint16 b) and returns the result.\\n */\\n function lt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, uint16 b) and returns the result.\\n */\\n function min(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint16 a, euint16 b) and returns the result.\\n */\\n function min(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, uint16 b) and returns the result.\\n */\\n function max(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint16 a, euint16 b) and returns the result.\\n */\\n function max(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, uint32 b) and returns the result.\\n */\\n function add(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint32 a, euint32 b) and returns the result.\\n */\\n function add(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, uint32 b) and returns the result.\\n */\\n function sub(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint32 a, euint32 b) and returns the result.\\n */\\n function sub(uint32 a, euint32 b) internal returns (euint32) {\\n euint32 aEnc = asEuint32(a);\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(aEnc), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, uint32 b) and returns the result.\\n */\\n function mul(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint32 a, euint32 b) and returns the result.\\n */\\n function mul(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint32 a, uint32 b) and returns the result.\\n */\\n function div(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.div(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint32 a, uint32 b) and returns the result.\\n */\\n function rem(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rem(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, uint32 b) and returns the result.\\n */\\n function and(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint32 a, euint32 b) and returns the result.\\n */\\n function and(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, uint32 b) and returns the result.\\n */\\n function or(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint32 a, euint32 b) and returns the result.\\n */\\n function or(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, uint32 b) and returns the result.\\n */\\n function xor(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint32 a, euint32 b) and returns the result.\\n */\\n function xor(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, uint32 b) and returns the result.\\n */\\n function eq(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint32 a, euint32 b) and returns the result.\\n */\\n function eq(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, uint32 b) and returns the result.\\n */\\n function ne(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint32 a, euint32 b) and returns the result.\\n */\\n function ne(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, uint32 b) and returns the result.\\n */\\n function ge(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint32 a, euint32 b) and returns the result.\\n */\\n function ge(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, uint32 b) and returns the result.\\n */\\n function gt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint32 a, euint32 b) and returns the result.\\n */\\n function gt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, uint32 b) and returns the result.\\n */\\n function le(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint32 a, euint32 b) and returns the result.\\n */\\n function le(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, uint32 b) and returns the result.\\n */\\n function lt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint32 a, euint32 b) and returns the result.\\n */\\n function lt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, uint32 b) and returns the result.\\n */\\n function min(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint32 a, euint32 b) and returns the result.\\n */\\n function min(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, uint32 b) and returns the result.\\n */\\n function max(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint32 a, euint32 b) and returns the result.\\n */\\n function max(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, uint64 b) and returns the result.\\n */\\n function add(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint64 a, euint64 b) and returns the result.\\n */\\n function add(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, uint64 b) and returns the result.\\n */\\n function sub(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint64 a, euint64 b) and returns the result.\\n */\\n function sub(uint64 a, euint64 b) internal returns (euint64) {\\n euint64 aEnc = asEuint64(a);\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(aEnc), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, uint64 b) and returns the result.\\n */\\n function mul(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint64 a, euint64 b) and returns the result.\\n */\\n function mul(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint64 a, uint64 b) and returns the result.\\n */\\n function div(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.div(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint64 a, uint64 b) and returns the result.\\n */\\n function rem(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rem(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, uint64 b) and returns the result.\\n */\\n function and(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint64 a, euint64 b) and returns the result.\\n */\\n function and(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, uint64 b) and returns the result.\\n */\\n function or(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint64 a, euint64 b) and returns the result.\\n */\\n function or(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, uint64 b) and returns the result.\\n */\\n function xor(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint64 a, euint64 b) and returns the result.\\n */\\n function xor(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, uint64 b) and returns the result.\\n */\\n function eq(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint64 a, euint64 b) and returns the result.\\n */\\n function eq(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, uint64 b) and returns the result.\\n */\\n function ne(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint64 a, euint64 b) and returns the result.\\n */\\n function ne(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, uint64 b) and returns the result.\\n */\\n function ge(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint64 a, euint64 b) and returns the result.\\n */\\n function ge(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, uint64 b) and returns the result.\\n */\\n function gt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint64 a, euint64 b) and returns the result.\\n */\\n function gt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, uint64 b) and returns the result.\\n */\\n function le(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint64 a, euint64 b) and returns the result.\\n */\\n function le(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, uint64 b) and returns the result.\\n */\\n function lt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint64 a, euint64 b) and returns the result.\\n */\\n function lt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, uint64 b) and returns the result.\\n */\\n function min(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint64 a, euint64 b) and returns the result.\\n */\\n function min(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, uint64 b) and returns the result.\\n */\\n function max(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint64 a, euint64 b) and returns the result.\\n */\\n function max(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, uint128 b) and returns the result.\\n */\\n function add(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint128 a, euint128 b) and returns the result.\\n */\\n function add(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, uint128 b) and returns the result.\\n */\\n function sub(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint128 a, euint128 b) and returns the result.\\n */\\n function sub(uint128 a, euint128 b) internal returns (euint128) {\\n euint128 aEnc = asEuint128(a);\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(aEnc), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, uint128 b) and returns the result.\\n */\\n function mul(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint128 a, euint128 b) and returns the result.\\n */\\n function mul(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint128 a, uint128 b) and returns the result.\\n */\\n function div(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.div(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint128 a, uint128 b) and returns the result.\\n */\\n function rem(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rem(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, uint128 b) and returns the result.\\n */\\n function and(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint128 a, euint128 b) and returns the result.\\n */\\n function and(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, uint128 b) and returns the result.\\n */\\n function or(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint128 a, euint128 b) and returns the result.\\n */\\n function or(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, uint128 b) and returns the result.\\n */\\n function xor(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint128 a, euint128 b) and returns the result.\\n */\\n function xor(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, uint128 b) and returns the result.\\n */\\n function eq(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint128 a, euint128 b) and returns the result.\\n */\\n function eq(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, uint128 b) and returns the result.\\n */\\n function ne(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint128 a, euint128 b) and returns the result.\\n */\\n function ne(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, uint128 b) and returns the result.\\n */\\n function ge(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint128 a, euint128 b) and returns the result.\\n */\\n function ge(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, uint128 b) and returns the result.\\n */\\n function gt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint128 a, euint128 b) and returns the result.\\n */\\n function gt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, uint128 b) and returns the result.\\n */\\n function le(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint128 a, euint128 b) and returns the result.\\n */\\n function le(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, uint128 b) and returns the result.\\n */\\n function lt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint128 a, euint128 b) and returns the result.\\n */\\n function lt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, uint128 b) and returns the result.\\n */\\n function min(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint128 a, euint128 b) and returns the result.\\n */\\n function min(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, uint128 b) and returns the result.\\n */\\n function max(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint128 a, euint128 b) and returns the result.\\n */\\n function max(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, address b) and returns the result.\\n */\\n function eq(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(address a, eaddress b) and returns the result.\\n */\\n function eq(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, address b) and returns the result.\\n */\\n function ne(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(address a, eaddress b) and returns the result.\\n */\\n function ne(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, uint256 b) and returns the result.\\n */\\n function and(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint256 a, euint256 b) and returns the result.\\n */\\n function and(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, uint256 b) and returns the result.\\n */\\n function or(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint256 a, euint256 b) and returns the result.\\n */\\n function or(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, uint256 b) and returns the result.\\n */\\n function xor(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint256 a, euint256 b) and returns the result.\\n */\\n function xor(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, uint256 b) and returns the result.\\n */\\n function eq(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint256 a, euint256 b) and returns the result.\\n */\\n function eq(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, uint256 b) and returns the result.\\n */\\n function ne(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint256 a, euint256 b) and returns the result.\\n */\\n function ne(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, euint8 b) and returns the result.\\n */\\n function shl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, uint8) and returns the result.\\n */\\n function shl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, euint8 b) and returns the result.\\n */\\n function shr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, uint8) and returns the result.\\n */\\n function shr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, euint8 b) and returns the result.\\n */\\n function rotl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, uint8) and returns the result.\\n */\\n function rotl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, euint8 b) and returns the result.\\n */\\n function rotr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, uint8) and returns the result.\\n */\\n function rotr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, euint8 b) and returns the result.\\n */\\n function shl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, uint8) and returns the result.\\n */\\n function shl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, euint8 b) and returns the result.\\n */\\n function shr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, uint8) and returns the result.\\n */\\n function shr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, euint8 b) and returns the result.\\n */\\n function rotl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, uint8) and returns the result.\\n */\\n function rotl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, euint8 b) and returns the result.\\n */\\n function rotr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, uint8) and returns the result.\\n */\\n function rotr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, euint8 b) and returns the result.\\n */\\n function shl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, uint8) and returns the result.\\n */\\n function shl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, euint8 b) and returns the result.\\n */\\n function shr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, uint8) and returns the result.\\n */\\n function shr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, euint8 b) and returns the result.\\n */\\n function rotl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, uint8) and returns the result.\\n */\\n function rotl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, euint8 b) and returns the result.\\n */\\n function rotr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, uint8) and returns the result.\\n */\\n function rotr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, euint8 b) and returns the result.\\n */\\n function shl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, uint8) and returns the result.\\n */\\n function shl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, euint8 b) and returns the result.\\n */\\n function shr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, uint8) and returns the result.\\n */\\n function shr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, euint8 b) and returns the result.\\n */\\n function rotl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, uint8) and returns the result.\\n */\\n function rotl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, euint8 b) and returns the result.\\n */\\n function rotr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, uint8) and returns the result.\\n */\\n function rotr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, euint8 b) and returns the result.\\n */\\n function shl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, uint8) and returns the result.\\n */\\n function shl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, euint8 b) and returns the result.\\n */\\n function shr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, uint8) and returns the result.\\n */\\n function shr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, euint8 b) and returns the result.\\n */\\n function rotl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, uint8) and returns the result.\\n */\\n function rotl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, euint8 b) and returns the result.\\n */\\n function rotr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, uint8) and returns the result.\\n */\\n function rotr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, euint8 b) and returns the result.\\n */\\n function shl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, uint8) and returns the result.\\n */\\n function shl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, euint8 b) and returns the result.\\n */\\n function shr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, uint8) and returns the result.\\n */\\n function shr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, euint8 b) and returns the result.\\n */\\n function rotl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, uint8) and returns the result.\\n */\\n function rotl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, euint8 b) and returns the result.\\n */\\n function rotr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, uint8) and returns the result.\\n */\\n function rotr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.select(ebool.unwrap(control), ebool.unwrap(a), ebool.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.select(ebool.unwrap(control), euint8.unwrap(a), euint8.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.select(ebool.unwrap(control), euint16.unwrap(a), euint16.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.select(ebool.unwrap(control), euint32.unwrap(a), euint32.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.select(ebool.unwrap(control), euint64.unwrap(a), euint64.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.select(ebool.unwrap(control), euint128.unwrap(a), euint128.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, eaddress a, eaddress b) internal returns (eaddress) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return eaddress.wrap(Impl.select(ebool.unwrap(control), eaddress.unwrap(a), eaddress.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.select(ebool.unwrap(control), euint256.unwrap(a), euint256.unwrap(b)));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint8'.\\n */\\n function asEuint8(euint16 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint8'.\\n */\\n function asEuint8(euint32 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint8'.\\n */\\n function asEuint8(euint64 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint8'.\\n */\\n function asEuint8(euint128 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint8'.\\n */\\n function asEuint8(euint256 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint8'.\\n */\\n function asEuint8(ebool b) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'ebool'.\\n */\\n function asEbool(euint8 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint16'.\\n */\\n function asEuint16(euint8 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint16'.\\n */\\n function asEuint16(euint32 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint16'.\\n */\\n function asEuint16(euint64 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint16'.\\n */\\n function asEuint16(euint128 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint16'.\\n */\\n function asEuint16(euint256 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint16'.\\n */\\n function asEuint16(ebool b) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'ebool'.\\n */\\n function asEbool(euint16 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint32'.\\n */\\n function asEuint32(euint8 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint32'.\\n */\\n function asEuint32(euint16 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint32'.\\n */\\n function asEuint32(euint64 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint32'.\\n */\\n function asEuint32(euint128 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint32'.\\n */\\n function asEuint32(euint256 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint32'.\\n */\\n function asEuint32(ebool b) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'ebool'.\\n */\\n function asEbool(euint32 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint64'.\\n */\\n function asEuint64(euint8 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint64'.\\n */\\n function asEuint64(euint16 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint64'.\\n */\\n function asEuint64(euint32 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint64'.\\n */\\n function asEuint64(euint128 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint64'.\\n */\\n function asEuint64(euint256 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint64'.\\n */\\n function asEuint64(ebool b) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'ebool'.\\n */\\n function asEbool(euint64 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint128'.\\n */\\n function asEuint128(euint8 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint128'.\\n */\\n function asEuint128(euint16 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint128'.\\n */\\n function asEuint128(euint32 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint128'.\\n */\\n function asEuint128(euint64 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint128'.\\n */\\n function asEuint128(euint256 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint128'.\\n */\\n function asEuint128(ebool b) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'ebool'.\\n */\\n function asEbool(euint128 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint256'.\\n */\\n function asEuint256(euint8 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint256'.\\n */\\n function asEuint256(euint16 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint256'.\\n */\\n function asEuint256(euint32 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint256'.\\n */\\n function asEuint256(euint64 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint256'.\\n */\\n function asEuint256(euint128 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint256'.\\n */\\n function asEuint256(ebool b) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'ebool'.\\n */\\n function asEbool(euint256 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Evaluates not(ebool value) and returns the result.\\n */\\n function not(ebool value) internal returns (ebool) {\\n return ebool.wrap(Impl.not(ebool.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint8 value) and returns the result.\\n */\\n function neg(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.neg(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint8 value) and returns the result.\\n */\\n function not(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.not(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint16 value) and returns the result.\\n */\\n function neg(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.neg(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint16 value) and returns the result.\\n */\\n function not(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.not(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint32 value) and returns the result.\\n */\\n function neg(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.neg(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint32 value) and returns the result.\\n */\\n function not(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.not(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint64 value) and returns the result.\\n */\\n function neg(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.neg(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint64 value) and returns the result.\\n */\\n function not(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.not(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint128 value) and returns the result.\\n */\\n function neg(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.neg(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint128 value) and returns the result.\\n */\\n function not(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.not(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint256 value) and returns the result.\\n */\\n function neg(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.neg(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint256 value) and returns the result.\\n */\\n function not(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.not(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted ebool integer.\\n */\\n function fromExternal(externalEbool inputHandle, bytes memory inputProof) internal returns (ebool) {\\n return ebool.wrap(Impl.verify(externalEbool.unwrap(inputHandle), inputProof, FheType.Bool));\\n }\\n\\n /**\\n * @dev Converts a plaintext boolean to an encrypted boolean.\\n */\\n function asEbool(bool value) internal returns (ebool) {\\n return ebool.wrap(Impl.trivialEncrypt(value ? 1 : 0, FheType.Bool));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint8 integer.\\n */\\n function fromExternal(externalEuint8 inputHandle, bytes memory inputProof) internal returns (euint8) {\\n return euint8.wrap(Impl.verify(externalEuint8.unwrap(inputHandle), inputProof, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint8 integer.\\n */\\n function asEuint8(uint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint16 integer.\\n */\\n function fromExternal(externalEuint16 inputHandle, bytes memory inputProof) internal returns (euint16) {\\n return euint16.wrap(Impl.verify(externalEuint16.unwrap(inputHandle), inputProof, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint16 integer.\\n */\\n function asEuint16(uint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint32 integer.\\n */\\n function fromExternal(externalEuint32 inputHandle, bytes memory inputProof) internal returns (euint32) {\\n return euint32.wrap(Impl.verify(externalEuint32.unwrap(inputHandle), inputProof, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint32 integer.\\n */\\n function asEuint32(uint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint64 integer.\\n */\\n function fromExternal(externalEuint64 inputHandle, bytes memory inputProof) internal returns (euint64) {\\n return euint64.wrap(Impl.verify(externalEuint64.unwrap(inputHandle), inputProof, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint64 integer.\\n */\\n function asEuint64(uint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint128 integer.\\n */\\n function fromExternal(externalEuint128 inputHandle, bytes memory inputProof) internal returns (euint128) {\\n return euint128.wrap(Impl.verify(externalEuint128.unwrap(inputHandle), inputProof, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint128 integer.\\n */\\n function asEuint128(uint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted eaddress integer.\\n */\\n function fromExternal(externalEaddress inputHandle, bytes memory inputProof) internal returns (eaddress) {\\n return eaddress.wrap(Impl.verify(externalEaddress.unwrap(inputHandle), inputProof, FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted eaddress integer.\\n */\\n function asEaddress(address value) internal returns (eaddress) {\\n return eaddress.wrap(Impl.trivialEncrypt(uint256(uint160(value)), FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint256 integer.\\n */\\n function fromExternal(externalEuint256 inputHandle, bytes memory inputProof) internal returns (euint256) {\\n return euint256.wrap(Impl.verify(externalEuint256.unwrap(inputHandle), inputProof, FheType.Uint256));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint256 integer.\\n */\\n function asEuint256(uint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEbool() internal returns (ebool) {\\n return ebool.wrap(Impl.rand(FheType.Bool));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint8() internal returns (euint8) {\\n return euint8.wrap(Impl.rand(FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 8-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint8(uint8 upperBound) internal returns (euint8) {\\n return euint8.wrap(Impl.randBounded(upperBound, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint16() internal returns (euint16) {\\n return euint16.wrap(Impl.rand(FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 16-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint16(uint16 upperBound) internal returns (euint16) {\\n return euint16.wrap(Impl.randBounded(upperBound, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint32() internal returns (euint32) {\\n return euint32.wrap(Impl.rand(FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 32-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint32(uint32 upperBound) internal returns (euint32) {\\n return euint32.wrap(Impl.randBounded(upperBound, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint64() internal returns (euint64) {\\n return euint64.wrap(Impl.rand(FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 64-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint64(uint64 upperBound) internal returns (euint64) {\\n return euint64.wrap(Impl.randBounded(upperBound, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint128() internal returns (euint128) {\\n return euint128.wrap(Impl.rand(FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 128-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint128(uint128 upperBound) internal returns (euint128) {\\n return euint128.wrap(Impl.randBounded(upperBound, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint256() internal returns (euint256) {\\n return euint256.wrap(Impl.rand(FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 256-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint256(uint256 upperBound) internal returns (euint256) {\\n return euint256.wrap(Impl.randBounded(upperBound, FheType.Uint256));\\n }\\n\\n /**\\n * @dev This function cleans the transient storage for the ACL (accounts) and the InputVerifier\\n * (input proofs).\\n * This could be useful for integration with Account Abstraction when bundling several\\n * UserOps calling the FHEVMExecutor.\\n */\\n function cleanTransientStorage() internal {\\n Impl.cleanTransientStorageACL();\\n Impl.cleanTransientStorageInputVerifier();\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(ebool value, address account) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(ebool value) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(ebool value, address account) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(ebool value) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(ebool value, address account) internal returns (ebool) {\\n Impl.allowTransient(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(ebool value) internal returns (ebool) {\\n Impl.makePubliclyDecryptable(ebool.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(ebool value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(ebool.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint8 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint8 value) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint8 value, address account) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint8 value) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint8 value, address account) internal returns (euint8) {\\n Impl.allowTransient(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint8 value) internal returns (euint8) {\\n Impl.makePubliclyDecryptable(euint8.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint8 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint8.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint16 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint16 value) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint16 value, address account) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint16 value) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint16 value, address account) internal returns (euint16) {\\n Impl.allowTransient(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint16 value) internal returns (euint16) {\\n Impl.makePubliclyDecryptable(euint16.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint16 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint16.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint32 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint32 value) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint32 value, address account) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint32 value) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint32 value, address account) internal returns (euint32) {\\n Impl.allowTransient(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint32 value) internal returns (euint32) {\\n Impl.makePubliclyDecryptable(euint32.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint32 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint32.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint64 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint64 value) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint64 value, address account) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint64 value) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint64 value, address account) internal returns (euint64) {\\n Impl.allowTransient(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint64 value) internal returns (euint64) {\\n Impl.makePubliclyDecryptable(euint64.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint64 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint64.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint128 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint128 value) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint128 value, address account) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint128 value) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint128 value, address account) internal returns (euint128) {\\n Impl.allowTransient(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint128 value) internal returns (euint128) {\\n Impl.makePubliclyDecryptable(euint128.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint128 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint128.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(eaddress value, address account) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(eaddress value) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(eaddress value, address account) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(eaddress value) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(eaddress value, address account) internal returns (eaddress) {\\n Impl.allowTransient(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(eaddress value) internal returns (eaddress) {\\n Impl.makePubliclyDecryptable(eaddress.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(eaddress value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(eaddress.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint256 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint256 value) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint256 value, address account) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint256 value) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint256 value, address account) internal returns (euint256) {\\n Impl.allowTransient(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint256 value) internal returns (euint256) {\\n Impl.makePubliclyDecryptable(euint256.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint256 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint256.unwrap(value));\\n }\\n\\n /// @notice Reverts if the KMS signatures verification against the provided handles and public decryption data\\n /// fails.\\n /// @dev The function MUST be called inside a public decryption callback function of a dApp contract\\n /// to verify the signatures and prevent fake decryption results for being submitted.\\n /// @param handlesList The list of handles as an array of bytes32 to check\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The ABI-encoded list order must match the `handlesList` order.\\n /// @param decryptionProof The KMS public decryption proof. It includes the KMS signatures, associated metadata,\\n /// and the context needed for verification.\\n /// @dev Reverts if any of the following conditions are met:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n /// - The signatures verification returns false.\\n function checkSignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) internal {\\n bool isVerified = _verifySignatures(handlesList, abiEncodedCleartexts, decryptionProof);\\n if (!isVerified) {\\n revert InvalidKMSSignatures();\\n }\\n emit PublicDecryptionVerified(handlesList, abiEncodedCleartexts);\\n }\\n\\n /// @notice Verifies KMS signatures against the provided handles and public decryption data.\\n /// @param handlesList The list of handles as an array of bytes32 to verify\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The list order must match the list of handles in `handlesList`\\n /// @param decryptionProof The KMS public decryption proof computed by the KMS Signers assiciated to `handlesList` and\\n /// `abiEncodedCleartexts`\\n /// @return true if the signatures verification succeeds, false otherwise\\n /// @dev Private low-level function used to verify the KMS signatures.\\n /// Warning: this function never reverts, its boolean return value must be checked.\\n /// The decryptionProof is the numSigners + kmsSignatures + extraData (1 + 65*numSigners + extraData bytes)\\n /// Only static native solidity types for clear values are supported, so `abiEncodedCleartexts` is the concatenation of all clear values appended to 32 bytes.\\n /// @dev Reverts if any of the following conditions are met by the underlying KMS verifier:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n function _verifySignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) private returns (bool) {\\n CoprocessorConfig storage $ = Impl.getCoprocessorConfig();\\n return\\n IKMSVerifier($.KMSVerifierAddress).verifyDecryptionEIP712KMSSignatures(\\n handlesList,\\n abiEncodedCleartexts,\\n decryptionProof\\n );\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(ebool value) internal pure returns (bytes32 ct) {\\n ct = ebool.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint8 value) internal pure returns (bytes32 ct) {\\n ct = euint8.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint16 value) internal pure returns (bytes32 ct) {\\n ct = euint16.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint32 value) internal pure returns (bytes32 ct) {\\n ct = euint32.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint64 value) internal pure returns (bytes32 ct) {\\n ct = euint64.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint128 value) internal pure returns (bytes32 ct) {\\n ct = euint128.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(eaddress value) internal pure returns (bytes32 ct) {\\n ct = eaddress.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint256 value) internal pure returns (bytes32 ct) {\\n ct = euint256.unwrap(value);\\n }\\n}\\n\",\"keccak256\":\"0x40fa1fd7a983b88f68b2efd87e879bc12ac363b2585bb39e9aa52fa168851d2b\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FheType.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nenum FheType {\\n Bool,\\n Uint4,\\n Uint8,\\n Uint16,\\n Uint32,\\n Uint64,\\n Uint128,\\n Uint160,\\n Uint256,\\n Uint512,\\n Uint1024,\\n Uint2048,\\n Uint2,\\n Uint6,\\n Uint10,\\n Uint12,\\n Uint14,\\n Int2,\\n Int4,\\n Int6,\\n Int8,\\n Int10,\\n Int12,\\n Int14,\\n Int16,\\n Int32,\\n Int64,\\n Int128,\\n Int160,\\n Int256,\\n AsciiString,\\n Int512,\\n Int1024,\\n Int2048,\\n Uint24,\\n Uint40,\\n Uint48,\\n Uint56,\\n Uint72,\\n Uint80,\\n Uint88,\\n Uint96,\\n Uint104,\\n Uint112,\\n Uint120,\\n Uint136,\\n Uint144,\\n Uint152,\\n Uint168,\\n Uint176,\\n Uint184,\\n Uint192,\\n Uint200,\\n Uint208,\\n Uint216,\\n Uint224,\\n Uint232,\\n Uint240,\\n Uint248,\\n Int24,\\n Int40,\\n Int48,\\n Int56,\\n Int72,\\n Int80,\\n Int88,\\n Int96,\\n Int104,\\n Int112,\\n Int120,\\n Int136,\\n Int144,\\n Int152,\\n Int168,\\n Int176,\\n Int184,\\n Int192,\\n Int200,\\n Int208,\\n Int216,\\n Int224,\\n Int232,\\n Int240,\\n Int248\\n}\\n\",\"keccak256\":\"0x945f006108fab92cb082a6e5a80525953f17b8d8dcf88a283a83fc80c765497a\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/Impl.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\n/**\\n * @title CoprocessorConfig\\n * @notice This struct contains all addresses of core contracts, which are needed in a typical dApp.\\n */\\nstruct CoprocessorConfig {\\n address ACLAddress;\\n address CoprocessorAddress;\\n address KMSVerifierAddress;\\n}\\n\\n/**\\n * @title IFHEVMExecutor\\n * @notice This interface contains all functions to conduct FHE operations.\\n */\\ninterface IFHEVMExecutor {\\n /**\\n * @notice Computes fheAdd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheAdd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheSub operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheSub(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMul operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMul(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheDiv operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheDiv(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRem operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRem(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitAnd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitAnd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitOr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitOr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitXor operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitXor(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheEq operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheEq(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheNe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMin operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMin(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMax operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMax(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNeg operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNeg(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNot operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNot(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Verifies the ciphertext.\\n * @param inputHandle Input handle.\\n * @param callerAddress Address of the caller.\\n * @param inputProof Input proof.\\n * @param inputType Input type.\\n * @return result Result.\\n */\\n function verifyInput(\\n bytes32 inputHandle,\\n address callerAddress,\\n bytes memory inputProof,\\n FheType inputType\\n ) external returns (bytes32 result);\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ct Value to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param ct Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHEIfThenElse operation.\\n * @param control Control value.\\n * @param ifTrue If true.\\n * @param ifFalse If false.\\n * @return result Result.\\n */\\n function fheIfThenElse(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERand operation.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRand(FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERandBounded operation.\\n * @param upperBound Upper bound value.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRandBounded(uint256 upperBound, FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Returns the address of the InputVerifier contract used by the coprocessor.\\n * @return inputVerifierAddress Address of the InputVerifier.\\n */\\n function getInputVerifierAddress() external view returns (address);\\n}\\n\\n/**\\n * @title IACL.\\n * @notice This interface contains all functions that are used to conduct operations\\n * with the ACL contract.\\n */\\ninterface IACL {\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param ciphertext Ciphertext.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 ciphertext, address account) external;\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) external;\\n\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) external view returns (bool);\\n\\n /**\\n * @notice Allows a list of handles to be decrypted.\\n * @param handlesList List of handles.\\n */\\n function allowForDecryption(bytes32[] memory handlesList) external;\\n\\n /**\\n * @notice Returns wether a handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isDecryptable Whether the handle can be publicly decrypted.\\n */\\n function isAllowedForDecryption(bytes32 handle) external view returns (bool);\\n}\\n\\n/**\\n * @title IInputVerifier\\n * @notice This interface contains the only function required from InputVerifier.\\n */\\ninterface IInputVerifier {\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n}\\n\\n/**\\n * @title Impl\\n * @notice This library is the core implementation for computing FHE operations (e.g. add, sub, xor).\\n */\\nlibrary Impl {\\n /// keccak256(abi.encode(uint256(keccak256(\\\"confidential.storage.config\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant CoprocessorConfigLocation =\\n 0x9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700;\\n\\n /**\\n * @dev Returns the Coprocessor config.\\n */\\n function getCoprocessorConfig() internal pure returns (CoprocessorConfig storage $) {\\n assembly {\\n $.slot := CoprocessorConfigLocation\\n }\\n }\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n $.ACLAddress = coprocessorConfig.ACLAddress;\\n $.CoprocessorAddress = coprocessorConfig.CoprocessorAddress;\\n $.KMSVerifierAddress = coprocessorConfig.KMSVerifierAddress;\\n }\\n\\n function add(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheAdd(lhs, rhs, scalarByte);\\n }\\n\\n function sub(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheSub(lhs, rhs, scalarByte);\\n }\\n\\n function mul(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMul(lhs, rhs, scalarByte);\\n }\\n\\n function div(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheDiv(lhs, rhs, scalarByte);\\n }\\n\\n function rem(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRem(lhs, rhs, scalarByte);\\n }\\n\\n function and(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitAnd(lhs, rhs, scalarByte);\\n }\\n\\n function or(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitOr(lhs, rhs, scalarByte);\\n }\\n\\n function xor(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitXor(lhs, rhs, scalarByte);\\n }\\n\\n function shl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShl(lhs, rhs, scalarByte);\\n }\\n\\n function shr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShr(lhs, rhs, scalarByte);\\n }\\n\\n function rotl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotl(lhs, rhs, scalarByte);\\n }\\n\\n function rotr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotr(lhs, rhs, scalarByte);\\n }\\n\\n function eq(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheEq(lhs, rhs, scalarByte);\\n }\\n\\n function ne(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNe(lhs, rhs, scalarByte);\\n }\\n\\n function ge(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGe(lhs, rhs, scalarByte);\\n }\\n\\n function gt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGt(lhs, rhs, scalarByte);\\n }\\n\\n function le(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLe(lhs, rhs, scalarByte);\\n }\\n\\n function lt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLt(lhs, rhs, scalarByte);\\n }\\n\\n function min(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMin(lhs, rhs, scalarByte);\\n }\\n\\n function max(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMax(lhs, rhs, scalarByte);\\n }\\n\\n function neg(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNeg(ct);\\n }\\n\\n function not(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNot(ct);\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheIfThenElse(control, ifTrue, ifFalse);\\n }\\n\\n /**\\n * @notice Verifies the ciphertext (FHEVMExecutor) and allows transient (ACL).\\n * @param inputHandle Input handle.\\n * @param inputProof Input proof.\\n * @param toType Input type.\\n * @return result Result.\\n */\\n function verify(bytes32 inputHandle, bytes memory inputProof, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).verifyInput(inputHandle, msg.sender, inputProof, toType);\\n IACL($.ACLAddress).allowTransient(result, msg.sender);\\n }\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ciphertext Ciphertext to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ciphertext, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).cast(ciphertext, toType);\\n }\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param value Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 value, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).trivialEncrypt(value, toType);\\n }\\n\\n function rand(FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRand(randType);\\n }\\n\\n function randBounded(uint256 upperBound, FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRandBounded(upperBound, randType);\\n }\\n\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allowTransient(handle, account);\\n }\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allow(handle, account);\\n }\\n\\n /**\\n * @notice Allows the handle to be publicly decryptable.\\n * @dev The caller must be allowed to use handle for makePubliclyDecryptable() to succeed.\\n * If not, makePubliclyDecryptable() reverts.\\n * @param handle Handle.\\n */\\n function makePubliclyDecryptable(bytes32 handle) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n bytes32[] memory handleArray = new bytes32[](1);\\n handleArray[0] = handle;\\n IACL($.ACLAddress).allowForDecryption(handleArray);\\n }\\n\\n /**\\n * @dev This function removes the transient allowances in the ACL, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageACL() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @dev This function removes the transient proofs in the InputVerifier, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageInputVerifier() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n address inputVerifierAddress = IFHEVMExecutor($.CoprocessorAddress).getInputVerifierAddress();\\n IInputVerifier(inputVerifierAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowed(handle, account);\\n }\\n\\n /**\\n * @notice Returns whether the handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isAllowed Whether the handle can be publicly decrypted.\\n */\\n function isPubliclyDecryptable(bytes32 handle) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowedForDecryption(handle);\\n }\\n}\\n\",\"keccak256\":\"0x42eaed792fa26d065044e0057b093a51dfe0666d0eb75937b99ce87bcc1d0bf2\",\"license\":\"BSD-3-Clause-Clear\"},\"contracts/compliance/ComplianceRules.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {FHE, ebool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {ZamaEthereumConfig} from \\\"@fhevm/solidity/config/ZamaConfig.sol\\\";\\nimport {IIdentityRegistry} from \\\"../interfaces/IIdentityRegistry.sol\\\";\\n\\n/**\\n * @title ComplianceRules\\n * @author Gustavo Valverde\\n * @notice Combines multiple compliance checks using FHE operations\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category compliance\\n * @custom:concept Combining encrypted compliance checks with FHE.and()\\n * @custom:difficulty intermediate\\n *\\n * This contract aggregates compliance checks from IdentityRegistry and returns\\n * encrypted boolean results. Consumer contracts (like CompliantERC20) can use\\n * these results with FHE.select() for branch-free logic.\\n *\\n * Key patterns demonstrated:\\n * 1. FHE.and() for combining multiple encrypted conditions\\n * 2. Integration with IdentityRegistry\\n * 3. Configurable compliance parameters\\n * 4. Encrypted result caching\\n */\\ncontract ComplianceRules is ZamaEthereumConfig {\\n // ============ State ============\\n\\n /// @notice Reference to the identity registry\\n IIdentityRegistry public immutable identityRegistry;\\n\\n /// @notice Owner/admin\\n address public owner;\\n /// @notice Pending owner for two-step ownership transfer\\n address public pendingOwner;\\n\\n /// @notice Minimum compliance level required for compliance\\n uint8 public minComplianceLevel;\\n\\n /// @notice Store last compliance check result for each user\\n mapping(address user => ebool result) private complianceResults;\\n\\n /// @notice Authorized callers that can request compliance checks for others\\n mapping(address caller => bool authorized) public authorizedCallers;\\n\\n // ============ Events ============\\n\\n /// @notice Emitted when the minimum compliance level requirement is updated\\n /// @param newLevel The new minimum compliance level required for compliance\\n event MinComplianceLevelUpdated(uint8 indexed newLevel);\\n\\n /// @notice Emitted when a compliance check is performed for a user\\n /// @param user Address of the user whose compliance was checked\\n event ComplianceChecked(address indexed user);\\n\\n /// @notice Emitted when a caller's authorization is updated\\n /// @param caller Address being authorized or revoked\\n /// @param allowed Whether the caller is allowed\\n event AuthorizedCallerUpdated(address indexed caller, bool indexed allowed);\\n\\n /// @notice Emitted when ownership transfer is initiated\\n /// @param currentOwner Current owner address\\n /// @param pendingOwner Address that can accept ownership\\n event OwnershipTransferStarted(address indexed currentOwner, address indexed pendingOwner);\\n\\n /// @notice Emitted when ownership transfer is completed\\n /// @param previousOwner Previous owner address\\n /// @param newOwner New owner address\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // ============ Errors ============\\n\\n /// @notice Thrown when caller is not the contract owner\\n error OnlyOwner();\\n /// @notice Thrown when caller is not the pending owner\\n error OnlyPendingOwner();\\n /// @notice Thrown when new owner is the zero address\\n error InvalidOwner();\\n\\n /// @notice Thrown when registry address is zero\\n error RegistryNotSet();\\n\\n /// @notice Thrown when caller is not authorized to check another user\\n error CallerNotAuthorized();\\n\\n /// @notice Thrown when caller lacks permission for encrypted result\\n error AccessProhibited();\\n\\n // ============ Modifiers ============\\n\\n modifier onlyOwner() {\\n if (msg.sender != owner) revert OnlyOwner();\\n _;\\n }\\n\\n modifier onlyAuthorizedOrSelf(address user) {\\n if (msg.sender != user && !authorizedCallers[msg.sender]) {\\n revert CallerNotAuthorized();\\n }\\n _;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Initialize with identity registry reference\\n * @param registry Address of the IdentityRegistry contract\\n * @param initialMinComplianceLevel Initial minimum compliance level (default: 1)\\n */\\n constructor(address registry, uint8 initialMinComplianceLevel) {\\n if (registry == address(0)) revert RegistryNotSet();\\n identityRegistry = IIdentityRegistry(registry);\\n owner = msg.sender;\\n minComplianceLevel = initialMinComplianceLevel;\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Update minimum compliance level\\n * @param newLevel New minimum level\\n */\\n function setMinComplianceLevel(uint8 newLevel) external onlyOwner {\\n minComplianceLevel = newLevel;\\n emit MinComplianceLevelUpdated(newLevel);\\n }\\n\\n /**\\n * @notice Allow or revoke a caller to check compliance for other users\\n * @param caller Address to update\\n * @param allowed Whether the caller is allowed\\n */\\n function setAuthorizedCaller(address caller, bool allowed) external onlyOwner {\\n authorizedCallers[caller] = allowed;\\n emit AuthorizedCallerUpdated(caller, allowed);\\n }\\n\\n /**\\n * @notice Initiate transfer of contract ownership\\n * @param newOwner Address that can accept ownership\\n */\\n function transferOwnership(address newOwner) external onlyOwner {\\n if (newOwner == address(0)) revert InvalidOwner();\\n pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner, newOwner);\\n }\\n\\n /**\\n * @notice Accept ownership transfer\\n */\\n function acceptOwnership() external {\\n if (msg.sender != pendingOwner) revert OnlyPendingOwner();\\n address previousOwner = owner;\\n owner = pendingOwner;\\n pendingOwner = address(0);\\n emit OwnershipTransferred(previousOwner, owner);\\n }\\n\\n // ============ Compliance Checks ============\\n\\n /**\\n * @notice Check if user passes all compliance requirements\\n * @dev Combines: hasMinComplianceLevel AND isNotBlacklisted\\n * @param user Address to check\\n * @return Encrypted boolean indicating compliance status\\n *\\n * Note: This function makes external calls to IdentityRegistry which\\n * computes and stores verification results. The combined result is\\n * stored locally for later retrieval.\\n */\\n function checkCompliance(address user) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n // Check if user is attested\\n if (!identityRegistry.isAttested(user)) {\\n ebool notAttestedResult = FHE.asEbool(false);\\n FHE.allowThis(notAttestedResult);\\n FHE.allow(notAttestedResult, msg.sender);\\n complianceResults[user] = notAttestedResult;\\n return notAttestedResult;\\n }\\n\\n // Get individual compliance checks\\n ebool hasCompliance = identityRegistry.hasMinComplianceLevel(user, minComplianceLevel);\\n ebool notBlacklisted = identityRegistry.isNotBlacklisted(user);\\n\\n // Combine all conditions\\n ebool result = FHE.and(hasCompliance, notBlacklisted);\\n\\n // Store and grant permissions\\n complianceResults[user] = result;\\n FHE.allowThis(result);\\n FHE.allow(result, msg.sender);\\n\\n emit ComplianceChecked(user);\\n\\n return result;\\n }\\n\\n /**\\n * @notice Check compliance with additional country restriction\\n * @param user Address to check\\n * @param allowedCountry Country code that is allowed\\n * @return Encrypted boolean indicating compliance status\\n */\\n function checkComplianceWithCountry(\\n address user,\\n uint16 allowedCountry\\n ) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n // Check if user is attested\\n if (!identityRegistry.isAttested(user)) {\\n ebool notAttestedResult = FHE.asEbool(false);\\n FHE.allowThis(notAttestedResult);\\n FHE.allow(notAttestedResult, msg.sender);\\n return notAttestedResult;\\n }\\n\\n // Get individual compliance checks\\n ebool hasCompliance = identityRegistry.hasMinComplianceLevel(user, minComplianceLevel);\\n ebool notBlacklisted = identityRegistry.isNotBlacklisted(user);\\n ebool isFromAllowedCountry = identityRegistry.isFromCountry(user, allowedCountry);\\n\\n // Combine all conditions\\n ebool result = FHE.and(FHE.and(hasCompliance, notBlacklisted), isFromAllowedCountry);\\n\\n // Grant permissions\\n FHE.allowThis(result);\\n FHE.allow(result, msg.sender);\\n\\n emit ComplianceChecked(user);\\n\\n return result;\\n }\\n\\n /**\\n * @notice Get the last compliance check result for a user\\n * @dev Call checkCompliance first to compute and store the result\\n * @param user Address to get result for\\n * @return Encrypted boolean result\\n */\\n function getComplianceResult(address user) external view returns (ebool) {\\n ebool result = complianceResults[user];\\n if (!FHE.isSenderAllowed(result)) revert AccessProhibited();\\n return result;\\n }\\n\\n /**\\n * @notice Check if compliance result exists for user\\n * @param user Address to check\\n * @return Whether a cached result exists\\n */\\n function hasComplianceResult(address user) external view returns (bool) {\\n return FHE.isInitialized(complianceResults[user]);\\n }\\n}\\n\",\"keccak256\":\"0x4a1b7cba106731493a1d1f3b06c74c2db5c8ae7d63ce182eb53591064f02e6b2\",\"license\":\"MIT\"},\"contracts/interfaces/IIdentityRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {euint8, euint16, ebool, externalEuint8, externalEuint16, externalEbool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\n\\n/**\\n * @title IIdentityRegistry\\n * @author Gustavo Valverde\\n * @notice Interface for the IdentityRegistry contract\\n * @dev Part of zentity-fhevm-contracts - Builder Track\\n *\\n * @custom:category identity\\n * @custom:concept Interface for encrypted identity storage and verification\\n * @custom:difficulty intermediate\\n */\\ninterface IIdentityRegistry {\\n // ============ Events ============\\n\\n /// @notice Emitted when a new registrar is authorized\\n /// @param registrar Address of the authorized registrar\\n event RegistrarAdded(address indexed registrar);\\n\\n /// @notice Emitted when a registrar's authorization is revoked\\n /// @param registrar Address of the removed registrar\\n event RegistrarRemoved(address indexed registrar);\\n\\n /// @notice Emitted when an identity is attested on-chain\\n /// @param user Address of the attested user\\n /// @param registrar Address of the registrar who performed attestation\\n event IdentityAttested(address indexed user, address indexed registrar);\\n\\n /// @notice Emitted when an identity is attested on-chain with metadata\\n /// @param user Address of the attested user\\n /// @param registrar Address of the registrar who performed attestation\\n /// @param attestationId Monotonic attestation identifier for the user\\n /// @param timestamp Unix timestamp of attestation\\n event IdentityAttestedDetailed(\\n address indexed user,\\n address indexed registrar,\\n uint256 indexed attestationId,\\n uint256 timestamp\\n );\\n\\n /// @notice Emitted when an identity attestation is revoked\\n /// @param user Address whose attestation was revoked\\n event IdentityRevoked(address indexed user);\\n\\n /// @notice Emitted when an identity attestation is revoked with metadata\\n /// @param user Address whose attestation was revoked\\n /// @param registrar Address of the registrar who performed the revocation\\n /// @param attestationId Attestation identifier that was revoked\\n /// @param timestamp Unix timestamp of revocation\\n event IdentityRevokedDetailed(\\n address indexed user,\\n address indexed registrar,\\n uint256 indexed attestationId,\\n uint256 timestamp\\n );\\n\\n /// @notice Emitted when a user grants access to their encrypted data\\n /// @param user Address of the user granting access\\n /// @param grantee Address receiving access permission\\n event AccessGranted(address indexed user, address indexed grantee);\\n\\n /// @notice Emitted when ownership transfer is initiated\\n /// @param currentOwner Current owner address\\n /// @param pendingOwner Address that can accept ownership\\n event OwnershipTransferStarted(address indexed currentOwner, address indexed pendingOwner);\\n\\n /// @notice Emitted when ownership transfer is completed\\n /// @param previousOwner Previous owner address\\n /// @param newOwner New owner address\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n // ============ Errors ============\\n\\n /// @notice Thrown when caller is not the contract owner\\n error OnlyOwner();\\n\\n /// @notice Thrown when caller is not the pending owner\\n error OnlyPendingOwner();\\n\\n /// @notice Thrown when new owner is the zero address\\n error InvalidOwner();\\n\\n /// @notice Thrown when caller is not an authorized registrar\\n error OnlyRegistrar();\\n\\n /// @notice Thrown when querying a user without attestation\\n error NotAttested();\\n\\n /// @notice Thrown when attempting to attest an already-attested user\\n error AlreadyAttested();\\n\\n // ============ Registrar Management ============\\n\\n /// @notice Add a new authorized registrar\\n /// @param registrar Address to authorize as registrar\\n function addRegistrar(address registrar) external;\\n\\n /// @notice Remove an authorized registrar\\n /// @param registrar Address to remove from registrars\\n function removeRegistrar(address registrar) external;\\n\\n // ============ Identity Attestation ============\\n\\n /// @notice Attest a user's encrypted identity data on-chain\\n /// @param user Address of the user being attested\\n /// @param encBirthYearOffset Encrypted birth year offset (years since 1900)\\n /// @param encCountryCode Encrypted ISO 3166-1 numeric country code\\n /// @param encComplianceLevel Encrypted compliance verification level (0-3)\\n /// @param encIsBlacklisted Encrypted blacklist status\\n /// @param inputProof FHE proof for encrypted inputs\\n function attestIdentity(\\n address user,\\n externalEuint8 encBirthYearOffset,\\n externalEuint16 encCountryCode,\\n externalEuint8 encComplianceLevel,\\n externalEbool encIsBlacklisted,\\n bytes calldata inputProof\\n ) external;\\n\\n /// @notice Revoke a user's identity attestation\\n /// @param user Address of the user to revoke\\n function revokeIdentity(address user) external;\\n\\n // ============ Encrypted Queries ============\\n\\n /// @notice Get user's encrypted birth year offset\\n /// @param user Address of the user\\n /// @return Encrypted birth year offset (years since 1900)\\n function getBirthYearOffset(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted country code\\n /// @param user Address of the user\\n /// @return Encrypted ISO 3166-1 numeric country code\\n function getCountryCode(address user) external view returns (euint16);\\n\\n /// @notice Get user's encrypted compliance level\\n /// @param user Address of the user\\n /// @return Encrypted compliance (KYC) verification level (0-3)\\n function getComplianceLevel(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted blacklist status\\n /// @param user Address of the user\\n /// @return Encrypted blacklist status (true if blacklisted)\\n function getBlacklistStatus(address user) external view returns (ebool);\\n\\n // ============ Verification Helpers ============\\n\\n /// @notice Check if user has minimum compliance level (encrypted comparison)\\n /// @param user Address of the user\\n /// @param minLevel Minimum compliance level required\\n /// @return Encrypted boolean result of comparison\\n function hasMinComplianceLevel(address user, uint8 minLevel) external returns (ebool);\\n\\n /// @notice Check if user is from a specific country (encrypted comparison)\\n /// @param user Address of the user\\n /// @param country ISO 3166-1 numeric country code to check\\n /// @return Encrypted boolean result of comparison\\n function isFromCountry(address user, uint16 country) external returns (ebool);\\n\\n /// @notice Check if user is not blacklisted (encrypted)\\n /// @param user Address of the user\\n /// @return Encrypted boolean (true if NOT blacklisted)\\n function isNotBlacklisted(address user) external returns (ebool);\\n\\n // ============ Access Control ============\\n\\n /// @notice Grant a contract access to caller's encrypted identity data\\n /// @param grantee Address to grant access to\\n function grantAccessTo(address grantee) external;\\n\\n /// @notice Check if a user has been attested\\n /// @param user Address of the user\\n /// @return True if user has valid attestation\\n function isAttested(address user) external view returns (bool);\\n\\n // ============ Public State ============\\n\\n /// @notice Get the contract owner address\\n /// @return Owner address\\n function owner() external view returns (address);\\n\\n /// @notice Get the pending owner address\\n /// @return Pending owner address\\n function pendingOwner() external view returns (address);\\n\\n /// @notice Initiate transfer of contract ownership\\n /// @param newOwner Address that can accept ownership\\n function transferOwnership(address newOwner) external;\\n\\n /// @notice Accept ownership transfer\\n function acceptOwnership() external;\\n\\n /// @notice Check if an address is an authorized registrar\\n /// @param registrar Address to check\\n /// @return True if address is authorized registrar\\n function registrars(address registrar) external view returns (bool);\\n\\n /// @notice Get the timestamp when a user was attested\\n /// @param user Address of the user\\n /// @return Unix timestamp of attestation (0 if not attested)\\n function attestationTimestamp(address user) external view returns (uint256);\\n\\n /// @notice Get the current attestation id for a user (0 if not attested)\\n /// @param user Address of the user\\n /// @return Current attestation id\\n function currentAttestationId(address user) external view returns (uint256);\\n\\n /// @notice Get the latest attestation id ever issued for a user\\n /// @param user Address of the user\\n /// @return Latest attestation id\\n function latestAttestationId(address user) external view returns (uint256);\\n\\n /// @notice Get attestation metadata for a user and attestation id\\n /// @param user Address of the user\\n /// @param attestationId Attestation identifier to query\\n /// @return timestamp Unix timestamp of attestation\\n /// @return revokedAt Unix timestamp of revocation (0 if not revoked)\\n /// @return registrar Registrar who performed the attestation\\n function getAttestationMetadata(\\n address user,\\n uint256 attestationId\\n ) external view returns (uint256 timestamp, uint256 revokedAt, address registrar);\\n}\\n\",\"keccak256\":\"0x3b1b0ba4e94352be9eb3c0f1be18f3a73a66b95087b509894df233b659dbbfa9\",\"license\":\"MIT\"},\"encrypted-types/EncryptedTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\ntype ebool is bytes32;\\n\\ntype euint8 is bytes32;\\ntype euint16 is bytes32;\\ntype euint24 is bytes32;\\ntype euint32 is bytes32;\\ntype euint40 is bytes32;\\ntype euint48 is bytes32;\\ntype euint56 is bytes32;\\ntype euint64 is bytes32;\\ntype euint72 is bytes32;\\ntype euint80 is bytes32;\\ntype euint88 is bytes32;\\ntype euint96 is bytes32;\\ntype euint104 is bytes32;\\ntype euint112 is bytes32;\\ntype euint120 is bytes32;\\ntype euint128 is bytes32;\\ntype euint136 is bytes32;\\ntype euint144 is bytes32;\\ntype euint152 is bytes32;\\ntype euint160 is bytes32;\\ntype euint168 is bytes32;\\ntype euint176 is bytes32;\\ntype euint184 is bytes32;\\ntype euint192 is bytes32;\\ntype euint200 is bytes32;\\ntype euint208 is bytes32;\\ntype euint216 is bytes32;\\ntype euint224 is bytes32;\\ntype euint232 is bytes32;\\ntype euint240 is bytes32;\\ntype euint248 is bytes32;\\ntype euint256 is bytes32;\\n\\ntype eint8 is bytes32;\\ntype eint16 is bytes32;\\ntype eint24 is bytes32;\\ntype eint32 is bytes32;\\ntype eint40 is bytes32;\\ntype eint48 is bytes32;\\ntype eint56 is bytes32;\\ntype eint64 is bytes32;\\ntype eint72 is bytes32;\\ntype eint80 is bytes32;\\ntype eint88 is bytes32;\\ntype eint96 is bytes32;\\ntype eint104 is bytes32;\\ntype eint112 is bytes32;\\ntype eint120 is bytes32;\\ntype eint128 is bytes32;\\ntype eint136 is bytes32;\\ntype eint144 is bytes32;\\ntype eint152 is bytes32;\\ntype eint160 is bytes32;\\ntype eint168 is bytes32;\\ntype eint176 is bytes32;\\ntype eint184 is bytes32;\\ntype eint192 is bytes32;\\ntype eint200 is bytes32;\\ntype eint208 is bytes32;\\ntype eint216 is bytes32;\\ntype eint224 is bytes32;\\ntype eint232 is bytes32;\\ntype eint240 is bytes32;\\ntype eint248 is bytes32;\\ntype eint256 is bytes32;\\n\\ntype eaddress is bytes32;\\n\\ntype ebytes1 is bytes32;\\ntype ebytes2 is bytes32;\\ntype ebytes3 is bytes32;\\ntype ebytes4 is bytes32;\\ntype ebytes5 is bytes32;\\ntype ebytes6 is bytes32;\\ntype ebytes7 is bytes32;\\ntype ebytes8 is bytes32;\\ntype ebytes9 is bytes32;\\ntype ebytes10 is bytes32;\\ntype ebytes11 is bytes32;\\ntype ebytes12 is bytes32;\\ntype ebytes13 is bytes32;\\ntype ebytes14 is bytes32;\\ntype ebytes15 is bytes32;\\ntype ebytes16 is bytes32;\\ntype ebytes17 is bytes32;\\ntype ebytes18 is bytes32;\\ntype ebytes19 is bytes32;\\ntype ebytes20 is bytes32;\\ntype ebytes21 is bytes32;\\ntype ebytes22 is bytes32;\\ntype ebytes23 is bytes32;\\ntype ebytes24 is bytes32;\\ntype ebytes25 is bytes32;\\ntype ebytes26 is bytes32;\\ntype ebytes27 is bytes32;\\ntype ebytes28 is bytes32;\\ntype ebytes29 is bytes32;\\ntype ebytes30 is bytes32;\\ntype ebytes31 is bytes32;\\ntype ebytes32 is bytes32;\\n\\ntype externalEbool is bytes32;\\n\\ntype externalEuint8 is bytes32;\\ntype externalEuint16 is bytes32;\\ntype externalEuint24 is bytes32;\\ntype externalEuint32 is bytes32;\\ntype externalEuint40 is bytes32;\\ntype externalEuint48 is bytes32;\\ntype externalEuint56 is bytes32;\\ntype externalEuint64 is bytes32;\\ntype externalEuint72 is bytes32;\\ntype externalEuint80 is bytes32;\\ntype externalEuint88 is bytes32;\\ntype externalEuint96 is bytes32;\\ntype externalEuint104 is bytes32;\\ntype externalEuint112 is bytes32;\\ntype externalEuint120 is bytes32;\\ntype externalEuint128 is bytes32;\\ntype externalEuint136 is bytes32;\\ntype externalEuint144 is bytes32;\\ntype externalEuint152 is bytes32;\\ntype externalEuint160 is bytes32;\\ntype externalEuint168 is bytes32;\\ntype externalEuint176 is bytes32;\\ntype externalEuint184 is bytes32;\\ntype externalEuint192 is bytes32;\\ntype externalEuint200 is bytes32;\\ntype externalEuint208 is bytes32;\\ntype externalEuint216 is bytes32;\\ntype externalEuint224 is bytes32;\\ntype externalEuint232 is bytes32;\\ntype externalEuint240 is bytes32;\\ntype externalEuint248 is bytes32;\\ntype externalEuint256 is bytes32;\\n\\ntype externalEint8 is bytes32;\\ntype externalEint16 is bytes32;\\ntype externalEint24 is bytes32;\\ntype externalEint32 is bytes32;\\ntype externalEint40 is bytes32;\\ntype externalEint48 is bytes32;\\ntype externalEint56 is bytes32;\\ntype externalEint64 is bytes32;\\ntype externalEint72 is bytes32;\\ntype externalEint80 is bytes32;\\ntype externalEint88 is bytes32;\\ntype externalEint96 is bytes32;\\ntype externalEint104 is bytes32;\\ntype externalEint112 is bytes32;\\ntype externalEint120 is bytes32;\\ntype externalEint128 is bytes32;\\ntype externalEint136 is bytes32;\\ntype externalEint144 is bytes32;\\ntype externalEint152 is bytes32;\\ntype externalEint160 is bytes32;\\ntype externalEint168 is bytes32;\\ntype externalEint176 is bytes32;\\ntype externalEint184 is bytes32;\\ntype externalEint192 is bytes32;\\ntype externalEint200 is bytes32;\\ntype externalEint208 is bytes32;\\ntype externalEint216 is bytes32;\\ntype externalEint224 is bytes32;\\ntype externalEint232 is bytes32;\\ntype externalEint240 is bytes32;\\ntype externalEint248 is bytes32;\\ntype externalEint256 is bytes32;\\n\\ntype externalEaddress is bytes32;\\n\\ntype externalEbytes1 is bytes32;\\ntype externalEbytes2 is bytes32;\\ntype externalEbytes3 is bytes32;\\ntype externalEbytes4 is bytes32;\\ntype externalEbytes5 is bytes32;\\ntype externalEbytes6 is bytes32;\\ntype externalEbytes7 is bytes32;\\ntype externalEbytes8 is bytes32;\\ntype externalEbytes9 is bytes32;\\ntype externalEbytes10 is bytes32;\\ntype externalEbytes11 is bytes32;\\ntype externalEbytes12 is bytes32;\\ntype externalEbytes13 is bytes32;\\ntype externalEbytes14 is bytes32;\\ntype externalEbytes15 is bytes32;\\ntype externalEbytes16 is bytes32;\\ntype externalEbytes17 is bytes32;\\ntype externalEbytes18 is bytes32;\\ntype externalEbytes19 is bytes32;\\ntype externalEbytes20 is bytes32;\\ntype externalEbytes21 is bytes32;\\ntype externalEbytes22 is bytes32;\\ntype externalEbytes23 is bytes32;\\ntype externalEbytes24 is bytes32;\\ntype externalEbytes25 is bytes32;\\ntype externalEbytes26 is bytes32;\\ntype externalEbytes27 is bytes32;\\ntype externalEbytes28 is bytes32;\\ntype externalEbytes29 is bytes32;\\ntype externalEbytes30 is bytes32;\\ntype externalEbytes31 is bytes32;\\ntype externalEbytes32 is bytes32;\\n\",\"keccak256\":\"0x5da9799cd5c30067ea946164722197151baee1f2579a76f01874d4fb25df02a3\",\"license\":\"MIT\"}},\"version\":1}",
|
|
375
|
-
"bytecode": "
|
|
376
|
-
"deployedBytecode": "
|
|
395
|
+
"args": ["0xa90723A47A14437500645Ece6049d0128A2f256D", 1],
|
|
396
|
+
"numDeployments": 1,
|
|
397
|
+
"solcInputHash": "c6ed5622dcd0cd73a6be490856a99482",
|
|
398
|
+
"metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"initialMinComplianceLevel\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessProhibited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotAuthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZamaProtocolUnsupported\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"AuthorizedCallerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"ComplianceChecked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"MinComplianceLevelUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"authorizedCallers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"authorized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"checkCompliance\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"allowedCountry\",\"type\":\"uint16\"}],\"name\":\"checkComplianceWithCountry\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"confidentialProtocolId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getComplianceResult\",\"outputs\":[{\"internalType\":\"ebool\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"hasComplianceResult\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityRegistry\",\"outputs\":[{\"internalType\":\"contract IIdentityRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minComplianceLevel\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"setAuthorizedCaller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newLevel\",\"type\":\"uint8\"}],\"name\":\"setMinComplianceLevel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Gustavo Valverde\",\"details\":\"Not proxied \\u2014 can be redeployed independently. Delegates to the registry's combined checkCompliance() for the standard case, and composes individual checks for country-restricted scenarios.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"title\":\"ComplianceRules\",\"version\":1},\"userdoc\":{\"errors\":{\"ZamaProtocolUnsupported()\":[{\"notice\":\"Returned if the Zama protocol is not supported on the current chain\"}]},\"kind\":\"user\",\"methods\":{\"checkCompliance(address)\":{\"notice\":\"Check if user passes compliance (level + blacklist)\"},\"checkComplianceWithCountry(address,uint16)\":{\"notice\":\"Check compliance with additional country restriction\"},\"getComplianceResult(address)\":{\"notice\":\"Get the last cached compliance result\"},\"hasComplianceResult(address)\":{\"notice\":\"Whether a cached compliance result exists\"}},\"notice\":\"Compliance aggregation contract combining registry checks via FHE.and()\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/compliance/ComplianceRules.sol\":\"ComplianceRules\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@fhevm/solidity/config/ZamaConfig.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FHE} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {CoprocessorConfig} from \\\"@fhevm/solidity/lib/Impl.sol\\\";\\n\\n/**\\n * @title ZamaConfig.\\n * @notice This library returns the FHEVM config for different networks\\n * with the contract addresses for (1) ACL, (2) CoprocessorAddress, (3) KMSVerifier,\\n * which are deployed & maintained by Zama.\\n */\\nlibrary ZamaConfig {\\n /// @notice Returned if the Zama protocol is not supported on the current chain\\n error ZamaProtocolUnsupported();\\n\\n function getEthereumCoprocessorConfig() internal view returns (CoprocessorConfig memory config) {\\n if (block.chainid == 1) {\\n config = _getEthereumConfig();\\n } else if (block.chainid == 11155111) {\\n config = _getSepoliaConfig();\\n } else if (block.chainid == 31337) {\\n config = _getLocalConfig();\\n } else {\\n revert ZamaProtocolUnsupported();\\n }\\n }\\n\\n function getConfidentialProtocolId() internal view returns (uint256) {\\n if (block.chainid == 1) {\\n return _getEthereumProtocolId();\\n } else if (block.chainid == 11155111) {\\n return _getSepoliaProtocolId();\\n } else if (block.chainid == 31337) {\\n return _getLocalProtocolId();\\n }\\n return 0;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumProtocolId() private pure returns (uint256) {\\n // Zama Ethereum protocol id is '1'\\n return 1;\\n }\\n\\n /// @dev chainid == 1\\n function _getEthereumConfig() private pure returns (CoprocessorConfig memory) {\\n // The addresses below are placeholders and should be replaced with actual addresses\\n // once deployed on the Ethereum mainnet.\\n return\\n CoprocessorConfig({ACLAddress: address(0), CoprocessorAddress: address(0), KMSVerifierAddress: address(0)});\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaProtocolId() private pure returns (uint256) {\\n // Zama Ethereum Sepolia protocol id is '10000 + Zama Ethereum protocol id'\\n return 10001;\\n }\\n\\n /// @dev chainid == 11155111\\n function _getSepoliaConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n\\n /// @dev chainid == 31337\\n function _getLocalProtocolId() private pure returns (uint256) {\\n return type(uint256).max;\\n }\\n\\n function _getLocalConfig() private pure returns (CoprocessorConfig memory) {\\n return\\n CoprocessorConfig({\\n ACLAddress: 0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D,\\n CoprocessorAddress: 0x92C920834Ec8941d2C77D188936E1f7A6f49c127,\\n KMSVerifierAddress: 0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\\n });\\n }\\n}\\n\\n/**\\n * @title ZamaEthereumConfig.\\n * @dev This contract can be inherited by a contract wishing to use the FHEVM contracts provided by Zama\\n * on the Ethereum (mainnet) network (chainId = 1) or Sepolia (testnet) network (chainId = 11155111).\\n * Other providers may offer similar contracts deployed at different addresses.\\n * If you wish to use them, you should rely on the instructions from these providers.\\n */\\nabstract contract ZamaEthereumConfig {\\n constructor() {\\n FHE.setCoprocessor(ZamaConfig.getEthereumCoprocessorConfig());\\n }\\n\\n function confidentialProtocolId() public view returns (uint256) {\\n return ZamaConfig.getConfidentialProtocolId();\\n }\\n}\\n\",\"keccak256\":\"0xa6e5421fb2a631825a980896055598620b5959bd1f5222031d95515fc1eb2a99\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FHE.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport \\\"./Impl.sol\\\";\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\nimport \\\"encrypted-types/EncryptedTypes.sol\\\";\\n\\n/**\\n * @title IKMSVerifier\\n * @notice This interface contains the only function required from KMSVerifier.\\n */\\ninterface IKMSVerifier {\\n function verifyDecryptionEIP712KMSSignatures(\\n bytes32[] memory handlesList,\\n bytes memory decryptedResult,\\n bytes memory decryptionProof\\n ) external returns (bool);\\n}\\n\\n/**\\n * @title FHE\\n * @notice This library is the interaction point for all smart contract developers\\n * that interact with the FHEVM protocol.\\n */\\nlibrary FHE {\\n /// @notice Returned if the returned KMS signatures are not valid.\\n error InvalidKMSSignatures();\\n\\n /// @notice This event is emitted when public decryption has been successfully verified.\\n event PublicDecryptionVerified(bytes32[] handlesList, bytes abiEncodedCleartexts);\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n Impl.setCoprocessor(coprocessorConfig);\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(ebool v) internal pure returns (bool) {\\n return ebool.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint8 v) internal pure returns (bool) {\\n return euint8.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint16 v) internal pure returns (bool) {\\n return euint16.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint32 v) internal pure returns (bool) {\\n return euint32.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint64 v) internal pure returns (bool) {\\n return euint64.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint128 v) internal pure returns (bool) {\\n return euint128.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(eaddress v) internal pure returns (bool) {\\n return eaddress.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Returns true if the encrypted integer is initialized and false otherwise.\\n */\\n function isInitialized(euint256 v) internal pure returns (bool) {\\n return euint256.unwrap(v) != 0;\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, ebool b) and returns the result.\\n */\\n function and(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, ebool b) and returns the result.\\n */\\n function or(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, ebool b) and returns the result.\\n */\\n function xor(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, ebool b) and returns the result.\\n */\\n function eq(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, ebool b) and returns the result.\\n */\\n function ne(ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), ebool.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint8 b) and returns the result.\\n */\\n function add(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint8 b) and returns the result.\\n */\\n function sub(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint8 b) and returns the result.\\n */\\n function mul(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint8 b) and returns the result.\\n */\\n function and(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint8 b) and returns the result.\\n */\\n function or(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint8 b) and returns the result.\\n */\\n function xor(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint8 b) and returns the result.\\n */\\n function eq(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint8 b) and returns the result.\\n */\\n function ne(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint8 b) and returns the result.\\n */\\n function ge(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint8 b) and returns the result.\\n */\\n function gt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint8 b) and returns the result.\\n */\\n function le(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint8 b) and returns the result.\\n */\\n function lt(euint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint8 b) and returns the result.\\n */\\n function min(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint8 b) and returns the result.\\n */\\n function max(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint16 b) and returns the result.\\n */\\n function add(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint16 b) and returns the result.\\n */\\n function sub(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint16 b) and returns the result.\\n */\\n function mul(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint16 b) and returns the result.\\n */\\n function and(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint16 b) and returns the result.\\n */\\n function or(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint16 b) and returns the result.\\n */\\n function xor(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint16 b) and returns the result.\\n */\\n function eq(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint16 b) and returns the result.\\n */\\n function ne(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint16 b) and returns the result.\\n */\\n function ge(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint16 b) and returns the result.\\n */\\n function gt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint16 b) and returns the result.\\n */\\n function le(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint16 b) and returns the result.\\n */\\n function lt(euint8 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint16 b) and returns the result.\\n */\\n function min(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint16 b) and returns the result.\\n */\\n function max(euint8 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(asEuint16(a)), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint32 b) and returns the result.\\n */\\n function add(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint32 b) and returns the result.\\n */\\n function sub(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint32 b) and returns the result.\\n */\\n function mul(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint32 b) and returns the result.\\n */\\n function and(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint32 b) and returns the result.\\n */\\n function or(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint32 b) and returns the result.\\n */\\n function xor(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint32 b) and returns the result.\\n */\\n function eq(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint32 b) and returns the result.\\n */\\n function ne(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint32 b) and returns the result.\\n */\\n function ge(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint32 b) and returns the result.\\n */\\n function gt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint32 b) and returns the result.\\n */\\n function le(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint32 b) and returns the result.\\n */\\n function lt(euint8 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint32 b) and returns the result.\\n */\\n function min(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint32 b) and returns the result.\\n */\\n function max(euint8 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint64 b) and returns the result.\\n */\\n function add(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint64 b) and returns the result.\\n */\\n function sub(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint64 b) and returns the result.\\n */\\n function mul(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint64 b) and returns the result.\\n */\\n function and(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint64 b) and returns the result.\\n */\\n function or(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint64 b) and returns the result.\\n */\\n function xor(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint64 b) and returns the result.\\n */\\n function eq(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint64 b) and returns the result.\\n */\\n function ne(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint64 b) and returns the result.\\n */\\n function ge(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint64 b) and returns the result.\\n */\\n function gt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint64 b) and returns the result.\\n */\\n function le(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint64 b) and returns the result.\\n */\\n function lt(euint8 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint64 b) and returns the result.\\n */\\n function min(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint64 b) and returns the result.\\n */\\n function max(euint8 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, euint128 b) and returns the result.\\n */\\n function add(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, euint128 b) and returns the result.\\n */\\n function sub(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, euint128 b) and returns the result.\\n */\\n function mul(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint128 b) and returns the result.\\n */\\n function and(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint128 b) and returns the result.\\n */\\n function or(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint128 b) and returns the result.\\n */\\n function xor(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint128 b) and returns the result.\\n */\\n function eq(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint128 b) and returns the result.\\n */\\n function ne(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, euint128 b) and returns the result.\\n */\\n function ge(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, euint128 b) and returns the result.\\n */\\n function gt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, euint128 b) and returns the result.\\n */\\n function le(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, euint128 b) and returns the result.\\n */\\n function lt(euint8 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, euint128 b) and returns the result.\\n */\\n function min(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, euint128 b) and returns the result.\\n */\\n function max(euint8 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, euint256 b) and returns the result.\\n */\\n function and(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, euint256 b) and returns the result.\\n */\\n function or(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, euint256 b) and returns the result.\\n */\\n function xor(euint8 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, euint256 b) and returns the result.\\n */\\n function eq(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, euint256 b) and returns the result.\\n */\\n function ne(euint8 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint8 b) and returns the result.\\n */\\n function add(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint8 b) and returns the result.\\n */\\n function sub(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint8 b) and returns the result.\\n */\\n function mul(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint8 b) and returns the result.\\n */\\n function and(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint8 b) and returns the result.\\n */\\n function or(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint8 b) and returns the result.\\n */\\n function xor(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint8 b) and returns the result.\\n */\\n function eq(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint8 b) and returns the result.\\n */\\n function ne(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint8 b) and returns the result.\\n */\\n function ge(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint8 b) and returns the result.\\n */\\n function gt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint8 b) and returns the result.\\n */\\n function le(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint8 b) and returns the result.\\n */\\n function lt(euint16 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint8 b) and returns the result.\\n */\\n function min(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint8 b) and returns the result.\\n */\\n function max(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint16 b) and returns the result.\\n */\\n function add(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint16 b) and returns the result.\\n */\\n function sub(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint16 b) and returns the result.\\n */\\n function mul(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint16 b) and returns the result.\\n */\\n function and(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint16 b) and returns the result.\\n */\\n function or(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint16 b) and returns the result.\\n */\\n function xor(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint16 b) and returns the result.\\n */\\n function eq(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint16 b) and returns the result.\\n */\\n function ne(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint16 b) and returns the result.\\n */\\n function ge(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint16 b) and returns the result.\\n */\\n function gt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint16 b) and returns the result.\\n */\\n function le(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint16 b) and returns the result.\\n */\\n function lt(euint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint16 b) and returns the result.\\n */\\n function min(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint16 b) and returns the result.\\n */\\n function max(euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint32 b) and returns the result.\\n */\\n function add(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint32 b) and returns the result.\\n */\\n function sub(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint32 b) and returns the result.\\n */\\n function mul(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint32 b) and returns the result.\\n */\\n function and(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint32 b) and returns the result.\\n */\\n function or(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint32 b) and returns the result.\\n */\\n function xor(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint32 b) and returns the result.\\n */\\n function eq(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint32 b) and returns the result.\\n */\\n function ne(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint32 b) and returns the result.\\n */\\n function ge(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint32 b) and returns the result.\\n */\\n function gt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint32 b) and returns the result.\\n */\\n function le(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint32 b) and returns the result.\\n */\\n function lt(euint16 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint32 b) and returns the result.\\n */\\n function min(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint32 b) and returns the result.\\n */\\n function max(euint16 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(asEuint32(a)), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint64 b) and returns the result.\\n */\\n function add(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint64 b) and returns the result.\\n */\\n function sub(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint64 b) and returns the result.\\n */\\n function mul(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint64 b) and returns the result.\\n */\\n function and(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint64 b) and returns the result.\\n */\\n function or(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint64 b) and returns the result.\\n */\\n function xor(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint64 b) and returns the result.\\n */\\n function eq(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint64 b) and returns the result.\\n */\\n function ne(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint64 b) and returns the result.\\n */\\n function ge(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint64 b) and returns the result.\\n */\\n function gt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint64 b) and returns the result.\\n */\\n function le(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint64 b) and returns the result.\\n */\\n function lt(euint16 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint64 b) and returns the result.\\n */\\n function min(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint64 b) and returns the result.\\n */\\n function max(euint16 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, euint128 b) and returns the result.\\n */\\n function add(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, euint128 b) and returns the result.\\n */\\n function sub(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, euint128 b) and returns the result.\\n */\\n function mul(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint128 b) and returns the result.\\n */\\n function and(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint128 b) and returns the result.\\n */\\n function or(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint128 b) and returns the result.\\n */\\n function xor(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint128 b) and returns the result.\\n */\\n function eq(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint128 b) and returns the result.\\n */\\n function ne(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, euint128 b) and returns the result.\\n */\\n function ge(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, euint128 b) and returns the result.\\n */\\n function gt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, euint128 b) and returns the result.\\n */\\n function le(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, euint128 b) and returns the result.\\n */\\n function lt(euint16 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, euint128 b) and returns the result.\\n */\\n function min(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, euint128 b) and returns the result.\\n */\\n function max(euint16 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, euint256 b) and returns the result.\\n */\\n function and(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, euint256 b) and returns the result.\\n */\\n function or(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, euint256 b) and returns the result.\\n */\\n function xor(euint16 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, euint256 b) and returns the result.\\n */\\n function eq(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, euint256 b) and returns the result.\\n */\\n function ne(euint16 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint8 b) and returns the result.\\n */\\n function add(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint8 b) and returns the result.\\n */\\n function sub(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint8 b) and returns the result.\\n */\\n function mul(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint8 b) and returns the result.\\n */\\n function and(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint8 b) and returns the result.\\n */\\n function or(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint8 b) and returns the result.\\n */\\n function xor(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint8 b) and returns the result.\\n */\\n function eq(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint8 b) and returns the result.\\n */\\n function ne(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint8 b) and returns the result.\\n */\\n function ge(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint8 b) and returns the result.\\n */\\n function gt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint8 b) and returns the result.\\n */\\n function le(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint8 b) and returns the result.\\n */\\n function lt(euint32 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint8 b) and returns the result.\\n */\\n function min(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint8 b) and returns the result.\\n */\\n function max(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint16 b) and returns the result.\\n */\\n function add(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint16 b) and returns the result.\\n */\\n function sub(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint16 b) and returns the result.\\n */\\n function mul(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint16 b) and returns the result.\\n */\\n function and(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint16 b) and returns the result.\\n */\\n function or(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint16 b) and returns the result.\\n */\\n function xor(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint16 b) and returns the result.\\n */\\n function eq(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint16 b) and returns the result.\\n */\\n function ne(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint16 b) and returns the result.\\n */\\n function ge(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint16 b) and returns the result.\\n */\\n function gt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint16 b) and returns the result.\\n */\\n function le(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint16 b) and returns the result.\\n */\\n function lt(euint32 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint16 b) and returns the result.\\n */\\n function min(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint16 b) and returns the result.\\n */\\n function max(euint32 a, euint16 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint32 b) and returns the result.\\n */\\n function add(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint32 b) and returns the result.\\n */\\n function sub(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint32 b) and returns the result.\\n */\\n function mul(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint32 b) and returns the result.\\n */\\n function and(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint32 b) and returns the result.\\n */\\n function or(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint32 b) and returns the result.\\n */\\n function xor(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint32 b) and returns the result.\\n */\\n function eq(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint32 b) and returns the result.\\n */\\n function ne(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint32 b) and returns the result.\\n */\\n function ge(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint32 b) and returns the result.\\n */\\n function gt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint32 b) and returns the result.\\n */\\n function le(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint32 b) and returns the result.\\n */\\n function lt(euint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint32 b) and returns the result.\\n */\\n function min(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint32 b) and returns the result.\\n */\\n function max(euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint64 b) and returns the result.\\n */\\n function add(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint64 b) and returns the result.\\n */\\n function sub(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint64 b) and returns the result.\\n */\\n function mul(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint64 b) and returns the result.\\n */\\n function and(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint64 b) and returns the result.\\n */\\n function or(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint64 b) and returns the result.\\n */\\n function xor(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint64 b) and returns the result.\\n */\\n function eq(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint64 b) and returns the result.\\n */\\n function ne(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint64 b) and returns the result.\\n */\\n function ge(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint64 b) and returns the result.\\n */\\n function gt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint64 b) and returns the result.\\n */\\n function le(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint64 b) and returns the result.\\n */\\n function lt(euint32 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint64 b) and returns the result.\\n */\\n function min(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint64 b) and returns the result.\\n */\\n function max(euint32 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(asEuint64(a)), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, euint128 b) and returns the result.\\n */\\n function add(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, euint128 b) and returns the result.\\n */\\n function sub(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, euint128 b) and returns the result.\\n */\\n function mul(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint128 b) and returns the result.\\n */\\n function and(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint128 b) and returns the result.\\n */\\n function or(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint128 b) and returns the result.\\n */\\n function xor(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint128 b) and returns the result.\\n */\\n function eq(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint128 b) and returns the result.\\n */\\n function ne(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, euint128 b) and returns the result.\\n */\\n function ge(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, euint128 b) and returns the result.\\n */\\n function gt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, euint128 b) and returns the result.\\n */\\n function le(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, euint128 b) and returns the result.\\n */\\n function lt(euint32 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, euint128 b) and returns the result.\\n */\\n function min(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, euint128 b) and returns the result.\\n */\\n function max(euint32 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, euint256 b) and returns the result.\\n */\\n function and(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, euint256 b) and returns the result.\\n */\\n function or(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, euint256 b) and returns the result.\\n */\\n function xor(euint32 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, euint256 b) and returns the result.\\n */\\n function eq(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, euint256 b) and returns the result.\\n */\\n function ne(euint32 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint8 b) and returns the result.\\n */\\n function add(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint8 b) and returns the result.\\n */\\n function sub(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint8 b) and returns the result.\\n */\\n function mul(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint8 b) and returns the result.\\n */\\n function and(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint8 b) and returns the result.\\n */\\n function or(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint8 b) and returns the result.\\n */\\n function xor(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint8 b) and returns the result.\\n */\\n function eq(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint8 b) and returns the result.\\n */\\n function ne(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint8 b) and returns the result.\\n */\\n function ge(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint8 b) and returns the result.\\n */\\n function gt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint8 b) and returns the result.\\n */\\n function le(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint8 b) and returns the result.\\n */\\n function lt(euint64 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint8 b) and returns the result.\\n */\\n function min(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint8 b) and returns the result.\\n */\\n function max(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint16 b) and returns the result.\\n */\\n function add(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint16 b) and returns the result.\\n */\\n function sub(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint16 b) and returns the result.\\n */\\n function mul(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint16 b) and returns the result.\\n */\\n function and(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint16 b) and returns the result.\\n */\\n function or(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint16 b) and returns the result.\\n */\\n function xor(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint16 b) and returns the result.\\n */\\n function eq(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint16 b) and returns the result.\\n */\\n function ne(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint16 b) and returns the result.\\n */\\n function ge(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint16 b) and returns the result.\\n */\\n function gt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint16 b) and returns the result.\\n */\\n function le(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint16 b) and returns the result.\\n */\\n function lt(euint64 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint16 b) and returns the result.\\n */\\n function min(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint16 b) and returns the result.\\n */\\n function max(euint64 a, euint16 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint32 b) and returns the result.\\n */\\n function add(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint32 b) and returns the result.\\n */\\n function sub(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint32 b) and returns the result.\\n */\\n function mul(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint32 b) and returns the result.\\n */\\n function and(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint32 b) and returns the result.\\n */\\n function or(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint32 b) and returns the result.\\n */\\n function xor(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint32 b) and returns the result.\\n */\\n function eq(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint32 b) and returns the result.\\n */\\n function ne(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint32 b) and returns the result.\\n */\\n function ge(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint32 b) and returns the result.\\n */\\n function gt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint32 b) and returns the result.\\n */\\n function le(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint32 b) and returns the result.\\n */\\n function lt(euint64 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint32 b) and returns the result.\\n */\\n function min(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint32 b) and returns the result.\\n */\\n function max(euint64 a, euint32 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint64 b) and returns the result.\\n */\\n function add(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint64 b) and returns the result.\\n */\\n function sub(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint64 b) and returns the result.\\n */\\n function mul(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint64 b) and returns the result.\\n */\\n function and(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint64 b) and returns the result.\\n */\\n function or(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint64 b) and returns the result.\\n */\\n function xor(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint64 b) and returns the result.\\n */\\n function eq(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint64 b) and returns the result.\\n */\\n function ne(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint64 b) and returns the result.\\n */\\n function ge(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint64 b) and returns the result.\\n */\\n function gt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint64 b) and returns the result.\\n */\\n function le(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint64 b) and returns the result.\\n */\\n function lt(euint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint64 b) and returns the result.\\n */\\n function min(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint64 b) and returns the result.\\n */\\n function max(euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, euint128 b) and returns the result.\\n */\\n function add(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, euint128 b) and returns the result.\\n */\\n function sub(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, euint128 b) and returns the result.\\n */\\n function mul(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint128 b) and returns the result.\\n */\\n function and(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint128 b) and returns the result.\\n */\\n function or(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint128 b) and returns the result.\\n */\\n function xor(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint128 b) and returns the result.\\n */\\n function eq(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint128 b) and returns the result.\\n */\\n function ne(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, euint128 b) and returns the result.\\n */\\n function ge(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, euint128 b) and returns the result.\\n */\\n function gt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, euint128 b) and returns the result.\\n */\\n function le(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, euint128 b) and returns the result.\\n */\\n function lt(euint64 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, euint128 b) and returns the result.\\n */\\n function min(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, euint128 b) and returns the result.\\n */\\n function max(euint64 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(asEuint128(a)), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, euint256 b) and returns the result.\\n */\\n function and(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, euint256 b) and returns the result.\\n */\\n function or(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, euint256 b) and returns the result.\\n */\\n function xor(euint64 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, euint256 b) and returns the result.\\n */\\n function eq(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, euint256 b) and returns the result.\\n */\\n function ne(euint64 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint8 b) and returns the result.\\n */\\n function add(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint8 b) and returns the result.\\n */\\n function sub(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint8 b) and returns the result.\\n */\\n function mul(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint8 b) and returns the result.\\n */\\n function and(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint8 b) and returns the result.\\n */\\n function or(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint8 b) and returns the result.\\n */\\n function xor(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint8 b) and returns the result.\\n */\\n function eq(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint8 b) and returns the result.\\n */\\n function ne(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint8 b) and returns the result.\\n */\\n function ge(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint8 b) and returns the result.\\n */\\n function gt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint8 b) and returns the result.\\n */\\n function le(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint8 b) and returns the result.\\n */\\n function lt(euint128 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint8 b) and returns the result.\\n */\\n function min(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint8 b) and returns the result.\\n */\\n function max(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint16 b) and returns the result.\\n */\\n function add(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint16 b) and returns the result.\\n */\\n function sub(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint16 b) and returns the result.\\n */\\n function mul(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint16 b) and returns the result.\\n */\\n function and(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint16 b) and returns the result.\\n */\\n function or(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint16 b) and returns the result.\\n */\\n function xor(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint16 b) and returns the result.\\n */\\n function eq(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint16 b) and returns the result.\\n */\\n function ne(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint16 b) and returns the result.\\n */\\n function ge(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint16 b) and returns the result.\\n */\\n function gt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint16 b) and returns the result.\\n */\\n function le(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint16 b) and returns the result.\\n */\\n function lt(euint128 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint16 b) and returns the result.\\n */\\n function min(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint16 b) and returns the result.\\n */\\n function max(euint128 a, euint16 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint32 b) and returns the result.\\n */\\n function add(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint32 b) and returns the result.\\n */\\n function sub(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint32 b) and returns the result.\\n */\\n function mul(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint32 b) and returns the result.\\n */\\n function and(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint32 b) and returns the result.\\n */\\n function or(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint32 b) and returns the result.\\n */\\n function xor(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint32 b) and returns the result.\\n */\\n function eq(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint32 b) and returns the result.\\n */\\n function ne(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint32 b) and returns the result.\\n */\\n function ge(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint32 b) and returns the result.\\n */\\n function gt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint32 b) and returns the result.\\n */\\n function le(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint32 b) and returns the result.\\n */\\n function lt(euint128 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint32 b) and returns the result.\\n */\\n function min(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint32 b) and returns the result.\\n */\\n function max(euint128 a, euint32 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint64 b) and returns the result.\\n */\\n function add(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint64 b) and returns the result.\\n */\\n function sub(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint64 b) and returns the result.\\n */\\n function mul(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint64 b) and returns the result.\\n */\\n function and(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint64 b) and returns the result.\\n */\\n function or(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint64 b) and returns the result.\\n */\\n function xor(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint64 b) and returns the result.\\n */\\n function eq(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint64 b) and returns the result.\\n */\\n function ne(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint64 b) and returns the result.\\n */\\n function ge(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint64 b) and returns the result.\\n */\\n function gt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint64 b) and returns the result.\\n */\\n function le(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint64 b) and returns the result.\\n */\\n function lt(euint128 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint64 b) and returns the result.\\n */\\n function min(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint64 b) and returns the result.\\n */\\n function max(euint128 a, euint64 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, euint128 b) and returns the result.\\n */\\n function add(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, euint128 b) and returns the result.\\n */\\n function sub(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, euint128 b) and returns the result.\\n */\\n function mul(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint128 b) and returns the result.\\n */\\n function and(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint128 b) and returns the result.\\n */\\n function or(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint128 b) and returns the result.\\n */\\n function xor(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint128 b) and returns the result.\\n */\\n function eq(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint128 b) and returns the result.\\n */\\n function ne(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, euint128 b) and returns the result.\\n */\\n function ge(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, euint128 b) and returns the result.\\n */\\n function gt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, euint128 b) and returns the result.\\n */\\n function le(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, euint128 b) and returns the result.\\n */\\n function lt(euint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, euint128 b) and returns the result.\\n */\\n function min(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, euint128 b) and returns the result.\\n */\\n function max(euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, euint256 b) and returns the result.\\n */\\n function and(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, euint256 b) and returns the result.\\n */\\n function or(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, euint256 b) and returns the result.\\n */\\n function xor(euint128 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, euint256 b) and returns the result.\\n */\\n function eq(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, euint256 b) and returns the result.\\n */\\n function ne(euint128 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(asEuint256(a)), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, eaddress b) and returns the result.\\n */\\n function eq(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, eaddress b) and returns the result.\\n */\\n function ne(eaddress a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), eaddress.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint8 b) and returns the result.\\n */\\n function and(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint8 b) and returns the result.\\n */\\n function or(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint8 b) and returns the result.\\n */\\n function xor(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint8 b) and returns the result.\\n */\\n function eq(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint8 b) and returns the result.\\n */\\n function ne(euint256 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint16 b) and returns the result.\\n */\\n function and(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint16 b) and returns the result.\\n */\\n function or(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint16 b) and returns the result.\\n */\\n function xor(euint256 a, euint16 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint16 b) and returns the result.\\n */\\n function eq(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint16 b) and returns the result.\\n */\\n function ne(euint256 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint32 b) and returns the result.\\n */\\n function and(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint32 b) and returns the result.\\n */\\n function or(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint32 b) and returns the result.\\n */\\n function xor(euint256 a, euint32 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint32 b) and returns the result.\\n */\\n function eq(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint32 b) and returns the result.\\n */\\n function ne(euint256 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint64 b) and returns the result.\\n */\\n function and(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint64 b) and returns the result.\\n */\\n function or(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint64 b) and returns the result.\\n */\\n function xor(euint256 a, euint64 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint64 b) and returns the result.\\n */\\n function eq(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint64 b) and returns the result.\\n */\\n function ne(euint256 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint128 b) and returns the result.\\n */\\n function and(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint128 b) and returns the result.\\n */\\n function or(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint128 b) and returns the result.\\n */\\n function xor(euint256 a, euint128 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint128 b) and returns the result.\\n */\\n function eq(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint128 b) and returns the result.\\n */\\n function ne(euint256 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, euint256 b) and returns the result.\\n */\\n function and(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, euint256 b) and returns the result.\\n */\\n function or(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, euint256 b) and returns the result.\\n */\\n function xor(euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, euint256 b) and returns the result.\\n */\\n function eq(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, euint256 b) and returns the result.\\n */\\n function ne(euint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), euint256.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates and(ebool a, bool b) and returns the result.\\n */\\n function and(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(bool a, ebool b) and returns the result.\\n */\\n function and(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.and(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(ebool a, bool b) and returns the result.\\n */\\n function or(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(bool a, ebool b) and returns the result.\\n */\\n function or(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.or(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(ebool a, bool b) and returns the result.\\n */\\n function xor(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(bool a, ebool b) and returns the result.\\n */\\n function xor(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.xor(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(ebool a, bool b) and returns the result.\\n */\\n function eq(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(bool a, ebool b) and returns the result.\\n */\\n function eq(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.eq(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(ebool a, bool b) and returns the result.\\n */\\n function ne(ebool a, bool b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(a), bytes32(uint256(b ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(bool a, ebool b) and returns the result.\\n */\\n function ne(bool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.ne(ebool.unwrap(b), bytes32(uint256(a ? 1 : 0)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint8 a, uint8 b) and returns the result.\\n */\\n function add(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint8 a, euint8 b) and returns the result.\\n */\\n function add(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.add(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint8 a, uint8 b) and returns the result.\\n */\\n function sub(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint8 a, euint8 b) and returns the result.\\n */\\n function sub(uint8 a, euint8 b) internal returns (euint8) {\\n euint8 aEnc = asEuint8(a);\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.sub(euint8.unwrap(aEnc), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint8 a, uint8 b) and returns the result.\\n */\\n function mul(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint8 a, euint8 b) and returns the result.\\n */\\n function mul(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.mul(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint8 a, uint8 b) and returns the result.\\n */\\n function div(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.div(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint8 a, uint8 b) and returns the result.\\n */\\n function rem(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rem(euint8.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint8 a, uint8 b) and returns the result.\\n */\\n function and(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint8 a, euint8 b) and returns the result.\\n */\\n function and(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.and(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint8 a, uint8 b) and returns the result.\\n */\\n function or(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint8 a, euint8 b) and returns the result.\\n */\\n function or(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.or(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint8 a, uint8 b) and returns the result.\\n */\\n function xor(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint8 a, euint8 b) and returns the result.\\n */\\n function xor(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.xor(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint8 a, uint8 b) and returns the result.\\n */\\n function eq(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint8 a, euint8 b) and returns the result.\\n */\\n function eq(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.eq(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint8 a, uint8 b) and returns the result.\\n */\\n function ne(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint8 a, euint8 b) and returns the result.\\n */\\n function ne(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ne(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint8 a, uint8 b) and returns the result.\\n */\\n function ge(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint8 a, euint8 b) and returns the result.\\n */\\n function ge(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint8 a, uint8 b) and returns the result.\\n */\\n function gt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint8 a, euint8 b) and returns the result.\\n */\\n function gt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint8 a, uint8 b) and returns the result.\\n */\\n function le(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.le(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint8 a, euint8 b) and returns the result.\\n */\\n function le(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.ge(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint8 a, uint8 b) and returns the result.\\n */\\n function lt(euint8 a, uint8 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return ebool.wrap(Impl.lt(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint8 a, euint8 b) and returns the result.\\n */\\n function lt(uint8 a, euint8 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return ebool.wrap(Impl.gt(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint8 a, uint8 b) and returns the result.\\n */\\n function min(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint8 a, euint8 b) and returns the result.\\n */\\n function min(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.min(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint8 a, uint8 b) and returns the result.\\n */\\n function max(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint8 a, euint8 b) and returns the result.\\n */\\n function max(uint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.max(euint8.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint16 a, uint16 b) and returns the result.\\n */\\n function add(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint16 a, euint16 b) and returns the result.\\n */\\n function add(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.add(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint16 a, uint16 b) and returns the result.\\n */\\n function sub(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint16 a, euint16 b) and returns the result.\\n */\\n function sub(uint16 a, euint16 b) internal returns (euint16) {\\n euint16 aEnc = asEuint16(a);\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.sub(euint16.unwrap(aEnc), euint16.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint16 a, uint16 b) and returns the result.\\n */\\n function mul(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint16 a, euint16 b) and returns the result.\\n */\\n function mul(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.mul(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint16 a, uint16 b) and returns the result.\\n */\\n function div(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.div(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint16 a, uint16 b) and returns the result.\\n */\\n function rem(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rem(euint16.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint16 a, uint16 b) and returns the result.\\n */\\n function and(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint16 a, euint16 b) and returns the result.\\n */\\n function and(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.and(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint16 a, uint16 b) and returns the result.\\n */\\n function or(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint16 a, euint16 b) and returns the result.\\n */\\n function or(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.or(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint16 a, uint16 b) and returns the result.\\n */\\n function xor(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint16 a, euint16 b) and returns the result.\\n */\\n function xor(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.xor(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint16 a, uint16 b) and returns the result.\\n */\\n function eq(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint16 a, euint16 b) and returns the result.\\n */\\n function eq(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.eq(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint16 a, uint16 b) and returns the result.\\n */\\n function ne(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint16 a, euint16 b) and returns the result.\\n */\\n function ne(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ne(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint16 a, uint16 b) and returns the result.\\n */\\n function ge(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint16 a, euint16 b) and returns the result.\\n */\\n function ge(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint16 a, uint16 b) and returns the result.\\n */\\n function gt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint16 a, euint16 b) and returns the result.\\n */\\n function gt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint16 a, uint16 b) and returns the result.\\n */\\n function le(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.le(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint16 a, euint16 b) and returns the result.\\n */\\n function le(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.ge(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint16 a, uint16 b) and returns the result.\\n */\\n function lt(euint16 a, uint16 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return ebool.wrap(Impl.lt(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint16 a, euint16 b) and returns the result.\\n */\\n function lt(uint16 a, euint16 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return ebool.wrap(Impl.gt(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint16 a, uint16 b) and returns the result.\\n */\\n function min(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint16 a, euint16 b) and returns the result.\\n */\\n function min(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.min(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint16 a, uint16 b) and returns the result.\\n */\\n function max(euint16 a, uint16 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint16 a, euint16 b) and returns the result.\\n */\\n function max(uint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.max(euint16.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint32 a, uint32 b) and returns the result.\\n */\\n function add(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint32 a, euint32 b) and returns the result.\\n */\\n function add(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.add(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint32 a, uint32 b) and returns the result.\\n */\\n function sub(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint32 a, euint32 b) and returns the result.\\n */\\n function sub(uint32 a, euint32 b) internal returns (euint32) {\\n euint32 aEnc = asEuint32(a);\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.sub(euint32.unwrap(aEnc), euint32.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint32 a, uint32 b) and returns the result.\\n */\\n function mul(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint32 a, euint32 b) and returns the result.\\n */\\n function mul(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.mul(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint32 a, uint32 b) and returns the result.\\n */\\n function div(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.div(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint32 a, uint32 b) and returns the result.\\n */\\n function rem(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rem(euint32.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint32 a, uint32 b) and returns the result.\\n */\\n function and(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint32 a, euint32 b) and returns the result.\\n */\\n function and(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.and(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint32 a, uint32 b) and returns the result.\\n */\\n function or(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint32 a, euint32 b) and returns the result.\\n */\\n function or(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.or(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint32 a, uint32 b) and returns the result.\\n */\\n function xor(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint32 a, euint32 b) and returns the result.\\n */\\n function xor(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.xor(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint32 a, uint32 b) and returns the result.\\n */\\n function eq(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint32 a, euint32 b) and returns the result.\\n */\\n function eq(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.eq(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint32 a, uint32 b) and returns the result.\\n */\\n function ne(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint32 a, euint32 b) and returns the result.\\n */\\n function ne(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ne(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint32 a, uint32 b) and returns the result.\\n */\\n function ge(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint32 a, euint32 b) and returns the result.\\n */\\n function ge(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint32 a, uint32 b) and returns the result.\\n */\\n function gt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint32 a, euint32 b) and returns the result.\\n */\\n function gt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint32 a, uint32 b) and returns the result.\\n */\\n function le(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.le(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint32 a, euint32 b) and returns the result.\\n */\\n function le(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.ge(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint32 a, uint32 b) and returns the result.\\n */\\n function lt(euint32 a, uint32 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return ebool.wrap(Impl.lt(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint32 a, euint32 b) and returns the result.\\n */\\n function lt(uint32 a, euint32 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return ebool.wrap(Impl.gt(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint32 a, uint32 b) and returns the result.\\n */\\n function min(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint32 a, euint32 b) and returns the result.\\n */\\n function min(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.min(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint32 a, uint32 b) and returns the result.\\n */\\n function max(euint32 a, uint32 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint32 a, euint32 b) and returns the result.\\n */\\n function max(uint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.max(euint32.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint64 a, uint64 b) and returns the result.\\n */\\n function add(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint64 a, euint64 b) and returns the result.\\n */\\n function add(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.add(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint64 a, uint64 b) and returns the result.\\n */\\n function sub(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint64 a, euint64 b) and returns the result.\\n */\\n function sub(uint64 a, euint64 b) internal returns (euint64) {\\n euint64 aEnc = asEuint64(a);\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.sub(euint64.unwrap(aEnc), euint64.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint64 a, uint64 b) and returns the result.\\n */\\n function mul(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint64 a, euint64 b) and returns the result.\\n */\\n function mul(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.mul(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint64 a, uint64 b) and returns the result.\\n */\\n function div(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.div(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint64 a, uint64 b) and returns the result.\\n */\\n function rem(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rem(euint64.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint64 a, uint64 b) and returns the result.\\n */\\n function and(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint64 a, euint64 b) and returns the result.\\n */\\n function and(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.and(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint64 a, uint64 b) and returns the result.\\n */\\n function or(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint64 a, euint64 b) and returns the result.\\n */\\n function or(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.or(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint64 a, uint64 b) and returns the result.\\n */\\n function xor(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint64 a, euint64 b) and returns the result.\\n */\\n function xor(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.xor(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint64 a, uint64 b) and returns the result.\\n */\\n function eq(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint64 a, euint64 b) and returns the result.\\n */\\n function eq(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.eq(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint64 a, uint64 b) and returns the result.\\n */\\n function ne(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint64 a, euint64 b) and returns the result.\\n */\\n function ne(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ne(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint64 a, uint64 b) and returns the result.\\n */\\n function ge(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint64 a, euint64 b) and returns the result.\\n */\\n function ge(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint64 a, uint64 b) and returns the result.\\n */\\n function gt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint64 a, euint64 b) and returns the result.\\n */\\n function gt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint64 a, uint64 b) and returns the result.\\n */\\n function le(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.le(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint64 a, euint64 b) and returns the result.\\n */\\n function le(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.ge(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint64 a, uint64 b) and returns the result.\\n */\\n function lt(euint64 a, uint64 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return ebool.wrap(Impl.lt(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint64 a, euint64 b) and returns the result.\\n */\\n function lt(uint64 a, euint64 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return ebool.wrap(Impl.gt(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint64 a, uint64 b) and returns the result.\\n */\\n function min(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint64 a, euint64 b) and returns the result.\\n */\\n function min(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.min(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint64 a, uint64 b) and returns the result.\\n */\\n function max(euint64 a, uint64 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint64 a, euint64 b) and returns the result.\\n */\\n function max(uint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.max(euint64.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(euint128 a, uint128 b) and returns the result.\\n */\\n function add(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates add(uint128 a, euint128 b) and returns the result.\\n */\\n function add(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.add(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(euint128 a, uint128 b) and returns the result.\\n */\\n function sub(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates sub(uint128 a, euint128 b) and returns the result.\\n */\\n function sub(uint128 a, euint128 b) internal returns (euint128) {\\n euint128 aEnc = asEuint128(a);\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.sub(euint128.unwrap(aEnc), euint128.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates mul(euint128 a, uint128 b) and returns the result.\\n */\\n function mul(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates mul(uint128 a, euint128 b) and returns the result.\\n */\\n function mul(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.mul(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates div(euint128 a, uint128 b) and returns the result.\\n */\\n function div(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.div(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates rem(euint128 a, uint128 b) and returns the result.\\n */\\n function rem(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rem(euint128.unwrap(a), bytes32(uint256(b))));\\n }\\n\\n /**\\n * @dev Evaluates and(euint128 a, uint128 b) and returns the result.\\n */\\n function and(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint128 a, euint128 b) and returns the result.\\n */\\n function and(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.and(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint128 a, uint128 b) and returns the result.\\n */\\n function or(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint128 a, euint128 b) and returns the result.\\n */\\n function or(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.or(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint128 a, uint128 b) and returns the result.\\n */\\n function xor(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint128 a, euint128 b) and returns the result.\\n */\\n function xor(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.xor(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint128 a, uint128 b) and returns the result.\\n */\\n function eq(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint128 a, euint128 b) and returns the result.\\n */\\n function eq(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.eq(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint128 a, uint128 b) and returns the result.\\n */\\n function ne(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint128 a, euint128 b) and returns the result.\\n */\\n function ne(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ne(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(euint128 a, uint128 b) and returns the result.\\n */\\n function ge(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ge(uint128 a, euint128 b) and returns the result.\\n */\\n function ge(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(euint128 a, uint128 b) and returns the result.\\n */\\n function gt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates gt(uint128 a, euint128 b) and returns the result.\\n */\\n function gt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(euint128 a, uint128 b) and returns the result.\\n */\\n function le(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.le(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates le(uint128 a, euint128 b) and returns the result.\\n */\\n function le(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.ge(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(euint128 a, uint128 b) and returns the result.\\n */\\n function lt(euint128 a, uint128 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return ebool.wrap(Impl.lt(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates lt(uint128 a, euint128 b) and returns the result.\\n */\\n function lt(uint128 a, euint128 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return ebool.wrap(Impl.gt(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(euint128 a, uint128 b) and returns the result.\\n */\\n function min(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates min(uint128 a, euint128 b) and returns the result.\\n */\\n function min(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.min(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(euint128 a, uint128 b) and returns the result.\\n */\\n function max(euint128 a, uint128 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates max(uint128 a, euint128 b) and returns the result.\\n */\\n function max(uint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.max(euint128.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(eaddress a, address b) and returns the result.\\n */\\n function eq(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(address a, eaddress b) and returns the result.\\n */\\n function eq(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.eq(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(eaddress a, address b) and returns the result.\\n */\\n function ne(eaddress a, address b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(a), bytes32(uint256(uint160(b))), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(address a, eaddress b) and returns the result.\\n */\\n function ne(address a, eaddress b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return ebool.wrap(Impl.ne(eaddress.unwrap(b), bytes32(uint256(uint160(a))), true));\\n }\\n\\n /**\\n * @dev Evaluates and(euint256 a, uint256 b) and returns the result.\\n */\\n function and(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates and(uint256 a, euint256 b) and returns the result.\\n */\\n function and(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.and(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(euint256 a, uint256 b) and returns the result.\\n */\\n function or(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates or(uint256 a, euint256 b) and returns the result.\\n */\\n function or(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.or(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(euint256 a, uint256 b) and returns the result.\\n */\\n function xor(euint256 a, uint256 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates xor(uint256 a, euint256 b) and returns the result.\\n */\\n function xor(uint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.xor(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(euint256 a, uint256 b) and returns the result.\\n */\\n function eq(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates eq(uint256 a, euint256 b) and returns the result.\\n */\\n function eq(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.eq(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(euint256 a, uint256 b) and returns the result.\\n */\\n function ne(euint256 a, uint256 b) internal returns (ebool) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates ne(uint256 a, euint256 b) and returns the result.\\n */\\n function ne(uint256 a, euint256 b) internal returns (ebool) {\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return ebool.wrap(Impl.ne(euint256.unwrap(b), bytes32(uint256(a)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, euint8 b) and returns the result.\\n */\\n function shl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint8 a, uint8) and returns the result.\\n */\\n function shl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, euint8 b) and returns the result.\\n */\\n function shr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint8 a, uint8) and returns the result.\\n */\\n function shr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.shr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, euint8 b) and returns the result.\\n */\\n function rotl(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint8 a, uint8) and returns the result.\\n */\\n function rotl(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotl(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, euint8 b) and returns the result.\\n */\\n function rotr(euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), euint8.unwrap(b), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint8 a, uint8) and returns the result.\\n */\\n function rotr(euint8 a, uint8 b) internal returns (euint8) {\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n return euint8.wrap(Impl.rotr(euint8.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, euint8 b) and returns the result.\\n */\\n function shl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint16 a, uint8) and returns the result.\\n */\\n function shl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, euint8 b) and returns the result.\\n */\\n function shr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint16 a, uint8) and returns the result.\\n */\\n function shr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.shr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, euint8 b) and returns the result.\\n */\\n function rotl(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint16 a, uint8) and returns the result.\\n */\\n function rotl(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotl(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, euint8 b) and returns the result.\\n */\\n function rotr(euint16 a, euint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), euint16.unwrap(asEuint16(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint16 a, uint8) and returns the result.\\n */\\n function rotr(euint16 a, uint8 b) internal returns (euint16) {\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n return euint16.wrap(Impl.rotr(euint16.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, euint8 b) and returns the result.\\n */\\n function shl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint32 a, uint8) and returns the result.\\n */\\n function shl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, euint8 b) and returns the result.\\n */\\n function shr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint32 a, uint8) and returns the result.\\n */\\n function shr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.shr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, euint8 b) and returns the result.\\n */\\n function rotl(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint32 a, uint8) and returns the result.\\n */\\n function rotl(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotl(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, euint8 b) and returns the result.\\n */\\n function rotr(euint32 a, euint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), euint32.unwrap(asEuint32(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint32 a, uint8) and returns the result.\\n */\\n function rotr(euint32 a, uint8 b) internal returns (euint32) {\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n return euint32.wrap(Impl.rotr(euint32.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, euint8 b) and returns the result.\\n */\\n function shl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint64 a, uint8) and returns the result.\\n */\\n function shl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, euint8 b) and returns the result.\\n */\\n function shr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint64 a, uint8) and returns the result.\\n */\\n function shr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.shr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, euint8 b) and returns the result.\\n */\\n function rotl(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint64 a, uint8) and returns the result.\\n */\\n function rotl(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotl(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, euint8 b) and returns the result.\\n */\\n function rotr(euint64 a, euint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), euint64.unwrap(asEuint64(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint64 a, uint8) and returns the result.\\n */\\n function rotr(euint64 a, uint8 b) internal returns (euint64) {\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n return euint64.wrap(Impl.rotr(euint64.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, euint8 b) and returns the result.\\n */\\n function shl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint128 a, uint8) and returns the result.\\n */\\n function shl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, euint8 b) and returns the result.\\n */\\n function shr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint128 a, uint8) and returns the result.\\n */\\n function shr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.shr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, euint8 b) and returns the result.\\n */\\n function rotl(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint128 a, uint8) and returns the result.\\n */\\n function rotl(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotl(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, euint8 b) and returns the result.\\n */\\n function rotr(euint128 a, euint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), euint128.unwrap(asEuint128(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint128 a, uint8) and returns the result.\\n */\\n function rotr(euint128 a, uint8 b) internal returns (euint128) {\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n return euint128.wrap(Impl.rotr(euint128.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, euint8 b) and returns the result.\\n */\\n function shl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shl(euint256 a, uint8) and returns the result.\\n */\\n function shl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, euint8 b) and returns the result.\\n */\\n function shr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates shr(euint256 a, uint8) and returns the result.\\n */\\n function shr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.shr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, euint8 b) and returns the result.\\n */\\n function rotl(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotl(euint256 a, uint8) and returns the result.\\n */\\n function rotl(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotl(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, euint8 b) and returns the result.\\n */\\n function rotr(euint256 a, euint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), euint256.unwrap(asEuint256(b)), false));\\n }\\n\\n /**\\n * @dev Evaluates rotr(euint256 a, uint8) and returns the result.\\n */\\n function rotr(euint256 a, uint8 b) internal returns (euint256) {\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n return euint256.wrap(Impl.rotr(euint256.unwrap(a), bytes32(uint256(b)), true));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, ebool a, ebool b) internal returns (ebool) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEbool(false);\\n }\\n if (!isInitialized(b)) {\\n b = asEbool(false);\\n }\\n return ebool.wrap(Impl.select(ebool.unwrap(control), ebool.unwrap(a), ebool.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint8 a, euint8 b) internal returns (euint8) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint8(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint8(0);\\n }\\n return euint8.wrap(Impl.select(ebool.unwrap(control), euint8.unwrap(a), euint8.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint16 a, euint16 b) internal returns (euint16) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint16(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint16(0);\\n }\\n return euint16.wrap(Impl.select(ebool.unwrap(control), euint16.unwrap(a), euint16.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint32 a, euint32 b) internal returns (euint32) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint32(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint32(0);\\n }\\n return euint32.wrap(Impl.select(ebool.unwrap(control), euint32.unwrap(a), euint32.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint64 a, euint64 b) internal returns (euint64) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint64(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint64(0);\\n }\\n return euint64.wrap(Impl.select(ebool.unwrap(control), euint64.unwrap(a), euint64.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint128 a, euint128 b) internal returns (euint128) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint128(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint128(0);\\n }\\n return euint128.wrap(Impl.select(ebool.unwrap(control), euint128.unwrap(a), euint128.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, eaddress a, eaddress b) internal returns (eaddress) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEaddress(address(0));\\n }\\n if (!isInitialized(b)) {\\n b = asEaddress(address(0));\\n }\\n return eaddress.wrap(Impl.select(ebool.unwrap(control), eaddress.unwrap(a), eaddress.unwrap(b)));\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(ebool control, euint256 a, euint256 b) internal returns (euint256) {\\n if (!isInitialized(control)) {\\n control = asEbool(false);\\n }\\n if (!isInitialized(a)) {\\n a = asEuint256(0);\\n }\\n if (!isInitialized(b)) {\\n b = asEuint256(0);\\n }\\n return euint256.wrap(Impl.select(ebool.unwrap(control), euint256.unwrap(a), euint256.unwrap(b)));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint8'.\\n */\\n function asEuint8(euint16 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint8'.\\n */\\n function asEuint8(euint32 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint8'.\\n */\\n function asEuint8(euint64 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint8'.\\n */\\n function asEuint8(euint128 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint8'.\\n */\\n function asEuint8(euint256 value) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint8));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint8'.\\n */\\n function asEuint8(ebool b) internal returns (euint8) {\\n return euint8.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'ebool'.\\n */\\n function asEbool(euint8 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint16'.\\n */\\n function asEuint16(euint8 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint16'.\\n */\\n function asEuint16(euint32 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint16'.\\n */\\n function asEuint16(euint64 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint16'.\\n */\\n function asEuint16(euint128 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint16'.\\n */\\n function asEuint16(euint256 value) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint16));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint16'.\\n */\\n function asEuint16(ebool b) internal returns (euint16) {\\n return euint16.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'ebool'.\\n */\\n function asEbool(euint16 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint32'.\\n */\\n function asEuint32(euint8 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint32'.\\n */\\n function asEuint32(euint16 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint32'.\\n */\\n function asEuint32(euint64 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint32'.\\n */\\n function asEuint32(euint128 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint32'.\\n */\\n function asEuint32(euint256 value) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint32));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint32'.\\n */\\n function asEuint32(ebool b) internal returns (euint32) {\\n return euint32.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'ebool'.\\n */\\n function asEbool(euint32 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint64'.\\n */\\n function asEuint64(euint8 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint64'.\\n */\\n function asEuint64(euint16 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint64'.\\n */\\n function asEuint64(euint32 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint64'.\\n */\\n function asEuint64(euint128 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint64'.\\n */\\n function asEuint64(euint256 value) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint64));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint64'.\\n */\\n function asEuint64(ebool b) internal returns (euint64) {\\n return euint64.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'ebool'.\\n */\\n function asEbool(euint64 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint128'.\\n */\\n function asEuint128(euint8 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint128'.\\n */\\n function asEuint128(euint16 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint128'.\\n */\\n function asEuint128(euint32 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint128'.\\n */\\n function asEuint128(euint64 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'euint128'.\\n */\\n function asEuint128(euint256 value) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(euint256.unwrap(value), FheType.Uint128));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint128'.\\n */\\n function asEuint128(ebool b) internal returns (euint128) {\\n return euint128.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'ebool'.\\n */\\n function asEbool(euint128 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint8' to 'euint256'.\\n */\\n function asEuint256(euint8 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint8.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint16' to 'euint256'.\\n */\\n function asEuint256(euint16 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint16.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint32' to 'euint256'.\\n */\\n function asEuint256(euint32 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint32.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint64' to 'euint256'.\\n */\\n function asEuint256(euint64 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint64.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint128' to 'euint256'.\\n */\\n function asEuint256(euint128 value) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(euint128.unwrap(value), FheType.Uint256));\\n }\\n\\n /**\\n /** \\n * @dev Converts an 'ebool' to an 'euint256'.\\n */\\n function asEuint256(ebool b) internal returns (euint256) {\\n return euint256.wrap(Impl.cast(ebool.unwrap(b), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Casts an encrypted integer from 'euint256' to 'ebool'.\\n */\\n function asEbool(euint256 value) internal returns (ebool) {\\n return ne(value, 0);\\n }\\n\\n /**\\n * @dev Evaluates not(ebool value) and returns the result.\\n */\\n function not(ebool value) internal returns (ebool) {\\n return ebool.wrap(Impl.not(ebool.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint8 value) and returns the result.\\n */\\n function neg(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.neg(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint8 value) and returns the result.\\n */\\n function not(euint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.not(euint8.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint16 value) and returns the result.\\n */\\n function neg(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.neg(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint16 value) and returns the result.\\n */\\n function not(euint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.not(euint16.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint32 value) and returns the result.\\n */\\n function neg(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.neg(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint32 value) and returns the result.\\n */\\n function not(euint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.not(euint32.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint64 value) and returns the result.\\n */\\n function neg(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.neg(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint64 value) and returns the result.\\n */\\n function not(euint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.not(euint64.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint128 value) and returns the result.\\n */\\n function neg(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.neg(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint128 value) and returns the result.\\n */\\n function not(euint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.not(euint128.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates neg(euint256 value) and returns the result.\\n */\\n function neg(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.neg(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Evaluates not(euint256 value) and returns the result.\\n */\\n function not(euint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.not(euint256.unwrap(value)));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted ebool integer.\\n */\\n function fromExternal(externalEbool inputHandle, bytes memory inputProof) internal returns (ebool) {\\n return ebool.wrap(Impl.verify(externalEbool.unwrap(inputHandle), inputProof, FheType.Bool));\\n }\\n\\n /**\\n * @dev Converts a plaintext boolean to an encrypted boolean.\\n */\\n function asEbool(bool value) internal returns (ebool) {\\n return ebool.wrap(Impl.trivialEncrypt(value ? 1 : 0, FheType.Bool));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint8 integer.\\n */\\n function fromExternal(externalEuint8 inputHandle, bytes memory inputProof) internal returns (euint8) {\\n return euint8.wrap(Impl.verify(externalEuint8.unwrap(inputHandle), inputProof, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint8 integer.\\n */\\n function asEuint8(uint8 value) internal returns (euint8) {\\n return euint8.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint8));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint16 integer.\\n */\\n function fromExternal(externalEuint16 inputHandle, bytes memory inputProof) internal returns (euint16) {\\n return euint16.wrap(Impl.verify(externalEuint16.unwrap(inputHandle), inputProof, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint16 integer.\\n */\\n function asEuint16(uint16 value) internal returns (euint16) {\\n return euint16.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint16));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint32 integer.\\n */\\n function fromExternal(externalEuint32 inputHandle, bytes memory inputProof) internal returns (euint32) {\\n return euint32.wrap(Impl.verify(externalEuint32.unwrap(inputHandle), inputProof, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint32 integer.\\n */\\n function asEuint32(uint32 value) internal returns (euint32) {\\n return euint32.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint32));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint64 integer.\\n */\\n function fromExternal(externalEuint64 inputHandle, bytes memory inputProof) internal returns (euint64) {\\n return euint64.wrap(Impl.verify(externalEuint64.unwrap(inputHandle), inputProof, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint64 integer.\\n */\\n function asEuint64(uint64 value) internal returns (euint64) {\\n return euint64.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint64));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint128 integer.\\n */\\n function fromExternal(externalEuint128 inputHandle, bytes memory inputProof) internal returns (euint128) {\\n return euint128.wrap(Impl.verify(externalEuint128.unwrap(inputHandle), inputProof, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint128 integer.\\n */\\n function asEuint128(uint128 value) internal returns (euint128) {\\n return euint128.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint128));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted eaddress integer.\\n */\\n function fromExternal(externalEaddress inputHandle, bytes memory inputProof) internal returns (eaddress) {\\n return eaddress.wrap(Impl.verify(externalEaddress.unwrap(inputHandle), inputProof, FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted eaddress integer.\\n */\\n function asEaddress(address value) internal returns (eaddress) {\\n return eaddress.wrap(Impl.trivialEncrypt(uint256(uint160(value)), FheType.Uint160));\\n }\\n\\n /**\\n * @dev Convert an inputHandle with corresponding inputProof to an encrypted euint256 integer.\\n */\\n function fromExternal(externalEuint256 inputHandle, bytes memory inputProof) internal returns (euint256) {\\n return euint256.wrap(Impl.verify(externalEuint256.unwrap(inputHandle), inputProof, FheType.Uint256));\\n }\\n\\n /**\\n * @dev Convert a plaintext value to an encrypted euint256 integer.\\n */\\n function asEuint256(uint256 value) internal returns (euint256) {\\n return euint256.wrap(Impl.trivialEncrypt(uint256(value), FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEbool() internal returns (ebool) {\\n return ebool.wrap(Impl.rand(FheType.Bool));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint8() internal returns (euint8) {\\n return euint8.wrap(Impl.rand(FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 8-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint8(uint8 upperBound) internal returns (euint8) {\\n return euint8.wrap(Impl.randBounded(upperBound, FheType.Uint8));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint16() internal returns (euint16) {\\n return euint16.wrap(Impl.rand(FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 16-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint16(uint16 upperBound) internal returns (euint16) {\\n return euint16.wrap(Impl.randBounded(upperBound, FheType.Uint16));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint32() internal returns (euint32) {\\n return euint32.wrap(Impl.rand(FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 32-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint32(uint32 upperBound) internal returns (euint32) {\\n return euint32.wrap(Impl.randBounded(upperBound, FheType.Uint32));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint64() internal returns (euint64) {\\n return euint64.wrap(Impl.rand(FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 64-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint64(uint64 upperBound) internal returns (euint64) {\\n return euint64.wrap(Impl.randBounded(upperBound, FheType.Uint64));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint128() internal returns (euint128) {\\n return euint128.wrap(Impl.rand(FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 128-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint128(uint128 upperBound) internal returns (euint128) {\\n return euint128.wrap(Impl.randBounded(upperBound, FheType.Uint128));\\n }\\n\\n /**\\n * @dev Generates a random encrypted value.\\n */\\n function randEuint256() internal returns (euint256) {\\n return euint256.wrap(Impl.rand(FheType.Uint256));\\n }\\n\\n /**\\n * @dev Generates a random encrypted 256-bit unsigned integer in the [0, upperBound) range.\\n * The upperBound must be a power of 2.\\n */\\n function randEuint256(uint256 upperBound) internal returns (euint256) {\\n return euint256.wrap(Impl.randBounded(upperBound, FheType.Uint256));\\n }\\n\\n /**\\n * @dev This function cleans the transient storage for the ACL (accounts) and the InputVerifier\\n * (input proofs).\\n * This could be useful for integration with Account Abstraction when bundling several\\n * UserOps calling the FHEVMExecutor.\\n */\\n function cleanTransientStorage() internal {\\n Impl.cleanTransientStorageACL();\\n Impl.cleanTransientStorageInputVerifier();\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(ebool value, address account) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(ebool value) internal view returns (bool) {\\n return Impl.isAllowed(ebool.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(ebool value, address account) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(ebool value) internal returns (ebool) {\\n Impl.allow(ebool.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(ebool value, address account) internal returns (ebool) {\\n Impl.allowTransient(ebool.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(ebool value) internal returns (ebool) {\\n Impl.makePubliclyDecryptable(ebool.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(ebool value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(ebool.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint8 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint8 value) internal view returns (bool) {\\n return Impl.isAllowed(euint8.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint8 value, address account) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint8 value) internal returns (euint8) {\\n Impl.allow(euint8.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint8 value, address account) internal returns (euint8) {\\n Impl.allowTransient(euint8.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint8 value) internal returns (euint8) {\\n Impl.makePubliclyDecryptable(euint8.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint8 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint8.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint16 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint16 value) internal view returns (bool) {\\n return Impl.isAllowed(euint16.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint16 value, address account) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint16 value) internal returns (euint16) {\\n Impl.allow(euint16.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint16 value, address account) internal returns (euint16) {\\n Impl.allowTransient(euint16.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint16 value) internal returns (euint16) {\\n Impl.makePubliclyDecryptable(euint16.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint16 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint16.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint32 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint32 value) internal view returns (bool) {\\n return Impl.isAllowed(euint32.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint32 value, address account) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint32 value) internal returns (euint32) {\\n Impl.allow(euint32.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint32 value, address account) internal returns (euint32) {\\n Impl.allowTransient(euint32.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint32 value) internal returns (euint32) {\\n Impl.makePubliclyDecryptable(euint32.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint32 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint32.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint64 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint64 value) internal view returns (bool) {\\n return Impl.isAllowed(euint64.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint64 value, address account) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint64 value) internal returns (euint64) {\\n Impl.allow(euint64.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint64 value, address account) internal returns (euint64) {\\n Impl.allowTransient(euint64.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint64 value) internal returns (euint64) {\\n Impl.makePubliclyDecryptable(euint64.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint64 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint64.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint128 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint128 value) internal view returns (bool) {\\n return Impl.isAllowed(euint128.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint128 value, address account) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint128 value) internal returns (euint128) {\\n Impl.allow(euint128.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint128 value, address account) internal returns (euint128) {\\n Impl.allowTransient(euint128.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint128 value) internal returns (euint128) {\\n Impl.makePubliclyDecryptable(euint128.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint128 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint128.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(eaddress value, address account) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(eaddress value) internal view returns (bool) {\\n return Impl.isAllowed(eaddress.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(eaddress value, address account) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(eaddress value) internal returns (eaddress) {\\n Impl.allow(eaddress.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(eaddress value, address account) internal returns (eaddress) {\\n Impl.allowTransient(eaddress.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(eaddress value) internal returns (eaddress) {\\n Impl.makePubliclyDecryptable(eaddress.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(eaddress value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(eaddress.unwrap(value));\\n }\\n\\n /**\\n * @dev Returns whether the account is allowed to use the value.\\n */\\n function isAllowed(euint256 value, address account) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), account);\\n }\\n\\n /**\\n * @dev Returns whether the sender is allowed to use the value.\\n */\\n function isSenderAllowed(euint256 value) internal view returns (bool) {\\n return Impl.isAllowed(euint256.unwrap(value), msg.sender);\\n }\\n\\n /**\\n * @dev Allows the use of value for the address account.\\n */\\n function allow(euint256 value, address account) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value for this address (address(this)).\\n */\\n function allowThis(euint256 value) internal returns (euint256) {\\n Impl.allow(euint256.unwrap(value), address(this));\\n return value;\\n }\\n\\n /**\\n * @dev Allows the use of value by address account for this transaction.\\n */\\n function allowTransient(euint256 value, address account) internal returns (euint256) {\\n Impl.allowTransient(euint256.unwrap(value), account);\\n return value;\\n }\\n\\n /**\\n * @dev Makes the value publicly decryptable.\\n */\\n function makePubliclyDecryptable(euint256 value) internal returns (euint256) {\\n Impl.makePubliclyDecryptable(euint256.unwrap(value));\\n return value;\\n }\\n\\n /**\\n * @dev Returns whether the the value is publicly decryptable.\\n */\\n function isPubliclyDecryptable(euint256 value) internal view returns (bool) {\\n return Impl.isPubliclyDecryptable(euint256.unwrap(value));\\n }\\n\\n /// @notice Reverts if the KMS signatures verification against the provided handles and public decryption data\\n /// fails.\\n /// @dev The function MUST be called inside a public decryption callback function of a dApp contract\\n /// to verify the signatures and prevent fake decryption results for being submitted.\\n /// @param handlesList The list of handles as an array of bytes32 to check\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The ABI-encoded list order must match the `handlesList` order.\\n /// @param decryptionProof The KMS public decryption proof. It includes the KMS signatures, associated metadata,\\n /// and the context needed for verification.\\n /// @dev Reverts if any of the following conditions are met:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n /// - The signatures verification returns false.\\n function checkSignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) internal {\\n bool isVerified = _verifySignatures(handlesList, abiEncodedCleartexts, decryptionProof);\\n if (!isVerified) {\\n revert InvalidKMSSignatures();\\n }\\n emit PublicDecryptionVerified(handlesList, abiEncodedCleartexts);\\n }\\n\\n /// @notice Verifies KMS signatures against the provided handles and public decryption data.\\n /// @param handlesList The list of handles as an array of bytes32 to verify\\n /// @param abiEncodedCleartexts The ABI-encoded list of decrypted values associated with each handle in the `handlesList`.\\n /// The list order must match the list of handles in `handlesList`\\n /// @param decryptionProof The KMS public decryption proof computed by the KMS Signers assiciated to `handlesList` and\\n /// `abiEncodedCleartexts`\\n /// @return true if the signatures verification succeeds, false otherwise\\n /// @dev Private low-level function used to verify the KMS signatures.\\n /// Warning: this function never reverts, its boolean return value must be checked.\\n /// The decryptionProof is the numSigners + kmsSignatures + extraData (1 + 65*numSigners + extraData bytes)\\n /// Only static native solidity types for clear values are supported, so `abiEncodedCleartexts` is the concatenation of all clear values appended to 32 bytes.\\n /// @dev Reverts if any of the following conditions are met by the underlying KMS verifier:\\n /// - The `decryptionProof` is empty or has an invalid length.\\n /// - The number of valid signatures is zero or less than the configured KMS signers threshold.\\n /// - Any signature is produced by an address that is not a registered KMS signer.\\n function _verifySignatures(\\n bytes32[] memory handlesList,\\n bytes memory abiEncodedCleartexts,\\n bytes memory decryptionProof\\n ) private returns (bool) {\\n CoprocessorConfig storage $ = Impl.getCoprocessorConfig();\\n return\\n IKMSVerifier($.KMSVerifierAddress).verifyDecryptionEIP712KMSSignatures(\\n handlesList,\\n abiEncodedCleartexts,\\n decryptionProof\\n );\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(ebool value) internal pure returns (bytes32 ct) {\\n ct = ebool.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint8 value) internal pure returns (bytes32 ct) {\\n ct = euint8.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint16 value) internal pure returns (bytes32 ct) {\\n ct = euint16.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint32 value) internal pure returns (bytes32 ct) {\\n ct = euint32.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint64 value) internal pure returns (bytes32 ct) {\\n ct = euint64.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint128 value) internal pure returns (bytes32 ct) {\\n ct = euint128.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(eaddress value) internal pure returns (bytes32 ct) {\\n ct = eaddress.unwrap(value);\\n }\\n\\n /**\\n * @dev Converts handle from its custom type to the underlying bytes32. Used when requesting a decryption.\\n */\\n function toBytes32(euint256 value) internal pure returns (bytes32 ct) {\\n ct = euint256.unwrap(value);\\n }\\n}\\n\",\"keccak256\":\"0x40fa1fd7a983b88f68b2efd87e879bc12ac363b2585bb39e9aa52fa168851d2b\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/FheType.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nenum FheType {\\n Bool,\\n Uint4,\\n Uint8,\\n Uint16,\\n Uint32,\\n Uint64,\\n Uint128,\\n Uint160,\\n Uint256,\\n Uint512,\\n Uint1024,\\n Uint2048,\\n Uint2,\\n Uint6,\\n Uint10,\\n Uint12,\\n Uint14,\\n Int2,\\n Int4,\\n Int6,\\n Int8,\\n Int10,\\n Int12,\\n Int14,\\n Int16,\\n Int32,\\n Int64,\\n Int128,\\n Int160,\\n Int256,\\n AsciiString,\\n Int512,\\n Int1024,\\n Int2048,\\n Uint24,\\n Uint40,\\n Uint48,\\n Uint56,\\n Uint72,\\n Uint80,\\n Uint88,\\n Uint96,\\n Uint104,\\n Uint112,\\n Uint120,\\n Uint136,\\n Uint144,\\n Uint152,\\n Uint168,\\n Uint176,\\n Uint184,\\n Uint192,\\n Uint200,\\n Uint208,\\n Uint216,\\n Uint224,\\n Uint232,\\n Uint240,\\n Uint248,\\n Int24,\\n Int40,\\n Int48,\\n Int56,\\n Int72,\\n Int80,\\n Int88,\\n Int96,\\n Int104,\\n Int112,\\n Int120,\\n Int136,\\n Int144,\\n Int152,\\n Int168,\\n Int176,\\n Int184,\\n Int192,\\n Int200,\\n Int208,\\n Int216,\\n Int224,\\n Int232,\\n Int240,\\n Int248\\n}\\n\",\"keccak256\":\"0x945f006108fab92cb082a6e5a80525953f17b8d8dcf88a283a83fc80c765497a\",\"license\":\"BSD-3-Clause-Clear\"},\"@fhevm/solidity/lib/Impl.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause-Clear\\npragma solidity ^0.8.24;\\n\\nimport {FheType} from \\\"./FheType.sol\\\";\\n\\n/**\\n * @title CoprocessorConfig\\n * @notice This struct contains all addresses of core contracts, which are needed in a typical dApp.\\n */\\nstruct CoprocessorConfig {\\n address ACLAddress;\\n address CoprocessorAddress;\\n address KMSVerifierAddress;\\n}\\n\\n/**\\n * @title IFHEVMExecutor\\n * @notice This interface contains all functions to conduct FHE operations.\\n */\\ninterface IFHEVMExecutor {\\n /**\\n * @notice Computes fheAdd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheAdd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheSub operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheSub(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMul operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMul(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheDiv operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheDiv(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRem operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRem(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitAnd operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitAnd(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitOr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitOr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheBitXor operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheBitXor(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheShr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheShr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotl operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotl(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheRotr operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheRotr(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheEq operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheEq(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheNe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheGt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheGt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLe operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLe(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheLt operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheLt(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMin operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMin(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheMax operation.\\n * @param lhs LHS.\\n * @param rhs RHS.\\n * @param scalarByte Scalar byte.\\n * @return result Result.\\n */\\n function fheMax(bytes32 lhs, bytes32 rhs, bytes1 scalarByte) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNeg operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNeg(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes fheNot operation.\\n * @param ct Ct\\n * @return result Result.\\n */\\n function fheNot(bytes32 ct) external returns (bytes32 result);\\n\\n /**\\n * @notice Verifies the ciphertext.\\n * @param inputHandle Input handle.\\n * @param callerAddress Address of the caller.\\n * @param inputProof Input proof.\\n * @param inputType Input type.\\n * @return result Result.\\n */\\n function verifyInput(\\n bytes32 inputHandle,\\n address callerAddress,\\n bytes memory inputProof,\\n FheType inputType\\n ) external returns (bytes32 result);\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ct Value to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param ct Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 ct, FheType toType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHEIfThenElse operation.\\n * @param control Control value.\\n * @param ifTrue If true.\\n * @param ifFalse If false.\\n * @return result Result.\\n */\\n function fheIfThenElse(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERand operation.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRand(FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Computes FHERandBounded operation.\\n * @param upperBound Upper bound value.\\n * @param randType Type for the random result.\\n * @return result Result.\\n */\\n function fheRandBounded(uint256 upperBound, FheType randType) external returns (bytes32 result);\\n\\n /**\\n * @notice Returns the address of the InputVerifier contract used by the coprocessor.\\n * @return inputVerifierAddress Address of the InputVerifier.\\n */\\n function getInputVerifierAddress() external view returns (address);\\n}\\n\\n/**\\n * @title IACL.\\n * @notice This interface contains all functions that are used to conduct operations\\n * with the ACL contract.\\n */\\ninterface IACL {\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param ciphertext Ciphertext.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 ciphertext, address account) external;\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) external;\\n\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) external view returns (bool);\\n\\n /**\\n * @notice Allows a list of handles to be decrypted.\\n * @param handlesList List of handles.\\n */\\n function allowForDecryption(bytes32[] memory handlesList) external;\\n\\n /**\\n * @notice Returns wether a handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isDecryptable Whether the handle can be publicly decrypted.\\n */\\n function isAllowedForDecryption(bytes32 handle) external view returns (bool);\\n}\\n\\n/**\\n * @title IInputVerifier\\n * @notice This interface contains the only function required from InputVerifier.\\n */\\ninterface IInputVerifier {\\n /**\\n * @dev This function removes the transient allowances, which could be useful for integration with\\n * Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorage() external;\\n}\\n\\n/**\\n * @title Impl\\n * @notice This library is the core implementation for computing FHE operations (e.g. add, sub, xor).\\n */\\nlibrary Impl {\\n /// keccak256(abi.encode(uint256(keccak256(\\\"confidential.storage.config\\\")) - 1)) & ~bytes32(uint256(0xff))\\n bytes32 private constant CoprocessorConfigLocation =\\n 0x9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700;\\n\\n /**\\n * @dev Returns the Coprocessor config.\\n */\\n function getCoprocessorConfig() internal pure returns (CoprocessorConfig storage $) {\\n assembly {\\n $.slot := CoprocessorConfigLocation\\n }\\n }\\n\\n /**\\n * @notice Sets the coprocessor addresses.\\n * @param coprocessorConfig Coprocessor config struct that contains contract addresses.\\n */\\n function setCoprocessor(CoprocessorConfig memory coprocessorConfig) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n $.ACLAddress = coprocessorConfig.ACLAddress;\\n $.CoprocessorAddress = coprocessorConfig.CoprocessorAddress;\\n $.KMSVerifierAddress = coprocessorConfig.KMSVerifierAddress;\\n }\\n\\n function add(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheAdd(lhs, rhs, scalarByte);\\n }\\n\\n function sub(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheSub(lhs, rhs, scalarByte);\\n }\\n\\n function mul(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMul(lhs, rhs, scalarByte);\\n }\\n\\n function div(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheDiv(lhs, rhs, scalarByte);\\n }\\n\\n function rem(bytes32 lhs, bytes32 rhs) internal returns (bytes32 result) {\\n bytes1 scalarByte = 0x01;\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRem(lhs, rhs, scalarByte);\\n }\\n\\n function and(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitAnd(lhs, rhs, scalarByte);\\n }\\n\\n function or(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitOr(lhs, rhs, scalarByte);\\n }\\n\\n function xor(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheBitXor(lhs, rhs, scalarByte);\\n }\\n\\n function shl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShl(lhs, rhs, scalarByte);\\n }\\n\\n function shr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheShr(lhs, rhs, scalarByte);\\n }\\n\\n function rotl(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotl(lhs, rhs, scalarByte);\\n }\\n\\n function rotr(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRotr(lhs, rhs, scalarByte);\\n }\\n\\n function eq(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheEq(lhs, rhs, scalarByte);\\n }\\n\\n function ne(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNe(lhs, rhs, scalarByte);\\n }\\n\\n function ge(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGe(lhs, rhs, scalarByte);\\n }\\n\\n function gt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheGt(lhs, rhs, scalarByte);\\n }\\n\\n function le(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLe(lhs, rhs, scalarByte);\\n }\\n\\n function lt(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheLt(lhs, rhs, scalarByte);\\n }\\n\\n function min(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMin(lhs, rhs, scalarByte);\\n }\\n\\n function max(bytes32 lhs, bytes32 rhs, bool scalar) internal returns (bytes32 result) {\\n bytes1 scalarByte;\\n if (scalar) {\\n scalarByte = 0x01;\\n } else {\\n scalarByte = 0x00;\\n }\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheMax(lhs, rhs, scalarByte);\\n }\\n\\n function neg(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNeg(ct);\\n }\\n\\n function not(bytes32 ct) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheNot(ct);\\n }\\n\\n /**\\n * @dev If 'control's value is 'true', the result has the same value as 'ifTrue'.\\n * If 'control's value is 'false', the result has the same value as 'ifFalse'.\\n */\\n function select(bytes32 control, bytes32 ifTrue, bytes32 ifFalse) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheIfThenElse(control, ifTrue, ifFalse);\\n }\\n\\n /**\\n * @notice Verifies the ciphertext (FHEVMExecutor) and allows transient (ACL).\\n * @param inputHandle Input handle.\\n * @param inputProof Input proof.\\n * @param toType Input type.\\n * @return result Result.\\n */\\n function verify(bytes32 inputHandle, bytes memory inputProof, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).verifyInput(inputHandle, msg.sender, inputProof, toType);\\n IACL($.ACLAddress).allowTransient(result, msg.sender);\\n }\\n\\n /**\\n * @notice Performs the casting to a target type.\\n * @param ciphertext Ciphertext to cast.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function cast(bytes32 ciphertext, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).cast(ciphertext, toType);\\n }\\n\\n /**\\n * @notice Does trivial encryption.\\n * @param value Value to encrypt.\\n * @param toType Target type.\\n * @return result Result value of the target type.\\n */\\n function trivialEncrypt(uint256 value, FheType toType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).trivialEncrypt(value, toType);\\n }\\n\\n function rand(FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRand(randType);\\n }\\n\\n function randBounded(uint256 upperBound, FheType randType) internal returns (bytes32 result) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n result = IFHEVMExecutor($.CoprocessorAddress).fheRandBounded(upperBound, randType);\\n }\\n\\n /**\\n * @notice Allows the use of handle by address account for this transaction.\\n * @dev The caller must be allowed to use handle for allowTransient() to succeed.\\n * If not, allowTransient() reverts.\\n * The Coprocessor contract can always allowTransient(), contrarily to allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allowTransient(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allowTransient(handle, account);\\n }\\n\\n /**\\n * @notice Allows the use of handle for the address account.\\n * @dev The caller must be allowed to use handle for allow() to succeed. If not, allow() reverts.\\n * @param handle Handle.\\n * @param account Address of the account.\\n */\\n function allow(bytes32 handle, address account) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).allow(handle, account);\\n }\\n\\n /**\\n * @notice Allows the handle to be publicly decryptable.\\n * @dev The caller must be allowed to use handle for makePubliclyDecryptable() to succeed.\\n * If not, makePubliclyDecryptable() reverts.\\n * @param handle Handle.\\n */\\n function makePubliclyDecryptable(bytes32 handle) internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n bytes32[] memory handleArray = new bytes32[](1);\\n handleArray[0] = handle;\\n IACL($.ACLAddress).allowForDecryption(handleArray);\\n }\\n\\n /**\\n * @dev This function removes the transient allowances in the ACL, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageACL() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n IACL($.ACLAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @dev This function removes the transient proofs in the InputVerifier, which could be useful for integration\\n * with Account Abstraction when bundling several UserOps calling the FHEVMExecutor Coprocessor.\\n */\\n function cleanTransientStorageInputVerifier() internal {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n address inputVerifierAddress = IFHEVMExecutor($.CoprocessorAddress).getInputVerifierAddress();\\n IInputVerifier(inputVerifierAddress).cleanTransientStorage();\\n }\\n\\n /**\\n * @notice Returns whether the account is allowed to use the handle, either due to\\n * allowTransient() or allow().\\n * @param handle Handle.\\n * @param account Address of the account.\\n * @return isAllowed Whether the account can access the handle.\\n */\\n function isAllowed(bytes32 handle, address account) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowed(handle, account);\\n }\\n\\n /**\\n * @notice Returns whether the handle is allowed to be publicly decrypted.\\n * @param handle Handle.\\n * @return isAllowed Whether the handle can be publicly decrypted.\\n */\\n function isPubliclyDecryptable(bytes32 handle) internal view returns (bool) {\\n CoprocessorConfig storage $ = getCoprocessorConfig();\\n return IACL($.ACLAddress).isAllowedForDecryption(handle);\\n }\\n}\\n\",\"keccak256\":\"0x42eaed792fa26d065044e0057b093a51dfe0666d0eb75937b99ce87bcc1d0bf2\",\"license\":\"BSD-3-Clause-Clear\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Ownable} from \\\"./Ownable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\\n * old one. This can help prevent common mistakes, such as transfers of ownership to\\n * incorrect accounts, or to contracts that are unable to interact with the\\n * permission system.\\n *\\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2Step is Ownable {\\n address private _pendingOwner;\\n\\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Returns the address of the pending owner.\\n */\\n function pendingOwner() public view virtual returns (address) {\\n return _pendingOwner;\\n }\\n\\n /**\\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n * Can only be called by the current owner.\\n *\\n * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\\n */\\n function transferOwnership(address newOwner) public virtual override onlyOwner {\\n _pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner(), newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual override {\\n delete _pendingOwner;\\n super._transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev The new owner accepts the ownership transfer.\\n */\\n function acceptOwnership() public virtual {\\n address sender = _msgSender();\\n if (pendingOwner() != sender) {\\n revert OwnableUnauthorizedAccount(sender);\\n }\\n _transferOwnership(sender);\\n }\\n}\\n\",\"keccak256\":\"0xdcad8898fda432696597752e8ec361b87d85c82cb258115427af006dacf7128c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"contracts/compliance/ComplianceRules.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {FHE, ebool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\nimport {ZamaEthereumConfig} from \\\"@fhevm/solidity/config/ZamaConfig.sol\\\";\\nimport {Ownable2Step, Ownable} from \\\"@openzeppelin/contracts/access/Ownable2Step.sol\\\";\\nimport {IIdentityRegistry} from \\\"../interfaces/IIdentityRegistry.sol\\\";\\nimport {IComplianceRules} from \\\"../interfaces/IComplianceRules.sol\\\";\\n\\n/// @title ComplianceRules\\n/// @author Gustavo Valverde\\n/// @notice Compliance aggregation contract combining registry checks via FHE.and()\\n/// @dev Not proxied \\u2014 can be redeployed independently. Delegates to the registry's\\n/// combined checkCompliance() for the standard case, and composes individual\\n/// checks for country-restricted scenarios.\\ncontract ComplianceRules is IComplianceRules, Ownable2Step, ZamaEthereumConfig {\\n IIdentityRegistry public immutable identityRegistry;\\n\\n uint8 public minComplianceLevel;\\n\\n mapping(address user => ebool result) private complianceResults;\\n mapping(address caller => bool authorized) public authorizedCallers;\\n\\n modifier onlyAuthorizedOrSelf(address user) {\\n if (msg.sender != user && !authorizedCallers[msg.sender]) {\\n revert CallerNotAuthorized();\\n }\\n _;\\n }\\n\\n constructor(\\n address registry,\\n uint8 initialMinComplianceLevel\\n ) Ownable(msg.sender) {\\n if (registry == address(0)) revert CallerNotAuthorized();\\n identityRegistry = IIdentityRegistry(registry);\\n minComplianceLevel = initialMinComplianceLevel;\\n }\\n\\n // ============ Admin ============\\n\\n function setMinComplianceLevel(uint8 newLevel) external onlyOwner {\\n minComplianceLevel = newLevel;\\n emit MinComplianceLevelUpdated(newLevel);\\n }\\n\\n function setAuthorizedCaller(address caller, bool allowed) external onlyOwner {\\n authorizedCallers[caller] = allowed;\\n emit AuthorizedCallerUpdated(caller, allowed);\\n }\\n\\n // ============ Compliance Checks ============\\n\\n /// @inheritdoc IComplianceRules\\n function checkCompliance(address user) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n if (!identityRegistry.isAttested(user)) {\\n return _storeResult(user, FHE.asEbool(false));\\n }\\n\\n // Delegate to registry's combined check (level + blacklist)\\n ebool result = identityRegistry.checkCompliance(user, minComplianceLevel);\\n\\n return _storeResult(user, result);\\n }\\n\\n /// @inheritdoc IComplianceRules\\n function checkComplianceWithCountry(\\n address user,\\n uint16 allowedCountry\\n ) external onlyAuthorizedOrSelf(user) returns (ebool) {\\n if (!identityRegistry.isAttested(user)) {\\n return _storeResult(user, FHE.asEbool(false));\\n }\\n\\n // Combined level + blacklist check\\n ebool baseCompliance = identityRegistry.checkCompliance(user, minComplianceLevel);\\n // Additional country restriction\\n ebool isFromAllowedCountry = identityRegistry.isFromCountry(user, allowedCountry);\\n\\n ebool result = FHE.and(baseCompliance, isFromAllowedCountry);\\n\\n return _storeResult(user, result);\\n }\\n\\n /// @inheritdoc IComplianceRules\\n function getComplianceResult(address user) external view returns (ebool) {\\n ebool result = complianceResults[user];\\n if (!FHE.isSenderAllowed(result)) revert AccessProhibited();\\n return result;\\n }\\n\\n /// @inheritdoc IComplianceRules\\n function hasComplianceResult(address user) external view returns (bool) {\\n return FHE.isInitialized(complianceResults[user]);\\n }\\n\\n // ============ Internal ============\\n\\n function _storeResult(address user, ebool result) internal returns (ebool) {\\n complianceResults[user] = result;\\n FHE.allowThis(result);\\n FHE.allow(result, msg.sender);\\n emit ComplianceChecked(user);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x8fc18f01ad43ed5aa909a0f11d0bcc077108ccf96648d5039e81149a3a82294d\",\"license\":\"MIT\"},\"contracts/interfaces/IComplianceRules.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.27;\\n\\nimport {ebool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\n\\n/// @title IComplianceRules\\n/// @notice Interface for the compliance aggregation contract\\ninterface IComplianceRules {\\n event MinComplianceLevelUpdated(uint8 indexed newLevel);\\n event ComplianceChecked(address indexed user);\\n event AuthorizedCallerUpdated(address indexed caller, bool indexed allowed);\\n\\n error CallerNotAuthorized();\\n error AccessProhibited();\\n\\n /// @notice Check if user passes compliance (level + blacklist)\\n function checkCompliance(address user) external returns (ebool);\\n\\n /// @notice Check compliance with additional country restriction\\n function checkComplianceWithCountry(address user, uint16 allowedCountry) external returns (ebool);\\n\\n /// @notice Get the last cached compliance result\\n function getComplianceResult(address user) external view returns (ebool);\\n\\n /// @notice Whether a cached compliance result exists\\n function hasComplianceResult(address user) external view returns (bool);\\n\\n function minComplianceLevel() external view returns (uint8);\\n function authorizedCallers(address caller) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xd0a3b24edf6d3c71289fa9b6fd71438f29bcca69d09399963788496f6cdfed0e\",\"license\":\"MIT\"},\"contracts/interfaces/IIdentityRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// solhint-disable func-name-mixedcase\\npragma solidity ^0.8.27;\\n\\nimport {euint8, euint16, ebool, externalEuint8, externalEuint16, externalEbool} from \\\"@fhevm/solidity/lib/FHE.sol\\\";\\n\\n/// @title IIdentityRegistry\\n/// @author Gustavo Valverde\\n/// @notice Interface for the on-chain encrypted identity registry with EIP-712 permits,\\n/// per-attribute selective grants, and x402 compliance oracle surface\\ninterface IIdentityRegistry {\\n // ============ Enums ============\\n\\n /// @notice Purpose of an attribute access grant (on-chain equivalent of OAuth scopes)\\n enum Purpose {\\n COMPLIANCE_CHECK,\\n AGE_VERIFICATION,\\n NATIONALITY_CHECK,\\n TRANSFER_GATING,\\n AUDIT\\n }\\n\\n // ============ Events ============\\n\\n /// @notice Emitted when an identity is attested via registrar permit\\n event IdentityAttested(address indexed user);\\n\\n /// @notice Emitted when an identity attestation is revoked\\n event IdentityRevoked(address indexed user);\\n\\n /// @notice Emitted when a user grants per-attribute access to a grantee\\n event AttributeAccessGranted(\\n address indexed user,\\n address indexed grantee,\\n uint8 attributeMask,\\n Purpose purpose\\n );\\n\\n /// @notice Emitted when a registrar is added or removed\\n event RegistrarUpdated(address indexed registrar, bool status);\\n\\n // ============ Structs ============\\n\\n /// @notice Registrar-signed permit data for user-submitted attestation\\n struct AttestPermitData {\\n uint8 birthYearOffset;\\n uint16 countryCode;\\n uint8 complianceLevel;\\n bool isBlacklisted;\\n bytes32 proofSetHash;\\n uint32 policyVersion;\\n uint256 deadline;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n }\\n\\n // ============ Errors ============\\n\\n /// @notice Thrown when caller is not an authorized registrar\\n error OnlyRegistrar();\\n\\n /// @notice Thrown when querying a user without attestation\\n error NotAttested();\\n\\n /// @notice Thrown when attempting to attest an already-attested user\\n error AlreadyAttested();\\n\\n /// @notice Thrown when the EIP-712 permit signature is invalid\\n error InvalidPermit();\\n\\n /// @notice Thrown when the permit deadline has passed\\n error PermitExpired();\\n\\n /// @notice Thrown when an address argument is the zero address\\n error ZeroAddress();\\n\\n /// @notice Thrown when caller lacks FHE permission for encrypted data\\n error AccessProhibited();\\n\\n // ============ Attestation with Permit ============\\n\\n /// @notice Attest identity using a registrar-signed EIP-712 permit\\n /// @dev The user submits this transaction with their own FHE-encrypted values.\\n /// The contract verifies the registrar's signature over the plaintext values\\n /// and stores the user's encrypted values. Nonce is auto-incremented.\\n /// @param permit Registrar-signed permit containing plaintext values + ECDSA signature\\n /// @param encBirthYearOffset FHE-encrypted birth year offset\\n /// @param encCountryCode FHE-encrypted country code\\n /// @param encComplianceLevel FHE-encrypted compliance level\\n /// @param encIsBlacklisted FHE-encrypted blacklist status\\n /// @param inputProof FHE input proof binding encrypted values to (contract, user)\\n function attestWithPermit(\\n AttestPermitData calldata permit,\\n externalEuint8 encBirthYearOffset,\\n externalEuint16 encCountryCode,\\n externalEuint8 encComplianceLevel,\\n externalEbool encIsBlacklisted,\\n bytes calldata inputProof\\n ) external;\\n\\n // ============ Revocation ============\\n\\n /// @notice Revoke caller's own attestation (user self-revocation)\\n function revokeIdentity() external;\\n\\n /// @notice Revoke a user's attestation (registrar-only)\\n /// @param user Address of the user to revoke\\n function revokeIdentityFor(address user) external;\\n\\n // ============ Per-Attribute Access Grants ============\\n\\n /// @notice Grant FHE access to specific attributes for a stated purpose\\n /// @param grantee Address receiving access permission\\n /// @param attributeMask Bitmask: 0x01=birthYear, 0x02=country, 0x04=compliance, 0x08=blacklist\\n /// @param purpose Why access is needed (on-chain audit trail)\\n function grantAttributeAccess(address grantee, uint8 attributeMask, Purpose purpose) external;\\n\\n /// @notice Grant FHE access to all attributes (convenience wrapper)\\n /// @param grantee Address receiving access permission\\n function grantAccessTo(address grantee) external;\\n\\n // ============ Compliance Checks (x402 Oracle Surface) ============\\n\\n /// @notice Combined compliance check: level >= minLevel AND not blacklisted\\n /// @dev State-mutating (FHE comparisons). Stores and returns encrypted result.\\n /// x402 facilitators compose this inline:\\n /// `euint64 amt = FHE.select(registry.checkCompliance(payer, 2), amount, zero);`\\n /// @param user Address to check\\n /// @param minLevel Minimum compliance level required\\n /// @return Encrypted boolean: true if compliant\\n function checkCompliance(address user, uint8 minLevel) external returns (ebool);\\n\\n /// @notice Check if user meets minimum compliance level\\n /// @param user Address to check\\n /// @param minLevel Minimum level required\\n /// @return Encrypted boolean result\\n function hasMinComplianceLevel(address user, uint8 minLevel) external returns (ebool);\\n\\n /// @notice Check if user is from a specific country\\n /// @param user Address to check\\n /// @param country ISO 3166-1 numeric country code\\n /// @return Encrypted boolean result\\n function isFromCountry(address user, uint16 country) external returns (ebool);\\n\\n /// @notice Check if user is not blacklisted\\n /// @param user Address to check\\n /// @return Encrypted boolean (true if NOT blacklisted)\\n function isNotBlacklisted(address user) external returns (ebool);\\n\\n // ============ View Getters ============\\n\\n /// @notice Check if a user has a valid attestation\\n function isAttested(address user) external view returns (bool);\\n\\n /// @notice Get user's encrypted birth year offset (caller must have FHE ACL access)\\n function getBirthYearOffset(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted country code (caller must have FHE ACL access)\\n function getCountryCode(address user) external view returns (euint16);\\n\\n /// @notice Get user's encrypted compliance level (caller must have FHE ACL access)\\n function getComplianceLevel(address user) external view returns (euint8);\\n\\n /// @notice Get user's encrypted blacklist status (caller must have FHE ACL access)\\n function getBlacklistStatus(address user) external view returns (ebool);\\n\\n /// @notice Get the proof set hash for a user's attestation\\n function getProofSetHash(address user) external view returns (bytes32);\\n\\n /// @notice Get the policy version for a user's attestation\\n function getPolicyVersion(address user) external view returns (uint32);\\n\\n /// @notice Get the attribute mask granted to a grantee by a user\\n function getGrantedAttributes(address user, address grantee) external view returns (uint8);\\n\\n /// @notice Get the current attestation ID for a user (0 if not attested)\\n function currentAttestationId(address user) external view returns (uint256);\\n\\n /// @notice Get the timestamp when a user was attested\\n function attestationTimestamp(address user) external view returns (uint256);\\n\\n /// @notice Get the EIP-712 nonce for a user (for permit construction)\\n function nonces(address user) external view returns (uint256);\\n\\n /// @notice Check if an address is an authorized registrar\\n function registrars(address registrar) external view returns (bool);\\n\\n /// @notice Get a previously stored verification result\\n /// @param key The result key (keccak256 of check parameters)\\n function getVerificationResult(bytes32 key) external view returns (ebool);\\n\\n // ============ Constants ============\\n\\n function ATTR_BIRTH_YEAR() external pure returns (uint8);\\n function ATTR_COUNTRY() external pure returns (uint8);\\n function ATTR_COMPLIANCE() external pure returns (uint8);\\n function ATTR_BLACKLIST() external pure returns (uint8);\\n function ATTR_ALL() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0x847c886dde99da75c0f3633c74a8f324c3767acf242e7241eb7c7c4e0f906621\",\"license\":\"MIT\"},\"encrypted-types/EncryptedTypes.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\ntype ebool is bytes32;\\n\\ntype euint8 is bytes32;\\ntype euint16 is bytes32;\\ntype euint24 is bytes32;\\ntype euint32 is bytes32;\\ntype euint40 is bytes32;\\ntype euint48 is bytes32;\\ntype euint56 is bytes32;\\ntype euint64 is bytes32;\\ntype euint72 is bytes32;\\ntype euint80 is bytes32;\\ntype euint88 is bytes32;\\ntype euint96 is bytes32;\\ntype euint104 is bytes32;\\ntype euint112 is bytes32;\\ntype euint120 is bytes32;\\ntype euint128 is bytes32;\\ntype euint136 is bytes32;\\ntype euint144 is bytes32;\\ntype euint152 is bytes32;\\ntype euint160 is bytes32;\\ntype euint168 is bytes32;\\ntype euint176 is bytes32;\\ntype euint184 is bytes32;\\ntype euint192 is bytes32;\\ntype euint200 is bytes32;\\ntype euint208 is bytes32;\\ntype euint216 is bytes32;\\ntype euint224 is bytes32;\\ntype euint232 is bytes32;\\ntype euint240 is bytes32;\\ntype euint248 is bytes32;\\ntype euint256 is bytes32;\\n\\ntype eint8 is bytes32;\\ntype eint16 is bytes32;\\ntype eint24 is bytes32;\\ntype eint32 is bytes32;\\ntype eint40 is bytes32;\\ntype eint48 is bytes32;\\ntype eint56 is bytes32;\\ntype eint64 is bytes32;\\ntype eint72 is bytes32;\\ntype eint80 is bytes32;\\ntype eint88 is bytes32;\\ntype eint96 is bytes32;\\ntype eint104 is bytes32;\\ntype eint112 is bytes32;\\ntype eint120 is bytes32;\\ntype eint128 is bytes32;\\ntype eint136 is bytes32;\\ntype eint144 is bytes32;\\ntype eint152 is bytes32;\\ntype eint160 is bytes32;\\ntype eint168 is bytes32;\\ntype eint176 is bytes32;\\ntype eint184 is bytes32;\\ntype eint192 is bytes32;\\ntype eint200 is bytes32;\\ntype eint208 is bytes32;\\ntype eint216 is bytes32;\\ntype eint224 is bytes32;\\ntype eint232 is bytes32;\\ntype eint240 is bytes32;\\ntype eint248 is bytes32;\\ntype eint256 is bytes32;\\n\\ntype eaddress is bytes32;\\n\\ntype ebytes1 is bytes32;\\ntype ebytes2 is bytes32;\\ntype ebytes3 is bytes32;\\ntype ebytes4 is bytes32;\\ntype ebytes5 is bytes32;\\ntype ebytes6 is bytes32;\\ntype ebytes7 is bytes32;\\ntype ebytes8 is bytes32;\\ntype ebytes9 is bytes32;\\ntype ebytes10 is bytes32;\\ntype ebytes11 is bytes32;\\ntype ebytes12 is bytes32;\\ntype ebytes13 is bytes32;\\ntype ebytes14 is bytes32;\\ntype ebytes15 is bytes32;\\ntype ebytes16 is bytes32;\\ntype ebytes17 is bytes32;\\ntype ebytes18 is bytes32;\\ntype ebytes19 is bytes32;\\ntype ebytes20 is bytes32;\\ntype ebytes21 is bytes32;\\ntype ebytes22 is bytes32;\\ntype ebytes23 is bytes32;\\ntype ebytes24 is bytes32;\\ntype ebytes25 is bytes32;\\ntype ebytes26 is bytes32;\\ntype ebytes27 is bytes32;\\ntype ebytes28 is bytes32;\\ntype ebytes29 is bytes32;\\ntype ebytes30 is bytes32;\\ntype ebytes31 is bytes32;\\ntype ebytes32 is bytes32;\\n\\ntype externalEbool is bytes32;\\n\\ntype externalEuint8 is bytes32;\\ntype externalEuint16 is bytes32;\\ntype externalEuint24 is bytes32;\\ntype externalEuint32 is bytes32;\\ntype externalEuint40 is bytes32;\\ntype externalEuint48 is bytes32;\\ntype externalEuint56 is bytes32;\\ntype externalEuint64 is bytes32;\\ntype externalEuint72 is bytes32;\\ntype externalEuint80 is bytes32;\\ntype externalEuint88 is bytes32;\\ntype externalEuint96 is bytes32;\\ntype externalEuint104 is bytes32;\\ntype externalEuint112 is bytes32;\\ntype externalEuint120 is bytes32;\\ntype externalEuint128 is bytes32;\\ntype externalEuint136 is bytes32;\\ntype externalEuint144 is bytes32;\\ntype externalEuint152 is bytes32;\\ntype externalEuint160 is bytes32;\\ntype externalEuint168 is bytes32;\\ntype externalEuint176 is bytes32;\\ntype externalEuint184 is bytes32;\\ntype externalEuint192 is bytes32;\\ntype externalEuint200 is bytes32;\\ntype externalEuint208 is bytes32;\\ntype externalEuint216 is bytes32;\\ntype externalEuint224 is bytes32;\\ntype externalEuint232 is bytes32;\\ntype externalEuint240 is bytes32;\\ntype externalEuint248 is bytes32;\\ntype externalEuint256 is bytes32;\\n\\ntype externalEint8 is bytes32;\\ntype externalEint16 is bytes32;\\ntype externalEint24 is bytes32;\\ntype externalEint32 is bytes32;\\ntype externalEint40 is bytes32;\\ntype externalEint48 is bytes32;\\ntype externalEint56 is bytes32;\\ntype externalEint64 is bytes32;\\ntype externalEint72 is bytes32;\\ntype externalEint80 is bytes32;\\ntype externalEint88 is bytes32;\\ntype externalEint96 is bytes32;\\ntype externalEint104 is bytes32;\\ntype externalEint112 is bytes32;\\ntype externalEint120 is bytes32;\\ntype externalEint128 is bytes32;\\ntype externalEint136 is bytes32;\\ntype externalEint144 is bytes32;\\ntype externalEint152 is bytes32;\\ntype externalEint160 is bytes32;\\ntype externalEint168 is bytes32;\\ntype externalEint176 is bytes32;\\ntype externalEint184 is bytes32;\\ntype externalEint192 is bytes32;\\ntype externalEint200 is bytes32;\\ntype externalEint208 is bytes32;\\ntype externalEint216 is bytes32;\\ntype externalEint224 is bytes32;\\ntype externalEint232 is bytes32;\\ntype externalEint240 is bytes32;\\ntype externalEint248 is bytes32;\\ntype externalEint256 is bytes32;\\n\\ntype externalEaddress is bytes32;\\n\\ntype externalEbytes1 is bytes32;\\ntype externalEbytes2 is bytes32;\\ntype externalEbytes3 is bytes32;\\ntype externalEbytes4 is bytes32;\\ntype externalEbytes5 is bytes32;\\ntype externalEbytes6 is bytes32;\\ntype externalEbytes7 is bytes32;\\ntype externalEbytes8 is bytes32;\\ntype externalEbytes9 is bytes32;\\ntype externalEbytes10 is bytes32;\\ntype externalEbytes11 is bytes32;\\ntype externalEbytes12 is bytes32;\\ntype externalEbytes13 is bytes32;\\ntype externalEbytes14 is bytes32;\\ntype externalEbytes15 is bytes32;\\ntype externalEbytes16 is bytes32;\\ntype externalEbytes17 is bytes32;\\ntype externalEbytes18 is bytes32;\\ntype externalEbytes19 is bytes32;\\ntype externalEbytes20 is bytes32;\\ntype externalEbytes21 is bytes32;\\ntype externalEbytes22 is bytes32;\\ntype externalEbytes23 is bytes32;\\ntype externalEbytes24 is bytes32;\\ntype externalEbytes25 is bytes32;\\ntype externalEbytes26 is bytes32;\\ntype externalEbytes27 is bytes32;\\ntype externalEbytes28 is bytes32;\\ntype externalEbytes29 is bytes32;\\ntype externalEbytes30 is bytes32;\\ntype externalEbytes31 is bytes32;\\ntype externalEbytes32 is bytes32;\\n\",\"keccak256\":\"0x5da9799cd5c30067ea946164722197151baee1f2579a76f01874d4fb25df02a3\",\"license\":\"MIT\"}},\"version\":1}",
|
|
399
|
+
"bytecode": "0x60a060405234801561000f575f5ffd5b5060405161117638038061117683398101604081905261002e91610348565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100c5565b5061006d6100686100e1565b610250565b6001600160a01b0382166100945760405163c183bcef60e01b815260040160405180910390fd5b6001600160a01b039091166080526001805460ff909216600160a01b0260ff60a01b19909216919091179055610390565b600180546001600160a01b03191690556100de816102f9565b50565b604080516060810182525f80825260208201819052918101919091524660010361013a575060408051606080820183525f8083526020808401829052928401819052835191820184528082529181018290529182015290565b4662aa36a7036101b9575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b46617a6903610237575060408051606080820183525f8083526020808401829052928401528251908101835273f0ffdc93b7e186bc2f8cb3daa75d86d1930a433d81527392c920834ec8941d2c77d188936e1f7a6f49c1279181019190915273be0e383937d564d7ff0bc3b46c51f0bf8d5c311a9181019190915290565b6040516373cac13b60e01b815260040160405180910390fd5b80517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970080546001600160a01b03199081166001600160a01b039384161790915560208301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497018054831691841691909117905560408301517f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e46497028054909216921691909117905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f60408385031215610359575f5ffd5b82516001600160a01b038116811461036f575f5ffd5b602084015190925060ff81168114610385575f5ffd5b809150509250929050565b608051610dab6103cb5f395f818161013901528181610316015281816103d0015281816104680152818161055f01526106140152610dab5ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063714d3178116100935780638da5cb5b116100635780638da5cb5b14610217578063e30c397814610227578063e451a1b414610238578063f2fde38b1461024b575f5ffd5b8063714d3178146101ec578063715018a6146101ff57806379ba5097146102075780638927b0301461020f575f5ffd5b806322005b5e116100ce57806322005b5e146101735780632c289dcf14610194578063454bbd29146101a7578063536fff6c146101ba575f5ffd5b806306615943146100f45780630d4e4b751461011f578063134e18f414610134575b5f5ffd5b60015461010890600160a01b900460ff1681565b60405160ff90911681526020015b60405180910390f35b61013261012d366004610c2d565b61025e565b005b61015b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610116565b610186610181366004610c68565b6102af565b604051908152602001610116565b6101866101a2366004610ca3565b6104f8565b6101326101b5366004610cc9565b610694565b6101dc6101c8366004610ca3565b60036020525f908152604090205460ff1681565b6040519015158152602001610116565b6101dc6101fa366004610ca3565b6106ef565b610132610710565b610132610723565b61018661076c565b5f546001600160a01b031661015b565b6001546001600160a01b031661015b565b610186610246366004610ca3565b61077a565b610132610259366004610ca3565b6107b8565b610266610828565b6001805460ff60a01b1916600160a01b60ff8416908102919091179091556040517f4fc1353c57e2c1137fcdf224e12f79bc39769d1abd44cd593ff3554435677471905f90a250565b5f82336001600160a01b038216148015906102d95750335f9081526003602052604090205460ff16155b156102f75760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561035b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037f9190610cf3565b61039c57610395846103905f610854565b61086f565b91506104f1565b60015460405163d1e8eba960e01b81526001600160a01b038681166004830152600160a01b90920460ff1660248201525f917f0000000000000000000000000000000000000000000000000000000000000000169063d1e8eba9906044016020604051808303815f875af1158015610416573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043a9190610d0e565b6040516391b4975560e01b81526001600160a01b03878116600483015261ffff871660248301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906391b49755906044016020604051808303815f875af11580156104ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d29190610d0e565b90505f6104df83836108d7565b90506104eb878261086f565b94505050505b5092915050565b5f81336001600160a01b038216148015906105225750335f9081526003602052604090205460ff16155b156105405760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa1580156105a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c89190610cf3565b6105e0576105d9836103905f610854565b915061068e565b60015460405163d1e8eba960e01b81526001600160a01b038581166004830152600160a01b90920460ff1660248201525f917f0000000000000000000000000000000000000000000000000000000000000000169063d1e8eba9906044016020604051808303815f875af115801561065a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067e9190610d0e565b905061068a848261086f565b9250505b50919050565b61069c610828565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917fad857fa38c9319cb80848f1ef2f924383b90297eb5d71755738ff037d100faa191a35050565b6001600160a01b0381165f9081526002602052604081205415155b92915050565b610718610828565b6107215f61090c565b565b60015433906001600160a01b031681146107605760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107698161090c565b50565b5f610775610925565b905090565b6001600160a01b0381165f9081526002602052604081205461079b81610959565b61070a57604051631a6bd1fd60e01b815260040160405180910390fd5b6107c0610828565b600180546001600160a01b0383166001600160a01b031990911681179091556107f05f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146107215760405163118cdaa760e01b8152336004820152602401610757565b5f61070a82610863575f610866565b60015b60ff165f610964565b6001600160a01b0382165f90815260026020526040812082905561089282610a0e565b5061089d8233610a1d565b506040516001600160a01b038416907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a250919050565b5f826108e9576108e65f610854565b92505b816108fa576108f75f610854565b91505b61090583835f610a2f565b9392505050565b600180546001600160a01b031916905561076981610ae4565b5f466001036109345750600190565b4662aa36a703610945575061271190565b46617a690361095457505f1990565b505f90565b5f61070a8233610b33565b7f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970154604051639cd07acb60e01b81525f915f516020610d565f395f51905f52916001600160a01b0390911690639cd07acb906109c69087908790600401610d25565b6020604051808303815f875af11580156109e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a069190610d0e565b949350505050565b5f610a198230610bb7565b5090565b5f610a288383610bb7565b5090919050565b5f5f8215610a425750600160f81b610a45565b505f5b5f5f516020610d565f395f51905f52600181015460405163d99882d560e01b815260048101899052602481018890526001600160f81b0319851660448201529192506001600160a01b03169063d99882d5906064016020604051808303815f875af1158015610ab6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada9190610d0e565b9695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f516020610d565f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610b93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a069190610cf3565b5f5f516020610d565f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610c12575f5ffd5b505af1158015610c24573d5f5f3e3d5ffd5b50505050505050565b5f60208284031215610c3d575f5ffd5b813560ff81168114610905575f5ffd5b80356001600160a01b0381168114610c63575f5ffd5b919050565b5f5f60408385031215610c79575f5ffd5b610c8283610c4d565b9150602083013561ffff81168114610c98575f5ffd5b809150509250929050565b5f60208284031215610cb3575f5ffd5b61090582610c4d565b8015158114610769575f5ffd5b5f5f60408385031215610cda575f5ffd5b610ce383610c4d565b91506020830135610c9881610cbc565b5f60208284031215610d03575f5ffd5b815161090581610cbc565b5f60208284031215610d1e575f5ffd5b5051919050565b8281526040810160548310610d4857634e487b7160e01b5f52602160045260245ffd5b826020830152939250505056fe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a26469706673582212205189c2abbc42edb2d456ea3643c726c1c43fec27f0ccfefd3b566dd844a4c1f764736f6c634300081b0033",
|
|
400
|
+
"deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063714d3178116100935780638da5cb5b116100635780638da5cb5b14610217578063e30c397814610227578063e451a1b414610238578063f2fde38b1461024b575f5ffd5b8063714d3178146101ec578063715018a6146101ff57806379ba5097146102075780638927b0301461020f575f5ffd5b806322005b5e116100ce57806322005b5e146101735780632c289dcf14610194578063454bbd29146101a7578063536fff6c146101ba575f5ffd5b806306615943146100f45780630d4e4b751461011f578063134e18f414610134575b5f5ffd5b60015461010890600160a01b900460ff1681565b60405160ff90911681526020015b60405180910390f35b61013261012d366004610c2d565b61025e565b005b61015b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610116565b610186610181366004610c68565b6102af565b604051908152602001610116565b6101866101a2366004610ca3565b6104f8565b6101326101b5366004610cc9565b610694565b6101dc6101c8366004610ca3565b60036020525f908152604090205460ff1681565b6040519015158152602001610116565b6101dc6101fa366004610ca3565b6106ef565b610132610710565b610132610723565b61018661076c565b5f546001600160a01b031661015b565b6001546001600160a01b031661015b565b610186610246366004610ca3565b61077a565b610132610259366004610ca3565b6107b8565b610266610828565b6001805460ff60a01b1916600160a01b60ff8416908102919091179091556040517f4fc1353c57e2c1137fcdf224e12f79bc39769d1abd44cd593ff3554435677471905f90a250565b5f82336001600160a01b038216148015906102d95750335f9081526003602052604090205460ff16155b156102f75760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa15801561035b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037f9190610cf3565b61039c57610395846103905f610854565b61086f565b91506104f1565b60015460405163d1e8eba960e01b81526001600160a01b038681166004830152600160a01b90920460ff1660248201525f917f0000000000000000000000000000000000000000000000000000000000000000169063d1e8eba9906044016020604051808303815f875af1158015610416573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043a9190610d0e565b6040516391b4975560e01b81526001600160a01b03878116600483015261ffff871660248301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906391b49755906044016020604051808303815f875af11580156104ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d29190610d0e565b90505f6104df83836108d7565b90506104eb878261086f565b94505050505b5092915050565b5f81336001600160a01b038216148015906105225750335f9081526003602052604090205460ff16155b156105405760405163c183bcef60e01b815260040160405180910390fd5b604051631e11d7dd60e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690633c23afba90602401602060405180830381865afa1580156105a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c89190610cf3565b6105e0576105d9836103905f610854565b915061068e565b60015460405163d1e8eba960e01b81526001600160a01b038581166004830152600160a01b90920460ff1660248201525f917f0000000000000000000000000000000000000000000000000000000000000000169063d1e8eba9906044016020604051808303815f875af115801561065a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067e9190610d0e565b905061068a848261086f565b9250505b50919050565b61069c610828565b6001600160a01b0382165f81815260036020526040808220805460ff191685151590811790915590519092917fad857fa38c9319cb80848f1ef2f924383b90297eb5d71755738ff037d100faa191a35050565b6001600160a01b0381165f9081526002602052604081205415155b92915050565b610718610828565b6107215f61090c565b565b60015433906001600160a01b031681146107605760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6107698161090c565b50565b5f610775610925565b905090565b6001600160a01b0381165f9081526002602052604081205461079b81610959565b61070a57604051631a6bd1fd60e01b815260040160405180910390fd5b6107c0610828565b600180546001600160a01b0383166001600160a01b031990911681179091556107f05f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146107215760405163118cdaa760e01b8152336004820152602401610757565b5f61070a82610863575f610866565b60015b60ff165f610964565b6001600160a01b0382165f90815260026020526040812082905561089282610a0e565b5061089d8233610a1d565b506040516001600160a01b038416907f296fb6ae07b0cc29ce12d17d682365452ebd827f6f17a1ff7478ef0a1edae665905f90a250919050565b5f826108e9576108e65f610854565b92505b816108fa576108f75f610854565b91505b61090583835f610a2f565b9392505050565b600180546001600160a01b031916905561076981610ae4565b5f466001036109345750600190565b4662aa36a703610945575061271190565b46617a690361095457505f1990565b505f90565b5f61070a8233610b33565b7f9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e464970154604051639cd07acb60e01b81525f915f516020610d565f395f51905f52916001600160a01b0390911690639cd07acb906109c69087908790600401610d25565b6020604051808303815f875af11580156109e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a069190610d0e565b949350505050565b5f610a198230610bb7565b5090565b5f610a288383610bb7565b5090919050565b5f5f8215610a425750600160f81b610a45565b505f5b5f5f516020610d565f395f51905f52600181015460405163d99882d560e01b815260048101899052602481018890526001600160f81b0319851660448201529192506001600160a01b03169063d99882d5906064016020604051808303815f875af1158015610ab6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ada9190610d0e565b9695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f516020610d565f395f51905f5280546040516382027b6d60e01b8152600481018790526001600160a01b0386811660248301529293509116906382027b6d90604401602060405180830381865afa158015610b93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a069190610cf3565b5f5f516020610d565f395f51905f528054604051635ca4b5b160e11b8152600481018690526001600160a01b03858116602483015292935091169063b9496b62906044015f604051808303815f87803b158015610c12575f5ffd5b505af1158015610c24573d5f5f3e3d5ffd5b50505050505050565b5f60208284031215610c3d575f5ffd5b813560ff81168114610905575f5ffd5b80356001600160a01b0381168114610c63575f5ffd5b919050565b5f5f60408385031215610c79575f5ffd5b610c8283610c4d565b9150602083013561ffff81168114610c98575f5ffd5b809150509250929050565b5f60208284031215610cb3575f5ffd5b61090582610c4d565b8015158114610769575f5ffd5b5f5f60408385031215610cda575f5ffd5b610ce383610c4d565b91506020830135610c9881610cbc565b5f60208284031215610d03575f5ffd5b815161090581610cbc565b5f60208284031215610d1e575f5ffd5b5051919050565b8281526040810160548310610d4857634e487b7160e01b5f52602160045260245ffd5b826020830152939250505056fe9e7b61f58c47dc699ac88507c4f5bb9f121c03808c5676a8078fe583e4649700a26469706673582212205189c2abbc42edb2d456ea3643c726c1c43fec27f0ccfefd3b566dd844a4c1f764736f6c634300081b0033",
|
|
377
401
|
"devdoc": {
|
|
378
402
|
"author": "Gustavo Valverde",
|
|
379
|
-
"
|
|
380
|
-
"
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
"AuthorizedCallerUpdated(address,bool)": {
|
|
385
|
-
"params": {
|
|
386
|
-
"allowed": "Whether the caller is allowed",
|
|
387
|
-
"caller": "Address being authorized or revoked"
|
|
388
|
-
}
|
|
389
|
-
},
|
|
390
|
-
"ComplianceChecked(address)": {
|
|
391
|
-
"params": {
|
|
392
|
-
"user": "Address of the user whose compliance was checked"
|
|
393
|
-
}
|
|
394
|
-
},
|
|
395
|
-
"MinComplianceLevelUpdated(uint8)": {
|
|
396
|
-
"params": {
|
|
397
|
-
"newLevel": "The new minimum compliance level required for compliance"
|
|
398
|
-
}
|
|
399
|
-
},
|
|
400
|
-
"OwnershipTransferStarted(address,address)": {
|
|
401
|
-
"params": {
|
|
402
|
-
"currentOwner": "Current owner address",
|
|
403
|
-
"pendingOwner": "Address that can accept ownership"
|
|
403
|
+
"details": "Not proxied — can be redeployed independently. Delegates to the registry's combined checkCompliance() for the standard case, and composes individual checks for country-restricted scenarios.",
|
|
404
|
+
"errors": {
|
|
405
|
+
"OwnableInvalidOwner(address)": [
|
|
406
|
+
{
|
|
407
|
+
"details": "The owner is not a valid owner account. (eg. `address(0)`)"
|
|
404
408
|
}
|
|
405
|
-
|
|
406
|
-
"
|
|
407
|
-
|
|
408
|
-
"
|
|
409
|
-
"previousOwner": "Previous owner address"
|
|
409
|
+
],
|
|
410
|
+
"OwnableUnauthorizedAccount(address)": [
|
|
411
|
+
{
|
|
412
|
+
"details": "The caller account is not authorized to perform an operation."
|
|
410
413
|
}
|
|
411
|
-
|
|
414
|
+
]
|
|
412
415
|
},
|
|
413
416
|
"kind": "dev",
|
|
414
417
|
"methods": {
|
|
415
|
-
"
|
|
416
|
-
"details": "
|
|
417
|
-
"params": {
|
|
418
|
-
"user": "Address to check"
|
|
419
|
-
},
|
|
420
|
-
"returns": {
|
|
421
|
-
"_0": "Encrypted boolean indicating compliance status Note: This function makes external calls to IdentityRegistry which computes and stores verification results. The combined result is stored locally for later retrieval."
|
|
422
|
-
}
|
|
423
|
-
},
|
|
424
|
-
"checkComplianceWithCountry(address,uint16)": {
|
|
425
|
-
"params": {
|
|
426
|
-
"allowedCountry": "Country code that is allowed",
|
|
427
|
-
"user": "Address to check"
|
|
428
|
-
},
|
|
429
|
-
"returns": {
|
|
430
|
-
"_0": "Encrypted boolean indicating compliance status"
|
|
431
|
-
}
|
|
432
|
-
},
|
|
433
|
-
"constructor": {
|
|
434
|
-
"params": {
|
|
435
|
-
"initialMinComplianceLevel": "Initial minimum compliance level (default: 1)",
|
|
436
|
-
"registry": "Address of the IdentityRegistry contract"
|
|
437
|
-
}
|
|
438
|
-
},
|
|
439
|
-
"getComplianceResult(address)": {
|
|
440
|
-
"details": "Call checkCompliance first to compute and store the result",
|
|
441
|
-
"params": {
|
|
442
|
-
"user": "Address to get result for"
|
|
443
|
-
},
|
|
444
|
-
"returns": {
|
|
445
|
-
"_0": "Encrypted boolean result"
|
|
446
|
-
}
|
|
418
|
+
"acceptOwnership()": {
|
|
419
|
+
"details": "The new owner accepts the ownership transfer."
|
|
447
420
|
},
|
|
448
|
-
"
|
|
449
|
-
"
|
|
450
|
-
"user": "Address to check"
|
|
451
|
-
},
|
|
452
|
-
"returns": {
|
|
453
|
-
"_0": "Whether a cached result exists"
|
|
454
|
-
}
|
|
421
|
+
"owner()": {
|
|
422
|
+
"details": "Returns the address of the current owner."
|
|
455
423
|
},
|
|
456
|
-
"
|
|
457
|
-
"
|
|
458
|
-
"allowed": "Whether the caller is allowed",
|
|
459
|
-
"caller": "Address to update"
|
|
460
|
-
}
|
|
424
|
+
"pendingOwner()": {
|
|
425
|
+
"details": "Returns the address of the pending owner."
|
|
461
426
|
},
|
|
462
|
-
"
|
|
463
|
-
"
|
|
464
|
-
"newLevel": "New minimum level"
|
|
465
|
-
}
|
|
427
|
+
"renounceOwnership()": {
|
|
428
|
+
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
|
|
466
429
|
},
|
|
467
430
|
"transferOwnership(address)": {
|
|
468
|
-
"
|
|
469
|
-
"newOwner": "Address that can accept ownership"
|
|
470
|
-
}
|
|
431
|
+
"details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."
|
|
471
432
|
}
|
|
472
433
|
},
|
|
473
434
|
"title": "ComplianceRules",
|
|
@@ -475,127 +436,50 @@
|
|
|
475
436
|
},
|
|
476
437
|
"userdoc": {
|
|
477
438
|
"errors": {
|
|
478
|
-
"AccessProhibited()": [
|
|
479
|
-
{
|
|
480
|
-
"notice": "Thrown when caller lacks permission for encrypted result"
|
|
481
|
-
}
|
|
482
|
-
],
|
|
483
|
-
"CallerNotAuthorized()": [
|
|
484
|
-
{
|
|
485
|
-
"notice": "Thrown when caller is not authorized to check another user"
|
|
486
|
-
}
|
|
487
|
-
],
|
|
488
|
-
"InvalidOwner()": [
|
|
489
|
-
{
|
|
490
|
-
"notice": "Thrown when new owner is the zero address"
|
|
491
|
-
}
|
|
492
|
-
],
|
|
493
|
-
"OnlyOwner()": [
|
|
494
|
-
{
|
|
495
|
-
"notice": "Thrown when caller is not the contract owner"
|
|
496
|
-
}
|
|
497
|
-
],
|
|
498
|
-
"OnlyPendingOwner()": [
|
|
499
|
-
{
|
|
500
|
-
"notice": "Thrown when caller is not the pending owner"
|
|
501
|
-
}
|
|
502
|
-
],
|
|
503
|
-
"RegistryNotSet()": [
|
|
504
|
-
{
|
|
505
|
-
"notice": "Thrown when registry address is zero"
|
|
506
|
-
}
|
|
507
|
-
],
|
|
508
439
|
"ZamaProtocolUnsupported()": [
|
|
509
440
|
{
|
|
510
441
|
"notice": "Returned if the Zama protocol is not supported on the current chain"
|
|
511
442
|
}
|
|
512
443
|
]
|
|
513
444
|
},
|
|
514
|
-
"events": {
|
|
515
|
-
"AuthorizedCallerUpdated(address,bool)": {
|
|
516
|
-
"notice": "Emitted when a caller's authorization is updated"
|
|
517
|
-
},
|
|
518
|
-
"ComplianceChecked(address)": {
|
|
519
|
-
"notice": "Emitted when a compliance check is performed for a user"
|
|
520
|
-
},
|
|
521
|
-
"MinComplianceLevelUpdated(uint8)": {
|
|
522
|
-
"notice": "Emitted when the minimum compliance level requirement is updated"
|
|
523
|
-
},
|
|
524
|
-
"OwnershipTransferStarted(address,address)": {
|
|
525
|
-
"notice": "Emitted when ownership transfer is initiated"
|
|
526
|
-
},
|
|
527
|
-
"OwnershipTransferred(address,address)": {
|
|
528
|
-
"notice": "Emitted when ownership transfer is completed"
|
|
529
|
-
}
|
|
530
|
-
},
|
|
531
445
|
"kind": "user",
|
|
532
446
|
"methods": {
|
|
533
|
-
"acceptOwnership()": {
|
|
534
|
-
"notice": "Accept ownership transfer"
|
|
535
|
-
},
|
|
536
|
-
"authorizedCallers(address)": {
|
|
537
|
-
"notice": "Authorized callers that can request compliance checks for others"
|
|
538
|
-
},
|
|
539
447
|
"checkCompliance(address)": {
|
|
540
|
-
"notice": "Check if user passes
|
|
448
|
+
"notice": "Check if user passes compliance (level + blacklist)"
|
|
541
449
|
},
|
|
542
450
|
"checkComplianceWithCountry(address,uint16)": {
|
|
543
451
|
"notice": "Check compliance with additional country restriction"
|
|
544
452
|
},
|
|
545
|
-
"constructor": {
|
|
546
|
-
"notice": "Initialize with identity registry reference"
|
|
547
|
-
},
|
|
548
453
|
"getComplianceResult(address)": {
|
|
549
|
-
"notice": "Get the last compliance
|
|
454
|
+
"notice": "Get the last cached compliance result"
|
|
550
455
|
},
|
|
551
456
|
"hasComplianceResult(address)": {
|
|
552
|
-
"notice": "
|
|
553
|
-
},
|
|
554
|
-
"identityRegistry()": {
|
|
555
|
-
"notice": "Reference to the identity registry"
|
|
556
|
-
},
|
|
557
|
-
"minComplianceLevel()": {
|
|
558
|
-
"notice": "Minimum compliance level required for compliance"
|
|
559
|
-
},
|
|
560
|
-
"owner()": {
|
|
561
|
-
"notice": "Owner/admin"
|
|
562
|
-
},
|
|
563
|
-
"pendingOwner()": {
|
|
564
|
-
"notice": "Pending owner for two-step ownership transfer"
|
|
565
|
-
},
|
|
566
|
-
"setAuthorizedCaller(address,bool)": {
|
|
567
|
-
"notice": "Allow or revoke a caller to check compliance for other users"
|
|
568
|
-
},
|
|
569
|
-
"setMinComplianceLevel(uint8)": {
|
|
570
|
-
"notice": "Update minimum compliance level"
|
|
571
|
-
},
|
|
572
|
-
"transferOwnership(address)": {
|
|
573
|
-
"notice": "Initiate transfer of contract ownership"
|
|
457
|
+
"notice": "Whether a cached compliance result exists"
|
|
574
458
|
}
|
|
575
459
|
},
|
|
576
|
-
"notice": "
|
|
460
|
+
"notice": "Compliance aggregation contract combining registry checks via FHE.and()",
|
|
577
461
|
"version": 1
|
|
578
462
|
},
|
|
579
463
|
"storageLayout": {
|
|
580
464
|
"storage": [
|
|
581
465
|
{
|
|
582
|
-
"astId":
|
|
466
|
+
"astId": 40352,
|
|
583
467
|
"contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
|
|
584
|
-
"label": "
|
|
468
|
+
"label": "_owner",
|
|
585
469
|
"offset": 0,
|
|
586
470
|
"slot": "0",
|
|
587
471
|
"type": "t_address"
|
|
588
472
|
},
|
|
589
473
|
{
|
|
590
|
-
"astId":
|
|
474
|
+
"astId": 40500,
|
|
591
475
|
"contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
|
|
592
|
-
"label": "
|
|
476
|
+
"label": "_pendingOwner",
|
|
593
477
|
"offset": 0,
|
|
594
478
|
"slot": "1",
|
|
595
479
|
"type": "t_address"
|
|
596
480
|
},
|
|
597
481
|
{
|
|
598
|
-
"astId":
|
|
482
|
+
"astId": 46817,
|
|
599
483
|
"contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
|
|
600
484
|
"label": "minComplianceLevel",
|
|
601
485
|
"offset": 20,
|
|
@@ -603,15 +487,15 @@
|
|
|
603
487
|
"type": "t_uint8"
|
|
604
488
|
},
|
|
605
489
|
{
|
|
606
|
-
"astId":
|
|
490
|
+
"astId": 46822,
|
|
607
491
|
"contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
|
|
608
492
|
"label": "complianceResults",
|
|
609
493
|
"offset": 0,
|
|
610
494
|
"slot": "2",
|
|
611
|
-
"type": "t_mapping(t_address,t_userDefinedValueType(ebool)
|
|
495
|
+
"type": "t_mapping(t_address,t_userDefinedValueType(ebool)49555)"
|
|
612
496
|
},
|
|
613
497
|
{
|
|
614
|
-
"astId":
|
|
498
|
+
"astId": 46826,
|
|
615
499
|
"contract": "contracts/compliance/ComplianceRules.sol:ComplianceRules",
|
|
616
500
|
"label": "authorizedCallers",
|
|
617
501
|
"offset": 0,
|
|
@@ -637,19 +521,19 @@
|
|
|
637
521
|
"numberOfBytes": "32",
|
|
638
522
|
"value": "t_bool"
|
|
639
523
|
},
|
|
640
|
-
"t_mapping(t_address,t_userDefinedValueType(ebool)
|
|
524
|
+
"t_mapping(t_address,t_userDefinedValueType(ebool)49555)": {
|
|
641
525
|
"encoding": "mapping",
|
|
642
526
|
"key": "t_address",
|
|
643
527
|
"label": "mapping(address => ebool)",
|
|
644
528
|
"numberOfBytes": "32",
|
|
645
|
-
"value": "t_userDefinedValueType(ebool)
|
|
529
|
+
"value": "t_userDefinedValueType(ebool)49555"
|
|
646
530
|
},
|
|
647
531
|
"t_uint8": {
|
|
648
532
|
"encoding": "inplace",
|
|
649
533
|
"label": "uint8",
|
|
650
534
|
"numberOfBytes": "1"
|
|
651
535
|
},
|
|
652
|
-
"t_userDefinedValueType(ebool)
|
|
536
|
+
"t_userDefinedValueType(ebool)49555": {
|
|
653
537
|
"encoding": "inplace",
|
|
654
538
|
"label": "ebool",
|
|
655
539
|
"numberOfBytes": "32"
|