@tawf-labs/sharia-capital-standard 0.1.0

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +225 -0
  3. package/evm/out/AAOIFIGovernance.sol/AAOIFIGovernance.json +1 -0
  4. package/evm/out/Address.sol/Address.json +1 -0
  5. package/evm/out/Base.sol/CommonBase.json +1 -0
  6. package/evm/out/Base.sol/ScriptBase.json +1 -0
  7. package/evm/out/Base.sol/TestBase.json +1 -0
  8. package/evm/out/Context.sol/Context.json +1 -0
  9. package/evm/out/ERC20.sol/ERC20.json +1 -0
  10. package/evm/out/ERC20Mock.sol/ERC20Mock.json +1 -0
  11. package/evm/out/ERC4626.sol/ERC4626.json +1 -0
  12. package/evm/out/Errors.sol/Errors.json +1 -0
  13. package/evm/out/IAAOIFICompliant.sol/IAAOIFICompliant.json +1 -0
  14. package/evm/out/IERC1363.sol/IERC1363.json +1 -0
  15. package/evm/out/IERC165.sol/IERC165.json +1 -0
  16. package/evm/out/IERC20.sol/IERC20.json +1 -0
  17. package/evm/out/IERC20Metadata.sol/IERC20Metadata.json +1 -0
  18. package/evm/out/IERC4626.sol/IERC4626.json +1 -0
  19. package/evm/out/IMulticall3.sol/IMulticall3.json +1 -0
  20. package/evm/out/ISCS1.sol/ISCS1.json +1 -0
  21. package/evm/out/ISCS2.sol/ISCS2.json +1 -0
  22. package/evm/out/ISCS3.sol/ISCS3.json +1 -0
  23. package/evm/out/ISCS4.sol/ISCS4.json +1 -0
  24. package/evm/out/ISCS5.sol/ISCS5.json +1 -0
  25. package/evm/out/Math.sol/Math.json +1 -0
  26. package/evm/out/MudarabahFactory.sol/MudarabahFactory.json +1 -0
  27. package/evm/out/MudarabahGovernance.t.sol/MudarabahGovernanceIntegrationTest.json +1 -0
  28. package/evm/out/MudarabahInvariant.t.sol/Handler.json +1 -0
  29. package/evm/out/MudarabahInvariant.t.sol/MudarabahInvariantTest.json +1 -0
  30. package/evm/out/MudarabahPool.sol/MudarabahPool.json +1 -0
  31. package/evm/out/MudarabahPool.t.sol/MudarabahPoolTest.json +1 -0
  32. package/evm/out/MusharakahFactory.sol/MusharakahFactory.json +1 -0
  33. package/evm/out/MusharakahPool.sol/MusharakahPool.json +1 -0
  34. package/evm/out/MusharakahPool.t.sol/MusharakahPoolTest.json +1 -0
  35. package/evm/out/Ownable.sol/Ownable.json +1 -0
  36. package/evm/out/Panic.sol/Panic.json +1 -0
  37. package/evm/out/ReentrancyGuard.sol/ReentrancyGuard.json +1 -0
  38. package/evm/out/SCS5.t.sol/SCS5Test.json +1 -0
  39. package/evm/out/SCSEnforcement.sol/SCSEnforcement.json +1 -0
  40. package/evm/out/SCSEnforcement.t.sol/SCSEnforcementTest.json +1 -0
  41. package/evm/out/SafeCast.sol/SafeCast.json +1 -0
  42. package/evm/out/SafeERC20.sol/SafeERC20.json +1 -0
  43. package/evm/out/ShariaBoard.sol/ShariaBoard.json +1 -0
  44. package/evm/out/StdAssertions.sol/StdAssertions.json +1 -0
  45. package/evm/out/StdChains.sol/StdChains.json +1 -0
  46. package/evm/out/StdCheats.sol/StdCheats.json +1 -0
  47. package/evm/out/StdCheats.sol/StdCheatsSafe.json +1 -0
  48. package/evm/out/StdConstants.sol/StdConstants.json +1 -0
  49. package/evm/out/StdError.sol/stdError.json +1 -0
  50. package/evm/out/StdInvariant.sol/StdInvariant.json +1 -0
  51. package/evm/out/StdJson.sol/stdJson.json +1 -0
  52. package/evm/out/StdMath.sol/stdMath.json +1 -0
  53. package/evm/out/StdStorage.sol/stdStorage.json +1 -0
  54. package/evm/out/StdStorage.sol/stdStorageSafe.json +1 -0
  55. package/evm/out/StdStyle.sol/StdStyle.json +1 -0
  56. package/evm/out/StdToml.sol/stdToml.json +1 -0
  57. package/evm/out/StdUtils.sol/StdUtils.json +1 -0
  58. package/evm/out/Test.sol/Test.json +1 -0
  59. package/evm/out/VaultEngine.sol/VaultEngine.json +1 -0
  60. package/evm/out/VaultEngine.t.sol/VaultEngineTest.json +1 -0
  61. package/evm/out/Vm.sol/Vm.json +1 -0
  62. package/evm/out/Vm.sol/VmSafe.json +1 -0
  63. package/evm/out/build-info/2a4e30a158d233d6.json +1 -0
  64. package/evm/out/build-info/3cfabad7ae61d1a6.json +1 -0
  65. package/evm/out/build-info/3f56a5966e901978.json +1 -0
  66. package/evm/out/build-info/51fd519074d038f8.json +1 -0
  67. package/evm/out/build-info/5549fc83ea5c1d63.json +1 -0
  68. package/evm/out/build-info/5bf499a6a511a61a.json +1 -0
  69. package/evm/out/build-info/7c7c5b6c1419b2fb.json +1 -0
  70. package/evm/out/build-info/8827fecf32cac394.json +1 -0
  71. package/evm/out/build-info/a67fef21e51c6ba3.json +1 -0
  72. package/evm/out/build-info/e589fe78f07409be.json +1 -0
  73. package/evm/out/build-info/ec3d6bd6e52cad07.json +1 -0
  74. package/evm/out/build-info/efa7e90bb36ba58e.json +1 -0
  75. package/evm/out/build-info/ff0ee40a04a49548.json +1 -0
  76. package/evm/out/console.sol/console.json +1 -0
  77. package/evm/out/draft-IERC6093.sol/IERC1155Errors.json +1 -0
  78. package/evm/out/draft-IERC6093.sol/IERC20Errors.json +1 -0
  79. package/evm/out/draft-IERC6093.sol/IERC721Errors.json +1 -0
  80. package/evm/out/safeconsole.sol/safeconsole.json +1 -0
  81. package/evm/src/SCS1/MudarabahFactory.sol +61 -0
  82. package/evm/src/SCS1/MudarabahPool.sol +196 -0
  83. package/evm/src/SCS2/MusharakahFactory.sol +66 -0
  84. package/evm/src/SCS2/MusharakahPool.sol +218 -0
  85. package/evm/src/SCS3/VaultEngine.sol +238 -0
  86. package/evm/src/SCS4/SCSEnforcement.sol +113 -0
  87. package/evm/src/SCS5/AAOIFIGovernance.sol +112 -0
  88. package/evm/src/SCS5/ShariaBoard.sol +232 -0
  89. package/evm/src/interfaces/IAAOIFICompliant.sol +21 -0
  90. package/evm/src/interfaces/ISCS1.sol +69 -0
  91. package/evm/src/interfaces/ISCS2.sol +58 -0
  92. package/evm/src/interfaces/ISCS3.sol +71 -0
  93. package/evm/src/interfaces/ISCS4.sol +69 -0
  94. package/evm/src/interfaces/ISCS5.sol +85 -0
  95. package/package.json +47 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sharia Capital Standard Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,225 @@
1
+ # Sharia Capital Standard (SCS)
2
+
3
+ **Open infrastructure-grade risk-sharing capital formation primitive for EVM & SVM networks**
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![Solidity](https://img.shields.io/badge/Solidity-0.8.26-blue)](https://soliditylang.org/)
7
+ [![Foundry](https://img.shields.io/badge/Built%20with-Foundry-FFDB1C.svg)](https://getfoundry.sh/)
8
+
9
+ ## Overview
10
+
11
+ SCS provides production-ready smart contract implementations for Sharia-compliant capital formation, implementing AAOIFI standards for:
12
+
13
+ - **SCS-1**: Mudarabah (manager-investor profit-sharing)
14
+ - **SCS-2**: Musharakah (joint venture capital)
15
+ - **SCS-3**: Profit-Sharing Vault Engine (NAV calculation, epochs)
16
+ - **SCS-4**: Non-Guaranteed Return Enforcement Layer
17
+ - **SCS-5**: AAOIFI Governance & Compliance
18
+
19
+ ## AAOIFI Compliance
20
+
21
+ This project implements standards from the [Accounting and Auditing Organization for Islamic Financial Institutions](https://aaoifi.com/?lang=en):
22
+
23
+ - **[Sharia Standard #8](https://aaoifi.com/product/shari-a-standards/?lang=en)**: Mudarabah (profit-sharing partnership)
24
+ - **[Sharia Standard #12](https://aaoifi.com/product/shari-a-standards/?lang=en)**: Musharakah (joint venture)
25
+ - **[Sharia Standard #17](https://aaoifi.com/product/shari-a-standards/?lang=en)**: Investment Agencies
26
+ - **[Governance Standard #3](https://aaoifi.com/product/governance-standards-for-islamic-financial-institutions/?lang=en)**: Internal Sharia Review
27
+ - **[Financial Accounting Standards](https://aaoifi.com/product/financial-accounting-standards/?lang=en)**: FAS #4, #9, #27
28
+
29
+ ## Project Structure
30
+
31
+ ```
32
+ Sharia-Capital-Standard/
33
+ ├── evm/ # EVM implementation (Solidity)
34
+ │ ├── src/
35
+ │ │ ├── interfaces/ # Core SCS interfaces
36
+ │ │ ├── SCS1/ # Mudarabah ✅
37
+ │ │ ├── SCS2/ # Musharakah ✅
38
+ │ │ ├── SCS3/ # Vault Engine ✅
39
+ │ │ ├── SCS4/ # Enforcement Layer ✅
40
+ │ │ ├── SCS5/ # AAOIFI Governance ✅
41
+ │ │ └── libraries/ # Shared libraries
42
+ │ └── test/ # Comprehensive test suite
43
+ └── solana/ # SVM implementation (Anchor)
44
+ └── programs/
45
+ ```
46
+
47
+ ## Installation
48
+
49
+ ### For Foundry Projects (Recommended)
50
+
51
+ Install as a Foundry dependency:
52
+
53
+ ```bash
54
+ forge install tawf-labs/Sharia-Capital-Standard
55
+ ```
56
+
57
+ Add to your `remappings.txt`:
58
+ ```
59
+ @sharia-capital/=lib/Sharia-Capital-Standard/evm/src/
60
+ ```
61
+
62
+ Import in your contracts:
63
+ ```solidity
64
+ import "@sharia-capital/SCS1/MudarabahPool.sol";
65
+ import "@sharia-capital/SCS2/MusharakahPool.sol";
66
+ import "@sharia-capital/SCS3/VaultEngine.sol";
67
+ import "@sharia-capital/SCS4/SCSEnforcement.sol";
68
+ import "@sharia-capital/SCS5/AAOIFIGovernance.sol";
69
+ ```
70
+
71
+ ### For Hardhat/npm Projects
72
+
73
+ Install via npm:
74
+
75
+ ```bash
76
+ npm install sharia-capital-standard
77
+ # or
78
+ yarn add sharia-capital-standard
79
+ ```
80
+
81
+ Import in your contracts (clean style):
82
+ ```solidity
83
+ import "sharia-capital-standard/SCS1/MudarabahPool.sol";
84
+ import "sharia-capital-standard/interfaces/ISCS1.sol";
85
+ ```
86
+
87
+ Or use direct paths:
88
+ ```solidity
89
+ import "sharia-capital-standard/evm/src/SCS1/MudarabahPool.sol";
90
+ ```
91
+
92
+ Access ABIs in JavaScript/TypeScript:
93
+ ```javascript
94
+ const MudarabahPoolABI = require('sharia-capital-standard/evm/out/MudarabahPool.sol/MudarabahPool.json');
95
+ ```
96
+
97
+ ### For Development
98
+
99
+ Clone the repository to contribute or run tests:
100
+
101
+ ```bash
102
+ git clone https://github.com/tawf-labs/Sharia-Capital-Standard.git
103
+ cd Sharia-Capital-Standard
104
+
105
+ # Install dependencies
106
+ forge install
107
+
108
+ # Build contracts
109
+ forge build
110
+
111
+ # Run tests
112
+ forge test
113
+
114
+ # Run tests with gas report
115
+ forge test --gas-report
116
+ ```
117
+
118
+ ### Usage Example
119
+
120
+ ```solidity
121
+ // Create Mudarabah pool
122
+ MudarabahFactory factory = new MudarabahFactory(enforcementAddress);
123
+
124
+ address pool = factory.createPool(
125
+ usdcAddress,
126
+ managerAddress,
127
+ capitalProviderAddress,
128
+ 2000, // 20% manager share (basis points)
129
+ 8000, // 80% provider share (basis points)
130
+ "USDC Mudarabah Pool",
131
+ "MDP-USDC"
132
+ );
133
+
134
+ // Deposit capital
135
+ MudarabahPool mudarabah = MudarabahPool(pool);
136
+ usdc.approve(pool, 1000e6);
137
+ mudarabah.deposit(1000e6);
138
+
139
+ // Deploy to strategy
140
+ mudarabah.deployCapital(strategyAddress, 500e6);
141
+ ```
142
+
143
+ ## Core Concepts
144
+
145
+ ### Mudarabah (SCS-1)
146
+ Manager-investor profit-sharing model where:
147
+ - Capital provider (Rabb al-Mal) provides capital
148
+ - Manager (Mudarib) manages investments
149
+ - Profits shared by pre-agreed ratio
150
+ - Losses borne by capital provider (except misconduct)
151
+
152
+ ### Musharakah (SCS-2)
153
+ Joint venture model where:
154
+ - All partners contribute capital
155
+ - Profit ratio can differ from capital ratio
156
+ - Loss ratio MUST equal capital ratio (AAOIFI requirement)
157
+
158
+ ### Vault Engine (SCS-3)
159
+ ERC-4626 compliant vault with:
160
+ - Epoch-based accounting
161
+ - NAV calculation
162
+ - Strategy management
163
+
164
+ ### Enforcement Layer (SCS-4)
165
+ Ensures Sharia compliance by:
166
+ - Prohibiting guaranteed returns
167
+ - Preventing fixed-yield structures
168
+ - Validating profit-sharing ratios
169
+
170
+ ### AAOIFI Governance (SCS-5)
171
+ Implements AAOIFI Governance Standard #3:
172
+ - Sharia Supervisory Board (SSB) oversight
173
+ - Multi-signature approval for investments
174
+ - Prohibited asset screening
175
+ - Financial ratio validation
176
+
177
+ ## Documentation
178
+
179
+ - [SCS-1: Mudarabah Specification](docs/SCS-1-Mudarabah.md)
180
+ - [SCS-2: Musharakah Specification](docs/SCS-2-Musharakah.md)
181
+ - [SCS-3: Vault Engine Specification](docs/SCS-3-Vault.md)
182
+ - [SCS-4: Enforcement Layer](docs/SCS-4-Enforcement.md)
183
+ - [SCS-5: AAOIFI Governance](docs/SCS-5-Governance.md)
184
+ - [AAOIFI Compliance Guide](docs/AAOIFI-Compliance.md)
185
+ - [Integration Guide](docs/integration.md)
186
+
187
+ ## Security
188
+
189
+ - Comprehensive test coverage (100%)
190
+ - Fuzz testing (256+ iterations)
191
+ - Invariant testing
192
+ - ReentrancyGuard protection
193
+ - Role-based access control
194
+ - External audit recommended before production use
195
+
196
+ See [SECURITY.md](SECURITY.md) for reporting vulnerabilities.
197
+
198
+ ## Contributing
199
+
200
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
201
+
202
+ ## License
203
+
204
+ MIT License - see [LICENSE](LICENSE) for details.
205
+
206
+ ## Disclaimer
207
+
208
+ This is reference implementation software. Users must:
209
+ 1. Conduct independent Sharia compliance review
210
+ 2. Obtain qualified Sharia Supervisory Board approval
211
+ 3. Complete security audits before production deployment
212
+ 4. Ensure compliance with local regulations
213
+
214
+ ## References
215
+
216
+ - [AAOIFI Official Website](https://aaoifi.com/?lang=en)
217
+ - [AAOIFI Sharia Standards](https://aaoifi.com/product/shari-a-standards/?lang=en)
218
+ - [AAOIFI Governance Standards](https://aaoifi.com/product/governance-standards-for-islamic-financial-institutions/?lang=en)
219
+ - [AAOIFI Financial Accounting Standards](https://aaoifi.com/product/financial-accounting-standards/?lang=en)
220
+ - [ERC-4626 Tokenized Vault Standard](https://eips.ethereum.org/EIPS/eip-4626)
221
+ - [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/)
222
+
223
+ ## Contact
224
+
225
+ For questions or collaboration: [Create an issue](https://github.com/yourusername/Sharia-Capital-Standard/issues)
@@ -0,0 +1 @@
1
+ {"abi":[{"type":"constructor","inputs":[{"name":"_shariaBoard","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"assetScreening","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"screened","type":"bool","internalType":"bool"},{"name":"compliant","type":"bool","internalType":"bool"},{"name":"screenedAt","type":"uint256","internalType":"uint256"},{"name":"reason","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getAssetScreening","inputs":[{"name":"asset","type":"address","internalType":"address"}],"outputs":[{"name":"screened","type":"bool","internalType":"bool"},{"name":"compliant","type":"bool","internalType":"bool"},{"name":"screenedAt","type":"uint256","internalType":"uint256"},{"name":"reason","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"maxDebtRatio","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxInterestRatio","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"permitAsset","inputs":[{"name":"asset","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prohibitAsset","inputs":[{"name":"asset","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prohibitedAssets","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"screenAsset","inputs":[{"name":"asset","type":"address","internalType":"address"},{"name":"compliant","type":"bool","internalType":"bool"},{"name":"reason","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxDebtRatio","inputs":[{"name":"ratio","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxInterestRatio","inputs":[{"name":"ratio","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setShariaBoard","inputs":[{"name":"_shariaBoard","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"shariaBoard","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ISCS5"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validateAsset","inputs":[{"name":"asset","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validateFinancialRatios","inputs":[{"name":"totalAssets","type":"uint256","internalType":"uint256"},{"name":"totalDebt","type":"uint256","internalType":"uint256"},{"name":"interestIncome","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"AssetPermitted","inputs":[{"name":"asset","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"AssetProhibited","inputs":[{"name":"asset","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"AssetScreened","inputs":[{"name":"asset","type":"address","indexed":true,"internalType":"address"},{"name":"compliant","type":"bool","indexed":false,"internalType":"bool"},{"name":"reason","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RatioUpdated","inputs":[{"name":"ratioType","type":"string","indexed":false,"internalType":"string"},{"name":"newValue","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AssetIsProhibited","inputs":[]},{"type":"error","name":"AssetNotScreened","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"RatioExceeded","inputs":[]}],"bytecode":{"object":"0x6080604052610ce4600455610bb860055534801561001b575f80fd5b50604051610e05380380610e0583398101604081905261003a916100dd565b338061005f57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100688161008e565b50600180546001600160a01b0319166001600160a01b039290921691909117905561010a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100ed575f80fd5b81516001600160a01b0381168114610103575f80fd5b9392505050565b610cee806101175f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c80638da5cb5b1161009e578063dfc8eb4d1161006e578063dfc8eb4d14610214578063e25756bd14610227578063f2fde38b1461024a578063fc4a5e0a1461025d578063fece5c3514610270575f80fd5b80638da5cb5b146101b75780639240d299146101db578063a2317b27146101ee578063bc6384d014610201575f80fd5b806371add9b8116100d957806371add9b8146101715780637559aec31461018857806379f74e9e1461019b5780638112555d146101a4575f80fd5b8063069d45111461010a5780630f413c03146101415780634edcf3e414610156578063715018a614610169575b5f80fd5b61012c610118366004610969565b60026020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61015461014f366004610996565b610283565b005b610154610164366004610969565b610358565b6101546103a8565b61017a60055481565b604051908152602001610138565b610154610196366004610a6f565b6103bb565b61017a60045481565b6101546101b2366004610969565b61041b565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610138565b61012c6101e9366004610969565b610445565b6001546101c3906001600160a01b031681565b61015461020f366004610a6f565b610589565b61012c610222366004610a86565b6105e8565b61023a610235366004610969565b610680565b6040516101389493929190610add565b610154610258366004610969565b610734565b61015461026b366004610969565b610776565b61023a61027e366004610969565b6107c9565b61028b6108d3565b604080516080810182526001808252841515602080840191825242848601908152606085018781526001600160a01b038a165f90815260039093529590912084518154935161ffff1990941690151561ff001916176101009315159390930292909217825551918101919091559151909190600282019061030c9082610b93565b50905050826001600160a01b03167f409945ab345605735462334cc4735e8f590507e97479e21c7fff9458f8890f6e838360405161034b929190610c4e565b60405180910390a2505050565b6103606108d3565b6001600160a01b0381165f81815260026020526040808220805460ff19169055517fbfd78d1acd7fdf715658096e9116ace58b0b335d6d8d4fc53e0aec7edbd7d4419190a250565b6103b06108d3565b6103b95f6108ff565b565b6103c36108d3565b60048181556040805181815290810191909152631919589d60e21b6060820152602081018290527f0eed1599006b37c9967819b987baeea7fc062d214cc62b888ec0532a95d0e067906080015b60405180910390a150565b6104236108d3565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381165f9081526002602052604081205460ff161561047e57604051630767b96960e41b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208151608081018352815460ff80821615158352610100909104161515938101939093526001810154918301919091526002810180546060840191906104dc90610b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461050890610b0f565b80156105535780601f1061052a57610100808354040283529160200191610553565b820191905f5260205f20905b81548152906001019060200180831161053657829003601f168201915b5050505050815250509050805f015161057f57604051637cdfe3cf60e11b815260040160405180910390fd5b6020015192915050565b6105916108d3565b600581905560408051818152600891810191909152671a5b9d195c995cdd60c21b6060820152602081018290527f0eed1599006b37c9967819b987baeea7fc062d214cc62b888ec0532a95d0e06790608001610410565b5f835f036105f857506001610679565b5f8461060685612710610c70565b6106109190610c99565b9050600454811115610635576040516310f0e3e360e31b815260040160405180910390fd5b5f8561064385612710610c70565b61064d9190610c99565b9050600554811115610672576040516310f0e3e360e31b815260040160405180910390fd5b6001925050505b9392505050565b60036020525f908152604090208054600182015460028301805460ff80851695610100909504169391906106b390610b0f565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90610b0f565b801561072a5780601f106107015761010080835404028352916020019161072a565b820191905f5260205f20905b81548152906001019060200180831161070d57829003601f168201915b5050505050905084565b61073c6108d3565b6001600160a01b03811661076a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610773816108ff565b50565b61077e6108d3565b6001600160a01b0381165f81815260026020526040808220805460ff19166001179055517ff6a8a87dfb3ed5a7865e9608d9d07931ea9483e8040a59f2e32391ec3c6adcb39190a250565b6001600160a01b0381165f9081526003602090815260408083208151608081018352815460ff8082161515835261010090910416151593810193909352600181015491830191909152600281018054849384936060938593838601919061082f90610b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90610b0f565b80156108a65780601f1061087d576101008083540402835291602001916108a6565b820191905f5260205f20905b81548152906001019060200180831161088957829003601f168201915b505050919092525050815160208301516040840151606090940151919a9099509297509550909350505050565b5f546001600160a01b031633146103b95760405163118cdaa760e01b8152336004820152602401610761565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610964575f80fd5b919050565b5f60208284031215610979575f80fd5b6106798261094e565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156109a8575f80fd5b6109b18461094e565b9250602084013580151581146109c5575f80fd5b9150604084013567ffffffffffffffff8111156109e0575f80fd5b8401601f810186136109f0575f80fd5b803567ffffffffffffffff811115610a0a57610a0a610982565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610a3957610a39610982565b604052818152828201602001881015610a50575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f60208284031215610a7f575f80fd5b5035919050565b5f805f60608486031215610a98575f80fd5b505081359360208301359350604090920135919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b84151581528315156020820152826040820152608060608201525f610b056080830184610aaf565b9695505050505050565b600181811c90821680610b2357607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b8e57805f5260205f20601f840160051c81016020851015610b6c5750805b601f840160051c820191505b81811015610b8b575f8155600101610b78565b50505b505050565b815167ffffffffffffffff811115610bad57610bad610982565b610bc181610bbb8454610b0f565b84610b47565b6020601f821160018114610bf3575f8315610bdc5750848201515b5f19600385901b1c1916600184901b178455610b8b565b5f84815260208120601f198516915b82811015610c225787850151825560209485019460019092019101610c02565b5084821015610c3f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8215158152604060208201525f610c686040830184610aaf565b949350505050565b8082028115828204841417610c9357634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82610cb357634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a5389931b03e964633f14a2a7d123010a9c5dfc5b6bcc972d961174e55247b4664736f6c634300081a0033","sourceMap":"322:3204:21:-:0;;;551:4;521:34;;611:4;577:38;;1114:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1156:10;;1269:95:19;;1322:31;;-1:-1:-1;;;1322:31:19;;1350:1;1322:31;;;455:51:25;428:18;;1322:31:19;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;1178:11:21::1;:33:::0;;-1:-1:-1;;;;;;1178:33:21::1;-1:-1:-1::0;;;;;1178:33:21;;;::::1;::::0;;;::::1;::::0;;322:3204;;2912:187:19;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:19;;;-1:-1:-1;;;;;;3020:17:19;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:290:25:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:25;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:25:o;309:203::-;322:3204:21;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c80638da5cb5b1161009e578063dfc8eb4d1161006e578063dfc8eb4d14610214578063e25756bd14610227578063f2fde38b1461024a578063fc4a5e0a1461025d578063fece5c3514610270575f80fd5b80638da5cb5b146101b75780639240d299146101db578063a2317b27146101ee578063bc6384d014610201575f80fd5b806371add9b8116100d957806371add9b8146101715780637559aec31461018857806379f74e9e1461019b5780638112555d146101a4575f80fd5b8063069d45111461010a5780630f413c03146101415780634edcf3e414610156578063715018a614610169575b5f80fd5b61012c610118366004610969565b60026020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61015461014f366004610996565b610283565b005b610154610164366004610969565b610358565b6101546103a8565b61017a60055481565b604051908152602001610138565b610154610196366004610a6f565b6103bb565b61017a60045481565b6101546101b2366004610969565b61041b565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610138565b61012c6101e9366004610969565b610445565b6001546101c3906001600160a01b031681565b61015461020f366004610a6f565b610589565b61012c610222366004610a86565b6105e8565b61023a610235366004610969565b610680565b6040516101389493929190610add565b610154610258366004610969565b610734565b61015461026b366004610969565b610776565b61023a61027e366004610969565b6107c9565b61028b6108d3565b604080516080810182526001808252841515602080840191825242848601908152606085018781526001600160a01b038a165f90815260039093529590912084518154935161ffff1990941690151561ff001916176101009315159390930292909217825551918101919091559151909190600282019061030c9082610b93565b50905050826001600160a01b03167f409945ab345605735462334cc4735e8f590507e97479e21c7fff9458f8890f6e838360405161034b929190610c4e565b60405180910390a2505050565b6103606108d3565b6001600160a01b0381165f81815260026020526040808220805460ff19169055517fbfd78d1acd7fdf715658096e9116ace58b0b335d6d8d4fc53e0aec7edbd7d4419190a250565b6103b06108d3565b6103b95f6108ff565b565b6103c36108d3565b60048181556040805181815290810191909152631919589d60e21b6060820152602081018290527f0eed1599006b37c9967819b987baeea7fc062d214cc62b888ec0532a95d0e067906080015b60405180910390a150565b6104236108d3565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381165f9081526002602052604081205460ff161561047e57604051630767b96960e41b815260040160405180910390fd5b6001600160a01b0382165f9081526003602090815260408083208151608081018352815460ff80821615158352610100909104161515938101939093526001810154918301919091526002810180546060840191906104dc90610b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461050890610b0f565b80156105535780601f1061052a57610100808354040283529160200191610553565b820191905f5260205f20905b81548152906001019060200180831161053657829003601f168201915b5050505050815250509050805f015161057f57604051637cdfe3cf60e11b815260040160405180910390fd5b6020015192915050565b6105916108d3565b600581905560408051818152600891810191909152671a5b9d195c995cdd60c21b6060820152602081018290527f0eed1599006b37c9967819b987baeea7fc062d214cc62b888ec0532a95d0e06790608001610410565b5f835f036105f857506001610679565b5f8461060685612710610c70565b6106109190610c99565b9050600454811115610635576040516310f0e3e360e31b815260040160405180910390fd5b5f8561064385612710610c70565b61064d9190610c99565b9050600554811115610672576040516310f0e3e360e31b815260040160405180910390fd5b6001925050505b9392505050565b60036020525f908152604090208054600182015460028301805460ff80851695610100909504169391906106b390610b0f565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90610b0f565b801561072a5780601f106107015761010080835404028352916020019161072a565b820191905f5260205f20905b81548152906001019060200180831161070d57829003601f168201915b5050505050905084565b61073c6108d3565b6001600160a01b03811661076a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610773816108ff565b50565b61077e6108d3565b6001600160a01b0381165f81815260026020526040808220805460ff19166001179055517ff6a8a87dfb3ed5a7865e9608d9d07931ea9483e8040a59f2e32391ec3c6adcb39190a250565b6001600160a01b0381165f9081526003602090815260408083208151608081018352815460ff8082161515835261010090910416151593810193909352600181015491830191909152600281018054849384936060938593838601919061082f90610b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90610b0f565b80156108a65780601f1061087d576101008083540402835291602001916108a6565b820191905f5260205f20905b81548152906001019060200180831161088957829003601f168201915b505050919092525050815160208301516040840151606090940151919a9099509297509550909350505050565b5f546001600160a01b031633146103b95760405163118cdaa760e01b8152336004820152602401610761565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610964575f80fd5b919050565b5f60208284031215610979575f80fd5b6106798261094e565b634e487b7160e01b5f52604160045260245ffd5b5f805f606084860312156109a8575f80fd5b6109b18461094e565b9250602084013580151581146109c5575f80fd5b9150604084013567ffffffffffffffff8111156109e0575f80fd5b8401601f810186136109f0575f80fd5b803567ffffffffffffffff811115610a0a57610a0a610982565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610a3957610a39610982565b604052818152828201602001881015610a50575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f60208284031215610a7f575f80fd5b5035919050565b5f805f60608486031215610a98575f80fd5b505081359360208301359350604090920135919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b84151581528315156020820152826040820152608060608201525f610b056080830184610aaf565b9695505050505050565b600181811c90821680610b2357607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b8e57805f5260205f20601f840160051c81016020851015610b6c5750805b601f840160051c820191505b81811015610b8b575f8155600101610b78565b50505b505050565b815167ffffffffffffffff811115610bad57610bad610982565b610bc181610bbb8454610b0f565b84610b47565b6020601f821160018114610bf3575f8315610bdc5750848201515b5f19600385901b1c1916600184901b178455610b8b565b5f84815260208120601f198516915b82811015610c225787850151825560209485019460019092019101610c02565b5084821015610c3f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8215158152604060208201525f610c686040830184610aaf565b949350505050565b8082028115828204841417610c9357634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82610cb357634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a5389931b03e964633f14a2a7d123010a9c5dfc5b6bcc972d961174e55247b4664736f6c634300081a0033","sourceMap":"322:3204:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;400:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;548:14:25;;541:22;523:41;;511:2;496:18;400:48:21;;;;;;;;1516:384;;;;;;:::i;:::-;;:::i;:::-;;1371:139;;;;;;:::i;:::-;;:::i;2293:101:19:-;;;:::i;577:38:21:-;;;;;;;;;2038:25:25;;;2026:2;2011:18;577:38:21;1892:177:25;2757:138:21;;;;;;:::i;:::-;;:::i;521:34::-;;;;;;3057:115;;;;;;:::i;:::-;;:::i;1638:85:19:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:19;1638:85;;;-1:-1:-1;;;;;2469:32:25;;;2451:51;;2439:2;2424:18;1638:85:19;2305:203:25;1906:318:21;;;;;;:::i;:::-;;:::i;365:24::-;;;;;-1:-1:-1;;;;;365:24:21;;;2901:150;;;;;;:::i;:::-;;:::i;2230:521::-;;;;;;:::i;:::-;;:::i;454:56::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;2543:215:19:-;;;;;;:::i;:::-;;:::i;1224:141:21:-;;;;;;:::i;:::-;;:::i;3178:346::-;;;;;;:::i;:::-;;:::i;1516:384::-;1531:13:19;:11;:13::i;:::-;1673:157:21::1;::::0;;::::1;::::0;::::1;::::0;;1712:4:::1;1673:157:::0;;;;::::1;;;::::0;;::::1;::::0;;;1776:15:::1;1673:157:::0;;;;;;;;;;;;-1:-1:-1;;;;;1649:21:21;::::1;-1:-1:-1::0;1649:21:21;;;:14:::1;:21:::0;;;;;;;:181;;;;;;-1:-1:-1;;1649:181:21;;;;::::1;;-1:-1:-1::0;;1649:181:21;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;;;1673:157;;1649:21;:181:::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;1868:5;-1:-1:-1::0;;;;;1854:39:21::1;;1875:9;1886:6;1854:39;;;;;;;:::i;:::-;;;;;;;;1516:384:::0;;;:::o;1371:139::-;1531:13:19;:11;:13::i;:::-;-1:-1:-1;;;;;1436:23:21;::::1;1462:5;1436:23:::0;;;:16:::1;:23;::::0;;;;;:31;;-1:-1:-1;;1436:31:21::1;::::0;;1482:21;::::1;::::0;1462:5;1482:21:::1;1371:139:::0;:::o;2293:101:19:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2757:138:21:-;1531:13:19;:11;:13::i;:::-;2826:12:21::1;:20:::0;;;2861:27:::1;::::0;;6988:21:25;;;7025:18;;;7018:29;;;;-1:-1:-1;;;7078:2:25;7063:18;;7056:34;7157:4;7142:20;;7135:36;;;2861:27:21::1;::::0;7122:3:25;7107:19;2861:27:21::1;;;;;;;;2757:138:::0;:::o;3057:115::-;1531:13:19;:11;:13::i;:::-;3132:11:21::1;:33:::0;;-1:-1:-1;;;;;;3132:33:21::1;-1:-1:-1::0;;;;;3132:33:21;;;::::1;::::0;;;::::1;::::0;;3057:115::o;1906:318::-;-1:-1:-1;;;;;1987:23:21;;1967:4;1987:23;;;:16;:23;;;;;;;;1983:55;;;2019:19;;-1:-1:-1;;;2019:19:21;;;;;;;;;;;1983:55;-1:-1:-1;;;;;2091:21:21;;2057:31;2091:21;;;:14;:21;;;;;;;;2057:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:9;:18;;;2122:50;;2154:18;;-1:-1:-1;;;2154:18:21;;;;;;;;;;;2122:50;2198:19;;;;1906:318;-1:-1:-1;;1906:318:21:o;2901:150::-;1531:13:19;:11;:13::i;:::-;2974:16:21::1;:24:::0;;;3013:31:::1;::::0;;7394:21:25;;;7451:1;7431:18;;;7424:29;;;;-1:-1:-1;;;7484:2:25;7469:18;;7462:38;7567:4;7552:20;;7545:36;;;3013:31:21::1;::::0;7532:3:25;7517:19;3013:31:21::1;7182:405:25::0;2230:521:21;2380:4;2400:11;2415:1;2400:16;2396:33;;-1:-1:-1;2425:4:21;2418:11;;2396:33;2448:17;2490:11;2469:17;:9;2481:5;2469:17;:::i;:::-;2468:33;;;;:::i;:::-;2448:53;;2527:12;;2515:9;:24;2511:52;;;2548:15;;-1:-1:-1;;;2548:15:21;;;;;;;;;;;2511:52;2582:21;2633:11;2607:22;:14;2624:5;2607:22;:::i;:::-;2606:38;;;;:::i;:::-;2582:62;;2674:16;;2658:13;:32;2654:60;;;2699:15;;-1:-1:-1;;;2699:15:21;;;;;;;;;;;2654:60;2740:4;2733:11;;;;2230:521;;;;;;:::o;454:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2543:215:19:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:19;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:19;;2700:1:::1;2672:31;::::0;::::1;2451:51:25::0;2424:18;;2672:31:19::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1224:141:21:-;1531:13:19;:11;:13::i;:::-;-1:-1:-1;;;;;1291:23:21;::::1;;::::0;;;:16:::1;:23;::::0;;;;;:30;;-1:-1:-1;;1291:30:21::1;1317:4;1291:30;::::0;;1336:22;::::1;::::0;1291:23;1336:22:::1;1224:141:::0;:::o;3178:346::-;-1:-1:-1;;;;;3398:21:21;;3252:13;3398:21;;;:14;:21;;;;;;;;3364:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3252:13;;;;3327:20;;3252:13;;3364:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3364:55:21;;;;-1:-1:-1;;3437:18:21;;3457:19;;;;3478:20;;;;3500:16;;;;;3437:18;;3457:19;;-1:-1:-1;3478:20:21;;-1:-1:-1;3500:16:21;-1:-1:-1;3178:346:21;;-1:-1:-1;;;;3178:346:21:o;1796:162:19:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:19;735:10:20;1855:23:19;1851:101;;1901:40;;-1:-1:-1;;;1901:40:19;;735:10:20;1901:40:19;;;2451:51:25;2424:18;;1901:40:19;2305:203:25;2912:187:19;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:19;;;-1:-1:-1;;;;;;3020:17:19;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:173:25:-;82:20;;-1:-1:-1;;;;;131:31:25;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:127::-;636:10;631:3;627:20;624:1;617:31;667:4;664:1;657:15;691:4;688:1;681:15;707:1180;791:6;799;807;860:2;848:9;839:7;835:23;831:32;828:52;;;876:1;873;866:12;828:52;899:29;918:9;899:29;:::i;:::-;889:39;;978:2;967:9;963:18;950:32;1025:5;1018:13;1011:21;1004:5;1001:32;991:60;;1047:1;1044;1037:12;991:60;1070:5;-1:-1:-1;1126:2:25;1111:18;;1098:32;1153:18;1142:30;;1139:50;;;1185:1;1182;1175:12;1139:50;1208:22;;1261:4;1253:13;;1249:27;-1:-1:-1;1239:55:25;;1290:1;1287;1280:12;1239:55;1330:2;1317:16;1356:18;1348:6;1345:30;1342:56;;;1378:18;;:::i;:::-;1427:2;1421:9;1519:2;1481:17;;-1:-1:-1;;1477:31:25;;;1510:2;1473:40;1469:54;1457:67;;1554:18;1539:34;;1575:22;;;1536:62;1533:88;;;1601:18;;:::i;:::-;1637:2;1630:22;1661;;;1702:15;;;1719:2;1698:24;1695:37;-1:-1:-1;1692:57:25;;;1745:1;1742;1735:12;1692:57;1801:6;1796:2;1792;1788:11;1783:2;1775:6;1771:15;1758:50;1854:1;1849:2;1840:6;1832;1828:19;1824:28;1817:39;1875:6;1865:16;;;;;707:1180;;;;;:::o;2074:226::-;2133:6;2186:2;2174:9;2165:7;2161:23;2157:32;2154:52;;;2202:1;2199;2192:12;2154:52;-1:-1:-1;2247:23:25;;2074:226;-1:-1:-1;2074:226:25:o;2736:466::-;2813:6;2821;2829;2882:2;2870:9;2861:7;2857:23;2853:32;2850:52;;;2898:1;2895;2888:12;2850:52;-1:-1:-1;;2943:23:25;;;3063:2;3048:18;;3035:32;;-1:-1:-1;3166:2:25;3151:18;;;3138:32;;2736:466;-1:-1:-1;2736:466:25:o;3207:289::-;3249:3;3287:5;3281:12;3314:6;3309:3;3302:19;3370:6;3363:4;3356:5;3352:16;3345:4;3340:3;3336:14;3330:47;3422:1;3415:4;3406:6;3401:3;3397:16;3393:27;3386:38;3485:4;3478:2;3474:7;3469:2;3461:6;3457:15;3453:29;3448:3;3444:39;3440:50;3433:57;;;3207:289;;;;:::o;3501:455::-;3736:6;3729:14;3722:22;3711:9;3704:41;3795:6;3788:14;3781:22;3776:2;3765:9;3761:18;3754:50;3840:6;3835:2;3824:9;3820:18;3813:34;3883:3;3878:2;3867:9;3863:18;3856:31;3685:4;3904:46;3945:3;3934:9;3930:19;3922:6;3904:46;:::i;:::-;3896:54;3501:455;-1:-1:-1;;;;;;3501:455:25:o;3961:380::-;4040:1;4036:12;;;;4083;;;4104:61;;4158:4;4150:6;4146:17;4136:27;;4104:61;4211:2;4203:6;4200:14;4180:18;4177:38;4174:161;;4257:10;4252:3;4248:20;4245:1;4238:31;4292:4;4289:1;4282:15;4320:4;4317:1;4310:15;4174:161;;3961:380;;;:::o;4472:518::-;4574:2;4569:3;4566:11;4563:421;;;4610:5;4607:1;4600:16;4654:4;4651:1;4641:18;4724:2;4712:10;4708:19;4705:1;4701:27;4695:4;4691:38;4760:4;4748:10;4745:20;4742:47;;;-1:-1:-1;4783:4:25;4742:47;4838:2;4833:3;4829:12;4826:1;4822:20;4816:4;4812:31;4802:41;;4893:81;4911:2;4904:5;4901:13;4893:81;;;4970:1;4956:16;;4937:1;4926:13;4893:81;;;4897:3;;4563:421;4472:518;;;:::o;5166:1299::-;5292:3;5286:10;5319:18;5311:6;5308:30;5305:56;;;5341:18;;:::i;:::-;5370:97;5460:6;5420:38;5452:4;5446:11;5420:38;:::i;:::-;5414:4;5370:97;:::i;:::-;5516:4;5547:2;5536:14;;5564:1;5559:649;;;;6252:1;6269:6;6266:89;;;-1:-1:-1;6321:19:25;;;6315:26;6266:89;-1:-1:-1;;5123:1:25;5119:11;;;5115:24;5111:29;5101:40;5147:1;5143:11;;;5098:57;6368:81;;5529:930;;5559:649;4419:1;4412:14;;;4456:4;4443:18;;-1:-1:-1;;5595:20:25;;;5713:222;5727:7;5724:1;5721:14;5713:222;;;5809:19;;;5803:26;5788:42;;5916:4;5901:20;;;;5869:1;5857:14;;;;5743:12;5713:222;;;5717:3;5963:6;5954:7;5951:19;5948:201;;;6024:19;;;6018:26;-1:-1:-1;;6107:1:25;6103:14;;;6119:3;6099:24;6095:37;6091:42;6076:58;6061:74;;5948:201;-1:-1:-1;;;;6195:1:25;6179:14;;;6175:22;6162:36;;-1:-1:-1;5166:1299:25:o;6470:301::-;6655:6;6648:14;6641:22;6630:9;6623:41;6700:2;6695;6684:9;6680:18;6673:30;6604:4;6720:45;6761:2;6750:9;6746:18;6738:6;6720:45;:::i;:::-;6712:53;6470:301;-1:-1:-1;;;;6470:301:25:o;7592:265::-;7665:9;;;7696;;7713:15;;;7707:22;;7693:37;7683:168;;7773:10;7768:3;7764:20;7761:1;7754:31;7808:4;7805:1;7798:15;7836:4;7833:1;7826:15;7683:168;7592:265;;;;:::o;7862:217::-;7902:1;7928;7918:132;;7972:10;7967:3;7963:20;7960:1;7953:31;8007:4;8004:1;7997:15;8035:4;8032:1;8025:15;7918:132;-1:-1:-1;8064:9:25;;7862:217::o","linkReferences":{}},"methodIdentifiers":{"assetScreening(address)":"e25756bd","getAssetScreening(address)":"fece5c35","maxDebtRatio()":"79f74e9e","maxInterestRatio()":"71add9b8","owner()":"8da5cb5b","permitAsset(address)":"4edcf3e4","prohibitAsset(address)":"fc4a5e0a","prohibitedAssets(address)":"069d4511","renounceOwnership()":"715018a6","screenAsset(address,bool,string)":"0f413c03","setMaxDebtRatio(uint256)":"7559aec3","setMaxInterestRatio(uint256)":"bc6384d0","setShariaBoard(address)":"8112555d","shariaBoard()":"a2317b27","transferOwnership(address)":"f2fde38b","validateAsset(address)":"9240d299","validateFinancialRatios(uint256,uint256,uint256)":"dfc8eb4d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_shariaBoard\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AssetIsProhibited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetNotScreened\",\"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\":\"RatioExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"AssetPermitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"AssetProhibited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"compliant\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"AssetScreened\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ratioType\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"RatioUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetScreening\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"screened\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"compliant\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"screenedAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"getAssetScreening\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"screened\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"compliant\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"screenedAt\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxDebtRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxInterestRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"permitAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"prohibitAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"prohibitedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"compliant\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"screenAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setMaxDebtRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setMaxInterestRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_shariaBoard\",\"type\":\"address\"}],\"name\":\"setShariaBoard\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shariaBoard\",\"outputs\":[{\"internalType\":\"contract ISCS5\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"validateAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalAssets\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalDebt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"interestIncome\",\"type\":\"uint256\"}],\"name\":\"validateFinancialRatios\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Integrates with ShariaBoard for compliance oversight\",\"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\":{\"owner()\":{\"details\":\"Returns the address of the current 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\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"AAOIFIGovernance\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"AAOIFI Governance Standard #3 compliance layer\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/src/SCS5/AAOIFIGovernance.sol\":\"AAOIFIGovernance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"evm/src/SCS5/AAOIFIGovernance.sol\":{\"keccak256\":\"0xc024d00ebace4f654f9a3019e8a00d27e8c189909141679e01674fc958108337\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24aa0c4d684398a56e11ea167e15c9574b8c105660ebb07bc295106aa069edc1\",\"dweb:/ipfs/QmZEr9gFsuMbmscn2cE7uwYdBJEk1nYXqssmjmzJ3geUjp\"]},\"evm/src/interfaces/ISCS5.sol\":{\"keccak256\":\"0x50749f04680b5128eda39d8eba81b5dd541915e32d93a369d0da780534e0595d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3f2b78654a9554d2948c549efa0ee25591b6bab597cf17ff51eddca23897aac8\",\"dweb:/ipfs/QmeSQ8bBXwgHoLqaFoSqeMMoHUgTP1BKgGXWNSLx4Dm21g\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_shariaBoard","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AssetIsProhibited"},{"inputs":[],"type":"error","name":"AssetNotScreened"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"type":"error","name":"OwnableInvalidOwner"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"type":"error","name":"OwnableUnauthorizedAccount"},{"inputs":[],"type":"error","name":"RatioExceeded"},{"inputs":[{"internalType":"address","name":"asset","type":"address","indexed":true}],"type":"event","name":"AssetPermitted","anonymous":false},{"inputs":[{"internalType":"address","name":"asset","type":"address","indexed":true}],"type":"event","name":"AssetProhibited","anonymous":false},{"inputs":[{"internalType":"address","name":"asset","type":"address","indexed":true},{"internalType":"bool","name":"compliant","type":"bool","indexed":false},{"internalType":"string","name":"reason","type":"string","indexed":false}],"type":"event","name":"AssetScreened","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"string","name":"ratioType","type":"string","indexed":false},{"internalType":"uint256","name":"newValue","type":"uint256","indexed":false}],"type":"event","name":"RatioUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"assetScreening","outputs":[{"internalType":"bool","name":"screened","type":"bool"},{"internalType":"bool","name":"compliant","type":"bool"},{"internalType":"uint256","name":"screenedAt","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}]},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function","name":"getAssetScreening","outputs":[{"internalType":"bool","name":"screened","type":"bool"},{"internalType":"bool","name":"compliant","type":"bool"},{"internalType":"uint256","name":"screenedAt","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxDebtRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"maxInterestRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"permitAsset"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"prohibitAsset"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"prohibitedAssets","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"bool","name":"compliant","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"screenAsset"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMaxDebtRatio"},{"inputs":[{"internalType":"uint256","name":"ratio","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMaxInterestRatio"},{"inputs":[{"internalType":"address","name":"_shariaBoard","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setShariaBoard"},{"inputs":[],"stateMutability":"view","type":"function","name":"shariaBoard","outputs":[{"internalType":"contract ISCS5","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function","name":"validateAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"totalAssets","type":"uint256"},{"internalType":"uint256","name":"totalDebt","type":"uint256"},{"internalType":"uint256","name":"interestIncome","type":"uint256"}],"stateMutability":"view","type":"function","name":"validateFinancialRatios","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"owner()":{"details":"Returns the address of the current 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":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/src/SCS5/AAOIFIGovernance.sol":"AAOIFIGovernance"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"evm/src/SCS5/AAOIFIGovernance.sol":{"keccak256":"0xc024d00ebace4f654f9a3019e8a00d27e8c189909141679e01674fc958108337","urls":["bzz-raw://24aa0c4d684398a56e11ea167e15c9574b8c105660ebb07bc295106aa069edc1","dweb:/ipfs/QmZEr9gFsuMbmscn2cE7uwYdBJEk1nYXqssmjmzJ3geUjp"],"license":"MIT"},"evm/src/interfaces/ISCS5.sol":{"keccak256":"0x50749f04680b5128eda39d8eba81b5dd541915e32d93a369d0da780534e0595d","urls":["bzz-raw://3f2b78654a9554d2948c549efa0ee25591b6bab597cf17ff51eddca23897aac8","dweb:/ipfs/QmeSQ8bBXwgHoLqaFoSqeMMoHUgTP1BKgGXWNSLx4Dm21g"],"license":"MIT"}},"version":1},"id":21}
@@ -0,0 +1 @@
1
+ {"abi":[{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212208a2a63c6db5005250d2c19f95d32c6aa928b1e6e17a35c4ad2e952b1ff0d662464736f6c634300081a0033","sourceMap":"233:5799:29:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;233:5799:29;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x730000000000000000000000000000000000000000301460806040525f80fdfea26469706673582212208a2a63c6db5005250d2c19f95d32c6aa928b1e6e17a35c4ad2e952b1ff0d662464736f6c634300081a0033","sourceMap":"233:5799:29:-:0;;;;;;;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/openzeppelin-contracts/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"evm/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/openzeppelin-contracts/contracts/utils/Address.sol":"Address"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5","urls":["bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23","dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/utils/Errors.sol":{"keccak256":"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123","urls":["bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf","dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB"],"license":"MIT"}},"version":1},"id":29}
@@ -0,0 +1 @@
1
+ {"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"CONSOLE\":{\"details\":\"console.sol and console2.sol work by executing a staticcall to this address. Calculated as `address(uint160(uint88(bytes11(\\\"console.log\\\"))))`.\"},\"CREATE2_FACTORY\":{\"details\":\"Used when deploying with create2. Taken from https://github.com/Arachnid/deterministic-deployment-proxy.\"},\"DEFAULT_SENDER\":{\"details\":\"The default address for tx.origin and msg.sender. Calculated as `address(uint160(uint256(keccak256(\\\"foundry default caller\\\"))))`.\"},\"DEFAULT_TEST_CONTRACT\":{\"details\":\"The address of the first contract `CREATE`d by a running test contract. When running tests, each test contract is `CREATE`d by `DEFAULT_SENDER` with nonce 1. Calculated as `VM.computeCreateAddress(VM.computeCreateAddress(DEFAULT_SENDER, 1), 1)`.\"},\"MULTICALL3_ADDRESS\":{\"details\":\"Deterministic deployment address of the Multicall3 contract. Taken from https://www.multicall3.com.\"},\"SECP256K1_ORDER\":{\"details\":\"The order of the secp256k1 curve.\"},\"VM_ADDRESS\":{\"details\":\"Cheat code address. Calculated as `address(uint160(uint256(keccak256(\\\"hevm cheat code\\\"))))`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/forge-std/src/Base.sol\":\"CommonBase\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710\",\"dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp\"]},\"evm/lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7\",\"dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX\"]},\"evm/lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4\",\"dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/forge-std/src/Base.sol":"CommonBase"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/forge-std/src/Base.sol":{"keccak256":"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa","urls":["bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710","dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/StdStorage.sol":{"keccak256":"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0","urls":["bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7","dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/Vm.sol":{"keccak256":"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72","urls":["bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4","dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba"],"license":"MIT OR Apache-2.0"}},"version":1},"id":0}
@@ -0,0 +1 @@
1
+ {"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/forge-std/src/Base.sol\":\"ScriptBase\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710\",\"dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp\"]},\"evm/lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7\",\"dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX\"]},\"evm/lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4\",\"dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/forge-std/src/Base.sol":"ScriptBase"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/forge-std/src/Base.sol":{"keccak256":"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa","urls":["bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710","dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/StdStorage.sol":{"keccak256":"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0","urls":["bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7","dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/Vm.sol":{"keccak256":"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72","urls":["bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4","dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba"],"license":"MIT OR Apache-2.0"}},"version":1},"id":0}
@@ -0,0 +1 @@
1
+ {"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/forge-std/src/Base.sol\":\"TestBase\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/forge-std/src/Base.sol\":{\"keccak256\":\"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710\",\"dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp\"]},\"evm/lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7\",\"dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX\"]},\"evm/lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4\",\"dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/forge-std/src/Base.sol":"TestBase"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/forge-std/src/Base.sol":{"keccak256":"0x926f1c9907b7dadb56dc920ae80dc473070989ab1f09b63e207ddc2d37110faa","urls":["bzz-raw://8a470cde3eb7aa7ff3ac0d71c6b8e06f394609b937a7edbc7b5fdfab18c2b710","dweb:/ipfs/QmUgmpmVzLXfmxhmnPjx9TUc2WdgNdBuucFZfh6fSciaFp"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/StdStorage.sol":{"keccak256":"0x85290fc3df17c1c59b86bd3479d9619f9b99e97faeb30f617bced925a0a49bf0","urls":["bzz-raw://b09672fe62652e01d4e8aa951cb4416c0ad4d2b8f8541ef31e28fd1d3bac87d7","dweb:/ipfs/QmT17qtKCY83ct3AqqNYotHpr1feUDCZnKsis4Qgt6cBBX"],"license":"MIT OR Apache-2.0"},"evm/lib/forge-std/src/Vm.sol":{"keccak256":"0x11aff2ee8ef31d9f95853b77f806d89c0028a4414969bd5f8d38d22b37f50f72","urls":["bzz-raw://e4b069af93c08b8d4915c3205260c323788dff362aa46fe83c041c3d2c6f2cb4","dweb:/ipfs/QmcYnpAfmbiLxFtPRAFSH8oUQXvsDfGrQXQ2A9MtEretba"],"license":"MIT OR Apache-2.0"}},"version":1},"id":0}
@@ -0,0 +1 @@
1
+ {"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/openzeppelin-contracts/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/openzeppelin-contracts/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol":"Context"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"}},"version":1},"id":4}
@@ -0,0 +1 @@
1
+ {"abi":[{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"evm/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=evm/lib/openzeppelin-contracts/\",\":ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=evm/lib/forge-std/src/\",\":halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=evm/lib/openzeppelin-contracts/\"]},\"sources\":{\"evm/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"evm/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"evm/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"evm/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientAllowance"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"ERC20InsufficientBalance"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"type":"error","name":"ERC20InvalidApprover"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"type":"error","name":"ERC20InvalidReceiver"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"type":"error","name":"ERC20InvalidSender"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"type":"error","name":"ERC20InvalidSpender"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"value","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"name","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"constructor":{"details":"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/=evm/lib/openzeppelin-contracts/","ds-test/=evm/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=evm/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=evm/lib/forge-std/src/","halmos-cheatcodes/=evm/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=evm/lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"evm/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":"ERC20"},"evmVersion":"cancun","libraries":{}},"sources":{"evm/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b","urls":["bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b","dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol":{"keccak256":"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31","urls":["bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09","dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"evm/lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"}},"version":1},"id":25}